Ejemplo n.º 1
0
 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());
        }
Ejemplo n.º 4
0
        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);
        }