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; }
public static FavoriteFolderEntry Create(MailboxSession session, StoreObjectId folderId, FolderTreeDataType dataType, FavoriteFolderType favoriteFolderType) { Util.ThrowOnNullArgument(session, "session"); Util.ThrowOnNullArgument(session, "folderId"); EnumValidator.ThrowIfInvalid <FolderTreeDataType>(dataType, "dataType"); EnumValidator.ThrowIfInvalid <FavoriteFolderType>(favoriteFolderType, "favoriteFolderType"); FolderTreeDataSection groupSection = FavoriteFolderEntry.FavoritesGroupSectionByFolderType[favoriteFolderType]; byte[] favoritesClassIdValue = FavoriteFolderEntry.FavoritesClassIdValueByFolderType[favoriteFolderType]; FavoriteFolderEntry favoriteFolderEntry = ItemBuilder.CreateNewItem <FavoriteFolderEntry>(session, session.GetDefaultFolderId(DefaultFolderType.CommonViews), ItemCreateInfo.FavoriteFolderEntryInfo, CreateMessageType.Associated); byte[] favoritesParentGroupClassIdValue = (FavoriteFolderType.Contact == favoriteFolderType || FavoriteFolderType.Calendar == favoriteFolderType) ? NavigationNodeParentGroup.OtherFoldersClassId.AsBytes : null; FolderTreeDataFlags additionalFolderTreeDataFlags = FolderTreeDataFlags.None; if (folderId.IsLegacyPublicFolderType()) { additionalFolderTreeDataFlags = FavoriteFolderEntry.PublicFolderTreeDataFlagsByFolderType[favoriteFolderType]; } favoriteFolderEntry.SetPropertiesOfFavoriteFolderEntry(session, folderId, dataType, groupSection, favoritesClassIdValue, favoritesParentGroupClassIdValue, additionalFolderTreeDataFlags); return(favoriteFolderEntry); }
internal static bool IsTaskSection(IStorePropertyBag row) { FolderTreeDataSection valueOrDefault = row.GetValueOrDefault <FolderTreeDataSection>(FolderTreeDataSchema.GroupSection, FolderTreeDataSection.None); return(valueOrDefault == FolderTreeDataSection.Tasks); }
private void SetPropertiesOfFavoriteFolderEntry(MailboxSession session, StoreObjectId folderId, FolderTreeDataType dataType, FolderTreeDataSection groupSection, byte[] favoritesClassIdValue, byte[] favoritesParentGroupClassIdValue, FolderTreeDataFlags additionalFolderTreeDataFlags) { if (folderId.ObjectType != StoreObjectType.Folder && folderId.ObjectType != StoreObjectType.SearchFolder) { throw new NotSupportedException("Only folder and search folder types can be added to favorites."); } this[FolderTreeDataSchema.GroupSection] = groupSection; if (favoritesClassIdValue != null) { this[FolderTreeDataSchema.ClassId] = favoritesClassIdValue; } if (favoritesParentGroupClassIdValue != null) { this[FolderTreeDataSchema.ParentGroupClassId] = favoritesParentGroupClassIdValue; } base.MailboxSession = session; this.NodeEntryId = folderId.ProviderLevelItemId; this.StoreEntryId = Microsoft.Exchange.Data.Storage.StoreEntryId.ToProviderStoreEntryId(session.MailboxOwner, folderId.IsLegacyPublicFolderType()); if (additionalFolderTreeDataFlags != FolderTreeDataFlags.None) { base.FolderTreeDataFlags |= additionalFolderTreeDataFlags; } if (folderId.IsLegacyPublicFolderType()) { byte[] providerLevelItemId = folderId.ProviderLevelItemId; providerLevelItemId[0] = 239; providerLevelItemId[20] = 2; this.NavigationNodeRecordKey = providerLevelItemId; } base.FolderTreeDataType = dataType; }