コード例 #1
0
        List <FolderRec> IMailbox.EnumerateFolderHierarchy(EnumerateFolderHierarchyFlags flags, PropTag[] additionalPtagsToLoad)
        {
            MrsTracer.Provider.Function("StorageMailbox.EnumerateFolderHierarchy({0})", new object[]
            {
                flags
            });
            base.VerifyMailboxConnection(VerifyMailboxConnectionFlags.None);
            List <FolderRec> list = new List <FolderRec>(50);

            using (base.RHTracker.Start())
            {
                bool flag = flags.HasFlag(EnumerateFolderHierarchyFlags.WellKnownPublicFoldersOnly);
                NativeStorePropertyDefinition[] propertiesToLoad;
                if (additionalPtagsToLoad == null || additionalPtagsToLoad.Length == 0)
                {
                    propertiesToLoad = this.FolderPropertyDefinitionsToLoad;
                }
                else
                {
                    List <NativeStorePropertyDefinition> list2 = new List <NativeStorePropertyDefinition>();
                    list2.AddRange(this.ConvertPropTagsToDefinitions(additionalPtagsToLoad));
                    list2.AddRange(this.FolderPropertyDefinitionsToLoad);
                    propertiesToLoad = list2.ToArray();
                }
                if (!flag)
                {
                    this.LoadFolderHierarchy(this.GetFolderId(null), propertiesToLoad, list);
                }
                else
                {
                    PublicFolderSession publicFolderSession = this.GetPublicFolderSession();
                    list.Add(this.GetFolderRec(this.GetFolderId(null), propertiesToLoad));
                    list.Add(this.GetFolderRec(publicFolderSession.GetIpmSubtreeFolderId(), propertiesToLoad));
                    list.Add(this.GetFolderRec(publicFolderSession.GetNonIpmSubtreeFolderId(), propertiesToLoad));
                    list.Add(this.GetFolderRec(publicFolderSession.GetEFormsRegistryFolderId(), propertiesToLoad));
                    list.Add(this.GetFolderRec(publicFolderSession.GetAsyncDeleteStateFolderId(), propertiesToLoad));
                    list.Add(this.GetFolderRec(publicFolderSession.GetDumpsterRootFolderId(), propertiesToLoad));
                    list.Add(this.GetFolderRec(publicFolderSession.GetInternalSubmissionFolderId(), propertiesToLoad));
                    list.Add(this.GetFolderRec(publicFolderSession.GetTombstonesRootFolderId(), propertiesToLoad));
                }
            }
            MrsTracer.Provider.Debug("Loaded {0} folders", new object[]
            {
                list.Count
            });
            return(list);
        }
コード例 #2
0
        internal static PublicFolderMailboxDumpsterInfo LoadInfo(PublicFolderSession session, Action <LocalizedString, LocalizedString, int> writeProgress)
        {
            string value = null;
            int    num   = 0;
            bool   flag  = false;
            int    num2  = 0;
            int    num3  = 0;
            int    num4  = 0;
            int    num5  = 0;
            int    num6  = 0;

            using (Folder folder = Folder.Bind(session, session.GetDumpsterRootFolderId(), PublicFolderMailboxDumpsterInfo.DumpsterPropertiesToLoad))
            {
                byte[] valueOrDefault = folder.GetValueOrDefault <byte[]>(FolderSchema.PublicFolderDumpsterHolderEntryId, null);
                if (valueOrDefault != null)
                {
                    value = session.IdConverter.CreateFolderId(session.IdConverter.GetIdFromLongTermId(valueOrDefault)).ToHexEntryId();
                }
                using (QueryResult queryResult = folder.FolderQuery(FolderQueryFlags.DeepTraversal, null, null, PublicFolderMailboxDumpsterInfo.DumpsterSubfoldersProperties))
                {
                    int  estimatedRowCount = queryResult.EstimatedRowCount;
                    bool flag2             = false;
                    int  num7 = 0;
                    for (;;)
                    {
                        object[][] rows = queryResult.GetRows(10000);
                        if (rows == null || rows.Length == 0)
                        {
                            break;
                        }
                        if (num == 0 && estimatedRowCount > rows.Length && writeProgress != null)
                        {
                            flag2 = true;
                        }
                        foreach (object[] array2 in rows)
                        {
                            num++;
                            if (flag2)
                            {
                                if (num > estimatedRowCount)
                                {
                                    estimatedRowCount = queryResult.EstimatedRowCount;
                                }
                                int num8 = num * 100 / estimatedRowCount;
                                if (num8 != num7 && num8 <= 100)
                                {
                                    writeProgress(ClientStrings.PublicFolderMailboxDumpsterInfo, ClientStrings.PublicFolderMailboxInfoFolderEnumeration(num, estimatedRowCount), num8);
                                    num7 = num8;
                                }
                            }
                            string text = array2[1] as string;
                            if (!string.IsNullOrEmpty(text))
                            {
                                bool flag3 = StringComparer.OrdinalIgnoreCase.Equals("\\NON_IPM_SUBTREE\\DUMPSTER_ROOT\\DUMPSTER_EXTEND", text);
                                if (flag3)
                                {
                                    flag = true;
                                }
                                else if (!text.StartsWith("\\NON_IPM_SUBTREE\\DUMPSTER_ROOT\\DUMPSTER_EXTEND\\", StringComparison.OrdinalIgnoreCase))
                                {
                                    num2++;
                                }
                                else
                                {
                                    object obj = array2[0];
                                    if (obj is int)
                                    {
                                        int num9 = (int)obj;
                                        if (num9 == 2)
                                        {
                                            num3++;
                                        }
                                        else if (num9 == 3)
                                        {
                                            num4++;
                                        }
                                        else if (num9 == 4)
                                        {
                                            num5++;
                                        }
                                        else if (num9 > 4)
                                        {
                                            num6++;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            PublicFolderMailboxDumpsterInfo publicFolderMailboxDumpsterInfo = new PublicFolderMailboxDumpsterInfo();

            publicFolderMailboxDumpsterInfo[PublicFolderDumpsterInfoSchema.DumpsterHolderEntryId] = value;
            publicFolderMailboxDumpsterInfo[PublicFolderDumpsterInfoSchema.CountTotalFolders]     = num;
            publicFolderMailboxDumpsterInfo[PublicFolderDumpsterInfoSchema.HasDumpsterExtended]   = flag;
            publicFolderMailboxDumpsterInfo[PublicFolderDumpsterInfoSchema.CountLegacyDumpsters]  = num2;
            publicFolderMailboxDumpsterInfo[PublicFolderDumpsterInfoSchema.CountContainerLevel1]  = num3;
            publicFolderMailboxDumpsterInfo[PublicFolderDumpsterInfoSchema.CountContainerLevel2]  = num4;
            publicFolderMailboxDumpsterInfo[PublicFolderDumpsterInfoSchema.CountDumpsters]        = num5;
            publicFolderMailboxDumpsterInfo[PublicFolderDumpsterInfoSchema.CountDeletedFolders]   = num6;
            publicFolderMailboxDumpsterInfo.propertyBag.ResetChangeTracking();
            return(publicFolderMailboxDumpsterInfo);
        }