public NavigationNodeFolder AddFolderToDefaultGroup(UserContext userContext, NavigationNodeGroupType groupType, Folder folder, bool isSharedFolder) { this.ThrowIfSaved(); if (!NavigationNodeCollection.IsDefaultGroupType(groupType)) { throw new ArgumentOutOfRangeException("Invalid default group type:" + groupType.ToString()); } this.ThrowIfNonMailGroupSectionNotSupported(); NavigationNodeCollection.ThrowIfGroupSectionNotMatchFolderClass(this.navigationNodeGroupSection, folder.ClassName); MailboxSession mailboxSession = folder.Session as MailboxSession; if (mailboxSession == null) { throw new ArgumentException("Should not add a folder that doesn't belong to a mailbox session."); } string text; if (isSharedFolder) { text = Utilities.GetMailboxOwnerDisplayName(mailboxSession); if (!Utilities.IsSpecialFolderForSession(mailboxSession, folder.Id.ObjectId)) { text = string.Format(LocalizedStrings.GetNonEncoded(-83764036), text, folder.DisplayName); } } else { text = folder.DisplayName; } return(this.AddFolderToGroup(this.GetDefaultGroup(groupType), folder, userContext, text, isSharedFolder ? NavigationNodeType.SharedFolder : NavigationNodeType.NormalFolder)); }
internal static string GetDefaultGroupSubject(NavigationNodeGroupType groupType, NavigationNodeGroupSection groupSection) { if (groupSection == NavigationNodeGroupSection.First) { return(LocalizedStrings.GetNonEncoded(364750115)); } return(LocalizedStrings.GetNonEncoded(NavigationNodeCollection.localizedGroupNames[groupSection][(int)groupType])); }
private static Guid GetDefaultGroupClassId(NavigationNodeGroupType navigationNodeGroupType) { switch (navigationNodeGroupType) { case NavigationNodeGroupType.MyFoldersGroup: return(NavigationNodeCollection.MyFoldersClassId); case NavigationNodeGroupType.SharedFoldersGroup: return(NavigationNodeCollection.PeoplesFoldersClassId); default: return(NavigationNodeCollection.OtherFoldersClassId); } }
public void SetCalendarColor() { base.ThrowIfCannotActAsOwner(); int serverColorIndex = CalendarColorManager.GetServerColorIndex((int)base.GetParameter("Idx")); NavigationNodeCollection navigationNodeCollection = NavigationNodeCollection.TryCreateNavigationNodeCollection(base.UserContext, base.UserContext.MailboxSession, NavigationNodeGroupSection.Calendar); NavigationNodeFolder[] array = null; OwaStoreObjectId owaStoreObjectId = (OwaStoreObjectId)base.GetParameter("fId"); if (owaStoreObjectId.IsGSCalendar) { array = navigationNodeCollection.FindGSCalendarsByLegacyDN(owaStoreObjectId.MailboxOwnerLegacyDN); } else { array = navigationNodeCollection.FindFoldersById(owaStoreObjectId.StoreObjectId); } if (array == null || (array.Length == 0 && !owaStoreObjectId.IsGSCalendar)) { using (Folder calendarFolder = this.GetCalendarFolder(false)) { NavigationNodeGroupType groupType = NavigationNodeGroupType.MyFoldersGroup; bool flag = base.UserContext.IsInOtherMailbox(calendarFolder); if (flag || Utilities.IsOneOfTheFolderFlagsSet(calendarFolder, new ExtendedFolderFlags[] { ExtendedFolderFlags.SharedIn, ExtendedFolderFlags.ExchangeCrossOrgShareFolder })) { groupType = NavigationNodeGroupType.SharedFoldersGroup; } array = new NavigationNodeFolder[] { navigationNodeCollection.AddFolderToDefaultGroup(base.UserContext, groupType, calendarFolder, flag) }; } } if (array != null) { foreach (NavigationNodeFolder navigationNodeFolder in array) { navigationNodeFolder.NavigationNodeCalendarColor = serverColorIndex; } navigationNodeCollection.Save(base.UserContext.MailboxSession); } }
private int GetDefaultGroup(NavigationNodeGroupType groupType) { int num = this.FindGroupById(NavigationNodeCollection.GetDefaultGroupClassId(groupType)); if (num < 0) { NavigationNodeGroup node = NavigationNodeCollection.CreateDefaultGroup(groupType, this.navigationNodeGroupSection); num = 0; if (groupType == NavigationNodeGroupType.SharedFoldersGroup) { num = this.FindGroupById(NavigationNodeCollection.GetDefaultGroupClassId(NavigationNodeGroupType.MyFoldersGroup)) + 1; } else if (groupType == NavigationNodeGroupType.OtherFoldersGroup) { int val = this.FindGroupById(NavigationNodeCollection.GetDefaultGroupClassId(NavigationNodeGroupType.MyFoldersGroup)); int val2 = this.FindGroupById(NavigationNodeCollection.GetDefaultGroupClassId(NavigationNodeGroupType.SharedFoldersGroup)); num = Math.Max(val, val2) + 1; } base.Insert(num, node); } return(num); }
internal NavigationNodeFolder AddMyFolderToGroup(UserContext userContext, MailboxSession mailboxSession, object[] folderPropertyValues, Dictionary <PropertyDefinition, int> folderPropertyMap) { this.ThrowIfSaved(); this.ThrowIfNonMailGroupSectionNotSupported(); Utilities.CheckAndThrowForRequiredProperty(folderPropertyMap, new PropertyDefinition[] { FolderSchema.Id, FolderSchema.DisplayName, StoreObjectSchema.ContainerClass, FolderSchema.ExtendedFolderFlags }); NavigationNodeCollection.ThrowIfGroupSectionNotMatchFolderClass(this.navigationNodeGroupSection, folderPropertyValues[folderPropertyMap[StoreObjectSchema.ContainerClass]] as string); bool flag = Utilities.IsOneOfTheFolderFlagsSet(folderPropertyValues[folderPropertyMap[FolderSchema.ExtendedFolderFlags]], new ExtendedFolderFlags[] { ExtendedFolderFlags.SharedIn, ExtendedFolderFlags.ExchangeCrossOrgShareFolder }); bool flag2 = Utilities.IsOneOfTheFolderFlagsSet(folderPropertyValues[folderPropertyMap[FolderSchema.ExtendedFolderFlags]], new ExtendedFolderFlags[] { ExtendedFolderFlags.WebCalFolder }); NavigationNodeGroupType groupType = NavigationNodeGroupType.MyFoldersGroup; if (flag2) { groupType = NavigationNodeGroupType.OtherFoldersGroup; } else if (flag) { groupType = NavigationNodeGroupType.SharedFoldersGroup; } int defaultGroup = this.GetDefaultGroup(groupType); NavigationNodeFolder navigationNodeFolder = new NavigationNodeFolder(mailboxSession, userContext.IsMyMailbox(mailboxSession), folderPropertyValues, folderPropertyMap, (folderPropertyValues[folderPropertyMap[FolderSchema.DisplayName]] as string) ?? string.Empty, base[defaultGroup].NavigationNodeGroupClassId, this.navigationNodeGroupSection, base[defaultGroup].Subject); base[defaultGroup].Children.Add(navigationNodeFolder); return(navigationNodeFolder); }
private void Load(UserContext userContext, MailboxSession session, object[][] rows) { int num = 0; while (num < rows.Length && !NavigationNodeCollection.CheckItemClassAndSection(this.navigationNodeGroupSection, rows[num])) { num++; } if (this.IsFavorites) { base.Clear(); base.Add(NavigationNodeCollection.CreateFavoritesGroup()); } else { int num2 = num; while (num2 < rows.Length && NavigationNodeCollection.CheckItemClassAndSection(this.navigationNodeGroupSection, rows[num2])) { if (NavigationNodeCollection.CheckNodeTypes(rows[num2], new NavigationNodeType[] { NavigationNodeType.Header })) { this.UniquelyAddGroup(new NavigationNodeGroup(rows[num2], NavigationNodeCollection.PropertyMap)); } num2++; } } Dictionary <Guid, int> dictionary = new Dictionary <Guid, int>(base.Count); for (int i = 0; i < base.Count; i++) { dictionary.Add(base[i].NavigationNodeGroupClassId, i); } while (num < rows.Length && NavigationNodeCollection.CheckItemClassAndSection(this.navigationNodeGroupSection, rows[num])) { if (NavigationNodeCollection.CheckNodeTypes(rows[num], new NavigationNodeType[] { NavigationNodeType.NormalFolder, NavigationNodeType.SharedFolder, NavigationNodeType.SmartFolder, NavigationNodeType.GSCalendar })) { bool includeArchive = this.GroupSection == NavigationNodeGroupSection.First; NavigationNodeFolder navigationNodeFolder = new NavigationNodeFolder(userContext, session, includeArchive, rows[num], NavigationNodeCollection.PropertyMap); if (navigationNodeFolder.IsValid) { int num3 = -1; if (this.IsFavorites) { num3 = 0; } else { Guid guid = navigationNodeFolder.NavigationNodeParentGroupClassId; if (!guid.Equals(Guid.Empty) && dictionary.ContainsKey(guid)) { num3 = dictionary[guid]; } else { NavigationNodeGroup node = null; if (!guid.Equals(Guid.Empty) && !string.IsNullOrEmpty(navigationNodeFolder.NavigationNodeGroupName)) { node = NavigationNodeCollection.CreateCustomizedGroup(this.navigationNodeGroupSection, navigationNodeFolder.NavigationNodeGroupName, guid); } else { NavigationNodeGroupType navigationNodeGroupType = NavigationNodeGroupType.OtherFoldersGroup; switch (navigationNodeFolder.NavigationNodeType) { case NavigationNodeType.NormalFolder: navigationNodeGroupType = NavigationNodeGroupType.MyFoldersGroup; break; case NavigationNodeType.SharedFolder: navigationNodeGroupType = NavigationNodeGroupType.SharedFoldersGroup; break; } guid = NavigationNodeCollection.GetDefaultGroupClassId(navigationNodeGroupType); if (dictionary.ContainsKey(guid)) { num3 = dictionary[guid]; } else { node = NavigationNodeCollection.CreateDefaultGroup(navigationNodeGroupType, this.navigationNodeGroupSection); } } if (num3 < 0) { base.Add(node); num3 = base.Count - 1; dictionary[guid] = num3; } } } this.UniquelyAddFolder(navigationNodeFolder, num3); } } num++; } this.serverCollection = new NavigationNodeList <NavigationNodeGroup>(); base.CopyToList(this.serverCollection); foreach (NavigationNodeGroup navigationNodeGroup in this) { foreach (NavigationNodeFolder navigationNodeFolder2 in navigationNodeGroup.Children) { if (navigationNodeFolder2.FolderId != null && !navigationNodeFolder2.IsFlagSet(NavigationNodeFlags.PublicFolderFavorite)) { navigationNodeFolder2.FixLegacyDNRelatedFlag(session); } } } }
private static bool IsDefaultGroupType(NavigationNodeGroupType groupType) { return(groupType == NavigationNodeGroupType.MyFoldersGroup || groupType == NavigationNodeGroupType.OtherFoldersGroup || groupType == NavigationNodeGroupType.SharedFoldersGroup); }
private static NavigationNodeGroup CreateDefaultGroup(NavigationNodeGroupType groupType, NavigationNodeGroupSection groupSection) { return(new NavigationNodeGroup(NavigationNodeCollection.GetDefaultGroupSubject(groupType, groupSection), groupSection, NavigationNodeCollection.GetDefaultGroupClassId(groupType))); }