private int UpdateItems(IConversationTree conversationTree, List <GroupOperationResult> results) { int num = 0; foreach (IConversationTreeNode conversationTreeNode in conversationTree) { for (int i = 0; i < conversationTreeNode.StorePropertyBags.Count; i++) { if (!this.CanSkipProcessing(conversationTreeNode.StorePropertyBags[i])) { StoreId storeId = conversationTreeNode.StorePropertyBags[i].TryGetProperty(ItemSchema.Id) as StoreId; List <string> list = null; if (ConversationActionItem.MergeCategories(conversationTreeNode.StorePropertyBags[i].TryGetProperty(ItemSchema.Categories) as string[], this.AlwaysCategorizeValue, this.ConversationActionLastCategorySet, out list)) { try { using (Item item = Microsoft.Exchange.Data.Storage.Item.Bind(base.Session, storeId, null)) { num++; item.OpenAsReadWrite(); if (list.Count == 0) { item.Delete(ItemSchema.Categories); } else { item[ItemSchema.Categories] = list.ToArray(); } item.Save(SaveMode.ResolveConflicts); results.Add(new GroupOperationResult(OperationResult.Succeeded, new StoreObjectId[] { StoreId.GetStoreObjectId(storeId) }, null)); } } catch (LocalizedException storageException) { results.Add(new GroupOperationResult(OperationResult.Failed, new StoreObjectId[] { StoreId.GetStoreObjectId(storeId) }, storageException)); } } } } } if (ConversationActionItem.NeedToAddCategory(this.ConversationActionLastCategorySet, this.AlwaysCategorizeValue)) { this.ConversationActionLastCategorySet = this.AlwaysCategorizeValue; } return(num); }
private static bool MergeCategories(IList <string> messageCategories, IList <string> categoriesCurrent, IList <string> categoriesPrev, out List <string> mergedCategories) { mergedCategories = null; categoriesCurrent = ((categoriesCurrent == null) ? new List <string>() : categoriesCurrent); categoriesPrev = ((categoriesPrev == null) ? new List <string>() : categoriesPrev); messageCategories = ((messageCategories == null) ? new List <string>() : messageCategories); IEnumerable <string> second = categoriesCurrent.Except(categoriesPrev, Category.NameComparer); IEnumerable <string> second2 = categoriesPrev.Except(categoriesCurrent, Category.NameComparer); IEnumerable <string> collection = messageCategories.Except(second2).Union(second); mergedCategories = new List <string>(collection); return(ConversationActionItem.NeedToAddCategory(mergedCategories, messageCategories)); }