private IEnumerable <IFavoritePublicFolder> InternalEnumerateFavorites(FolderTreeDataSection folderTreeDataSection) { using (IFolder commonViewsFolder = this.InternalBindToCommonViewsFolder()) { using (IQueryResult queryResult = commonViewsFolder.IItemQuery(ItemQueryType.Associated, null, FavoritePublicFoldersManager.FavoriteFolderEntrySortBy, FavoritePublicFoldersManager.FavoriteFolderEntryProperties)) { if (queryResult.SeekToCondition(SeekReference.OriginBeginning, FavoritePublicFoldersManager.ItemClassFilter, SeekToConditionFlags.AllowExtendedFilters)) { object[][] rowsFetched = null; bool shouldContinue = false; bool mightBeMoreRows = false; do { rowsFetched = queryResult.GetRows(10000, out mightBeMoreRows); foreach (object[] row in rowsFetched) { IFavoritePublicFolder favoritePublicFolder = null; if (this.TryFetchFavoritePublicFolder(row, (int)folderTreeDataSection, out favoritePublicFolder, out shouldContinue)) { yield return(favoritePublicFolder); } } }while (rowsFetched.Length > 0 && shouldContinue); } } } yield break; }
// Token: 0x06001A9B RID: 6811 RVA: 0x00063C64 File Offset: 0x00061E64 private PeopleFilter MakePublicFolderPeopleFilter(IFavoritePublicFolder folder, int folderIndex) { ConcatenatedIdAndChangeKey concatenatedIdForPublicFolder = IdConverter.GetConcatenatedIdForPublicFolder(folder.FolderId); return(new PeopleFilter { DisplayName = folder.DisplayName, SortGroupPriority = 2000 + folderIndex, IsReadOnly = false, FolderId = new FolderId { Id = concatenatedIdForPublicFolder.Id } }); }
// Token: 0x06001A99 RID: 6809 RVA: 0x00063744 File Offset: 0x00061944 protected override PeopleFilter[] InternalExecute() { UserContext userContext = UserContextManager.GetUserContext(CallContext.Current.HttpContext, CallContext.Current.EffectiveCaller, true); ExchangeVersion.Current = ExchangeVersion.Latest; MailboxSession mailboxIdentityMailboxSession = base.MailboxIdentityMailboxSession; MailboxId mailboxId = new MailboxId(mailboxIdentityMailboxSession); List <PeopleFilter> list = new List <PeopleFilter>(); list.Add(this.MakePeopleFilter(mailboxIdentityMailboxSession.GetDefaultFolderId(DefaultFolderType.MyContacts), mailboxIdentityMailboxSession.GetDefaultFolderId(DefaultFolderType.Configuration), mailboxId, ClientStrings.MyContactsFolderName.ToString(), 1, true)); PeopleFilterGroupPriorityManager peopleFilterGroupPriorityManager = new PeopleFilterGroupPriorityManager(mailboxIdentityMailboxSession, new XSOFactory()); foreach (IStorePropertyBag storePropertyBag in new ContactFoldersEnumerator(mailboxIdentityMailboxSession, new XSOFactory(), ContactFoldersEnumeratorOptions.SkipHiddenFolders | ContactFoldersEnumeratorOptions.SkipDeletedFolders, PeopleFilterGroupPriorityManager.RequiredFolderProperties)) { StoreObjectId objectId = ((VersionedId)storePropertyBag.TryGetProperty(FolderSchema.Id)).ObjectId; StoreObjectId parentId = storePropertyBag.TryGetProperty(StoreObjectSchema.ParentItemId) as StoreObjectId; string valueOrDefault = storePropertyBag.GetValueOrDefault <string>(FolderSchema.DisplayName, string.Empty); int sortGroupPriority = peopleFilterGroupPriorityManager.DetermineSortGroupPriority(storePropertyBag); ExtendedFolderFlags valueOrDefault2 = storePropertyBag.GetValueOrDefault <ExtendedFolderFlags>(FolderSchema.ExtendedFolderFlags, (ExtendedFolderFlags)0); bool isReadOnly = (valueOrDefault2 & ExtendedFolderFlags.ReadOnly) == ExtendedFolderFlags.ReadOnly; list.Add(this.MakePeopleFilter(objectId, parentId, mailboxId, valueOrDefault, sortGroupPriority, isReadOnly)); } if (userContext.FeaturesManager.ClientServerSettings.OwaPublicFolders.Enabled) { IFavoritePublicFoldersManager favoritePublicFoldersManager = new FavoritePublicFoldersManager(mailboxIdentityMailboxSession); List <IFavoritePublicFolder> list2 = new List <IFavoritePublicFolder>(); using (IEnumerator <IFavoritePublicFolder> enumerator2 = favoritePublicFoldersManager.EnumerateContactsFolders().GetEnumerator()) { while (enumerator2.MoveNext()) { IFavoritePublicFolder folder = enumerator2.Current; if (!list2.Exists((IFavoritePublicFolder storedFavorite) => storedFavorite.FolderId.Equals(folder.FolderId))) { list2.Add(folder); } } } if (list2.Count > 0) { for (int i = 0; i < list2.Count; i++) { list.Add(this.MakePublicFolderPeopleFilter(list2[i], i)); } } } ClientSecurityContext clientSecurityContext = base.CallContext.EffectiveCaller.ClientSecurityContext; IExchangePrincipal mailboxOwner = base.MailboxIdentityMailboxSession.MailboxOwner; AddressLists addressLists = new AddressLists(clientSecurityContext, mailboxOwner, userContext); if (addressLists.GlobalAddressList != null) { list.Add(new PeopleFilter { DisplayName = addressLists.GlobalAddressList.DisplayName, FolderId = new AddressListId { Id = addressLists.GlobalAddressList.Id.ObjectGuid.ToString() }, SortGroupPriority = 1000, IsReadOnly = true }); } if (addressLists.AllRoomsAddressList != null) { list.Add(new PeopleFilter { DisplayName = addressLists.AllRoomsAddressList.DisplayName, FolderId = new AddressListId { Id = addressLists.AllRoomsAddressList.Id.ObjectGuid.ToString() }, SortGroupPriority = 1001, IsReadOnly = true }); } foreach (AddressBookBase addressBookBase in addressLists.AllAddressLists) { if ((addressLists.GlobalAddressList == null || !addressBookBase.Id.Equals(addressLists.GlobalAddressList.Id)) && (addressLists.AllRoomsAddressList == null || !addressBookBase.Id.Equals(addressLists.AllRoomsAddressList.Id)) && !string.IsNullOrEmpty(addressBookBase.RecipientFilter) && (!addressBookBase.IsModernGroupsAddressList || userContext.FeaturesManager.ClientServerSettings.ModernGroups.Enabled)) { list.Add(new PeopleFilter { DisplayName = addressBookBase.DisplayName, FolderId = new AddressListId { Id = addressBookBase.Id.ObjectGuid.ToString() }, SortGroupPriority = (addressBookBase.IsModernGroupsAddressList ? 1009 : this.GetSortGroupPriority(addressBookBase.RecipientFilter)), IsReadOnly = true }); } } list.Sort(new PeopleFilterComparer(mailboxIdentityMailboxSession.PreferedCulture)); return(list.ToArray()); }
private bool TryFetchFavoritePublicFolder(object[] row, int folderTreeDataSectionValue, out IFavoritePublicFolder favoritePublicFolder, out bool shouldContinue) { favoritePublicFolder = null; shouldContinue = true; StoreId storeId = FavoritePublicFoldersManager.InternalGetItemPropertyOrDefault <StoreId>(row, null, FavoritePublicFoldersManager.FavoriteFolderEntryPropertyIndex.Id); if (storeId == null) { FavoritePublicFoldersManager.Tracer.TraceError((long)this.GetHashCode(), "TryFetchFavoritePublicFolder: detected item with null id"); return(false); } FavoritePublicFoldersManager.Tracer.TraceDebug <string>((long)this.GetHashCode(), "TryFetchFavoritePublicFolder: processing item '{0}'", storeId.ToBase64String()); string text = FavoritePublicFoldersManager.InternalGetItemPropertyOrDefault <string>(row, string.Empty, FavoritePublicFoldersManager.FavoriteFolderEntryPropertyIndex.ItemClass); if (!ObjectClass.IsFolderTreeData(text)) { shouldContinue = false; FavoritePublicFoldersManager.Tracer.TraceDebug <string>((long)this.GetHashCode(), "TryFetchFavoritePublicFolder: not the expected item class '{0}', stopping enumeration", text); return(false); } int num = FavoritePublicFoldersManager.InternalGetItemPropertyOrDefault <int>(row, -1, FavoritePublicFoldersManager.FavoriteFolderEntryPropertyIndex.GroupSection); if (folderTreeDataSectionValue != num) { FavoritePublicFoldersManager.Tracer.TraceDebug <int, int>((long)this.GetHashCode(), "TryFetchFavoritePublicFolder: not the expected group section (expected '{0}', actual '{1}'), skipping", folderTreeDataSectionValue, num); return(false); } int num2 = FavoritePublicFoldersManager.InternalGetItemPropertyOrDefault <int>(row, -1, FavoritePublicFoldersManager.FavoriteFolderEntryPropertyIndex.Type); if (num2 != 0 && num2 != 2 && num2 != 1) { FavoritePublicFoldersManager.Tracer.TraceDebug <int>((long)this.GetHashCode(), "TryFetchFavoritePublicFolder: not the expected folder type '{0}', skipping", num2); return(false); } byte[] array = FavoritePublicFoldersManager.InternalGetItemPropertyOrDefault <byte[]>(row, null, FavoritePublicFoldersManager.FavoriteFolderEntryPropertyIndex.NodeEntryId); if (array == null) { FavoritePublicFoldersManager.Tracer.TraceError((long)this.GetHashCode(), "TryFetchFavoritePublicFolder: folderEntryId was null"); return(false); } StoreObjectId storeObjectId = null; try { storeObjectId = StoreObjectId.FromProviderSpecificId(array); if (!storeObjectId.IsPublicFolderType()) { FavoritePublicFoldersManager.Tracer.TraceDebug <string>((long)this.GetHashCode(), "TryFetchFavoritePublicFolder: folderStoreObjectId is not of the expected type (actual '{0}'), skipping", (storeObjectId == null) ? "null" : storeObjectId.ToHexEntryId()); return(false); } storeObjectId = StoreObjectId.FromLegacyFavoritePublicFolderId(storeObjectId); } catch (CorruptDataException arg) { FavoritePublicFoldersManager.Tracer.TraceError <CorruptDataException, string>((long)this.GetHashCode(), "GetFavorites: Exception {0} encountered trying to retrieve navigation node entry ID for folder entry id {1}", arg, (array == null) ? "null" : Convert.ToBase64String(array)); return(false); } string displayName = FavoritePublicFoldersManager.InternalGetItemPropertyOrDefault <string>(row, string.Empty, FavoritePublicFoldersManager.FavoriteFolderEntryPropertyIndex.Subject); favoritePublicFolder = new FavoritePublicFolder(storeObjectId, displayName); return(true); }