public override MessageItem CreateMessageItem(PropertyDefinition[] prefetchProperties)
        {
            PublicFolderSession publicFolderSession = base.StoreSession as PublicFolderSession;
            MessageItem         result;

            using (DisposeGuard disposeGuard = default(DisposeGuard))
            {
                MessageItem messageItem = MessageItem.Create(publicFolderSession, publicFolderSession.GetInternalSubmissionFolderId());
                disposeGuard.Add <MessageItem>(messageItem);
                messageItem.Load(prefetchProperties);
                messageItem.SaveFlags |= PropertyBagSaveFlags.IgnoreAccessDeniedErrors;
                disposeGuard.Success();
                result = messageItem;
            }
            return(result);
        }
示例#2
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);
        }