diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/GAB/FeatureGAB.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/GAB/FeatureGAB.cs index e0eb9db..53b1922 100644 --- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/GAB/FeatureGAB.cs +++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/GAB/FeatureGAB.cs @@ -118,6 +118,15 @@ namespace Acacia.Features.GAB } private static readonly BoolOption OPTION_PROCESS_MESSAGE = new BoolOption("ProcessMessage", true); + [AcaciaOption("If disabled, existing contacts are not deleted when a chunk is processed. " + + "This should only be disabled for debug purposes.")] + public bool ProcessMessageDeleteExisting + { + get { return GetOption(OPTION_PROCESS_MESSAGE_DELETE_EXISTING); } + set { SetOption(OPTION_PROCESS_MESSAGE_DELETE_EXISTING, value); } + } + private static readonly BoolOption OPTION_PROCESS_MESSAGE_DELETE_EXISTING = new BoolOption("ProcessMessageDeleteExisting", true); + [AcaciaOption("If disabled, contacts are not created from incoming GAB messages. " + "This should only be disabled for debug purposes.")] public bool CreateContacts diff --git a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/GAB/GABHandler.cs b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/GAB/GABHandler.cs index f4af236..e2c67d6 100644 --- a/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/GAB/GABHandler.cs +++ b/src/AcaciaZPushPlugin/AcaciaZPushPlugin/Features/GAB/GABHandler.cs @@ -268,18 +268,21 @@ namespace Acacia.Features.GAB _feature?.BeginProcessing(); try { - // Delete the old contacts from this chunk - using (ISearch search = Contacts.Search()) + if (_feature.ProcessMessageDeleteExisting) { - search.AddField(PROP_SEQUENCE, true).SetOperation(SearchOperation.Equal, index.numberOfChunks); - search.AddField(PROP_CHUNK, true).SetOperation(SearchOperation.Equal, index.chunk); - foreach (IItem oldItem in search.Search()) + // Delete the old contacts from this chunk + using (ISearch search = Contacts.Search()) { - // TODO: Search should handle this, like folder enumeration - using (oldItem) + search.AddField(PROP_SEQUENCE, true).SetOperation(SearchOperation.Equal, index.numberOfChunks); + search.AddField(PROP_CHUNK, true).SetOperation(SearchOperation.Equal, index.chunk); + foreach (IItem oldItem in search.Search()) { - Logger.Instance.Trace(this, "Deleting GAB entry: {0}", oldItem.Subject); - oldItem.Delete(); + // TODO: Search should handle this, like folder enumeration + using (oldItem) + { + Logger.Instance.Trace(this, "Deleting GAB entry: {0}", oldItem.Subject); + oldItem.Delete(); + } } } }