示例#1
0
        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));
        }
示例#2
0
 internal static string GetDefaultGroupSubject(NavigationNodeGroupType groupType, NavigationNodeGroupSection groupSection)
 {
     if (groupSection == NavigationNodeGroupSection.First)
     {
         return(LocalizedStrings.GetNonEncoded(364750115));
     }
     return(LocalizedStrings.GetNonEncoded(NavigationNodeCollection.localizedGroupNames[groupSection][(int)groupType]));
 }
示例#3
0
        private static Guid GetDefaultGroupClassId(NavigationNodeGroupType navigationNodeGroupType)
        {
            switch (navigationNodeGroupType)
            {
            case NavigationNodeGroupType.MyFoldersGroup:
                return(NavigationNodeCollection.MyFoldersClassId);

            case NavigationNodeGroupType.SharedFoldersGroup:
                return(NavigationNodeCollection.PeoplesFoldersClassId);

            default:
                return(NavigationNodeCollection.OtherFoldersClassId);
            }
        }
示例#4
0
        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);
            }
        }
示例#5
0
        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);
        }
示例#6
0
        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);
        }
示例#7
0
        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);
                    }
                }
            }
        }
示例#8
0
 private static bool IsDefaultGroupType(NavigationNodeGroupType groupType)
 {
     return(groupType == NavigationNodeGroupType.MyFoldersGroup || groupType == NavigationNodeGroupType.OtherFoldersGroup || groupType == NavigationNodeGroupType.SharedFoldersGroup);
 }
示例#9
0
 private static NavigationNodeGroup CreateDefaultGroup(NavigationNodeGroupType groupType, NavigationNodeGroupSection groupSection)
 {
     return(new NavigationNodeGroup(NavigationNodeCollection.GetDefaultGroupSubject(groupType, groupSection), groupSection, NavigationNodeCollection.GetDefaultGroupClassId(groupType)));
 }