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; }
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); }