Example #1
0
        List <FolderRec> IMailbox.EnumerateFolderHierarchy(EnumerateFolderHierarchyFlags flags, PropTag[] additionalPtagsToLoad)
        {
            MrsTracer.Provider.Function("ImapMailbox.EnumerateFolderHierarchy({0})", new object[]
            {
                flags
            });
            base.VerifyMailboxConnection(VerifyMailboxConnectionFlags.None);
            List <FolderRec>        list  = null;
            List <ImapClientFolder> list2 = this.EnumerateFolderHierarchy();

            list2.Add(new ImapClientFolder(ImapMailbox.Root)
            {
                IsSelectable = false
            });
            list2.Add(new ImapClientFolder(ImapMailbox.IpmSubtree)
            {
                IsSelectable = false
            });
            ImapClientFolder.FindWellKnownFolders(list2);
            this.folderCache = new EntryIdMap <ImapClientFolder>();
            list             = new List <FolderRec>(list2.Count);
            foreach (ImapClientFolder imapClientFolder in list2)
            {
                FolderRec folderRec = this.CreateFolderRec(imapClientFolder);
                list.Add(folderRec);
                this.folderCache.Add(folderRec.EntryId, imapClientFolder);
            }
            return(list);
        }
Example #2
0
 List <FolderRec> IMailbox.EnumerateFolderHierarchy(EnumerateFolderHierarchyFlags flags, PropTag[] additionalPtagsToLoad)
 {
     MrsTracer.Provider.Function("PopMailbox.EnumerateFolderHierarchy({0})", new object[]
     {
         flags
     });
     return(PopMailbox.folderHierarchy);
 }
Example #3
0
        public void LoadHierarchy(EnumerateFolderHierarchyFlags flags, string rootFolderPath, bool createRootIfNeeded, PropTag[] additionalPtagsToLoad)
        {
            List <PropTag> list = new List <PropTag>();

            if (this.SourceWKFTypePtag != PropTag.Null)
            {
                list.Add(this.SourceWKFTypePtag);
            }
            if (this.SourceEntryIDPtag != PropTag.Null)
            {
                list.Add(this.SourceEntryIDPtag);
            }
            if (additionalPtagsToLoad != null)
            {
                list.AddRange(additionalPtagsToLoad);
            }
            List <FolderRecWrapper> folders = this.mbxWrapper.LoadFolders <FolderMapping>(flags, list.ToArray());

            base.Config(folders);
            this.DiscoverWellKnownFolders();
            if (string.IsNullOrEmpty(rootFolderPath))
            {
                this.rootFolder = (FolderMapping)this.RootRec;
            }
            else
            {
                FolderMappingFlags folderMappingFlags;
                this.rootFolder = this.FindFolderByPath(string.Empty, rootFolderPath, createRootIfNeeded, out folderMappingFlags);
                if (this.rootFolder == null)
                {
                    throw new FolderIsMissingPermanentException(rootFolderPath);
                }
                if (!base.IsPublicFolderMailbox)
                {
                    this.wellKnownFolderMap.Reset();
                    this.wellKnownFolderMap.Clear();
                    this.EnumerateSubtree(EnumHierarchyFlags.AllFolders, this.rootFolder, delegate(FolderRecWrapper fRec, FolderMap.EnumFolderContext ctx)
                    {
                        FolderMapping folderMapping = (FolderMapping)fRec;
                        object obj = folderMapping.FolderRec[this.SourceWKFTypePtag];
                        if (obj != null)
                        {
                            this.SetWellKnownFolder((WellKnownFolderType)((int)obj), folderMapping);
                        }
                    });
                    if (this.GetWellKnownFolder(WellKnownFolderType.IpmSubtree) == null)
                    {
                        this.SetWellKnownFolder(WellKnownFolderType.IpmSubtree, this.rootFolder);
                    }
                }
            }
            this.rootFolder.Flags |= FolderMappingFlags.Root;
            if (this.GetWellKnownFolder(WellKnownFolderType.IpmSubtree) == null && !base.IsPublicFolderMailbox)
            {
                throw new FolderIsMissingPermanentException("IPM subtree");
            }
        }
Example #4
0
        List <FolderRec> IMailbox.EnumerateFolderHierarchy(EnumerateFolderHierarchyFlags flags, PropTag[] additionalPtagsToLoad)
        {
            MrsTracer.Provider.Function("PstMailbox.IMailbox.EnumerateFolderHierarchy({0})", new object[]
            {
                flags
            });
            List <FolderRec> list  = new List <FolderRec>(50);
            List <PropTag>   list2 = new List <PropTag>(FolderRec.PtagsToLoad);

            if (additionalPtagsToLoad != null)
            {
                list2.AddRange(additionalPtagsToLoad);
            }
            PropertyTag[] array = PstMailbox.MoMTPtaFromPta(list2.ToArray());
            try
            {
                IFolder folder = this.iPst.ReadFolder(290U);
                if (folder == null)
                {
                    throw new UnableToGetPSTHierarchyPermanentException(this.filePath);
                }
                using (PstFxFolder pstFxFolder = new PstFxFolder(this, folder))
                {
                    list.Add(FolderRec.Create(PstMailbox.PvaFromMoMTPva(pstFxFolder.GetProps(array))));
                    PropertyValue property = this.MessageStorePropertyBag.GetProperty(PropertyTag.IPMSubtreeFolder);
                    if (property.IsError || ((byte[])property.Value).Length != 24)
                    {
                        throw new UnableToGetPSTHierarchyPermanentException(this.filePath);
                    }
                    uint    nodeIdFromEntryId = PstMailbox.GetNodeIdFromEntryId(this.iPst.MessageStore.Guid, (byte[])property.Value, true);
                    IFolder folder2           = this.iPst.ReadFolder(nodeIdFromEntryId);
                    if (folder2 == null)
                    {
                        throw new UnableToGetPSTHierarchyPermanentException(this.filePath);
                    }
                    this.GetHierarchy(folder2, list, array);
                }
            }
            catch (PSTIOException innerException)
            {
                throw new UnableToGetPSTHierarchyTransientException(this.filePath, innerException);
            }
            catch (PSTExceptionBase innerException2)
            {
                throw new UnableToGetPSTHierarchyPermanentException(this.filePath, innerException2);
            }
            MrsTracer.Provider.Debug("PST hierarchy contains {0} folders including root", new object[]
            {
                list.Count
            });
            return(list);
        }
Example #5
0
        List <FolderRec> IMailbox.EnumerateFolderHierarchy(EnumerateFolderHierarchyFlags flags, PropTag[] additionalPtagsToLoad)
        {
            List <FolderRec> result = null;

            base.CreateContext("IMailbox.EnumerateFolderHierarchy", new DataContext[]
            {
                new PropTagsDataContext(additionalPtagsToLoad)
            }).Execute(delegate
            {
                result = this.WrappedObject.EnumerateFolderHierarchy(flags, additionalPtagsToLoad);
            }, true);
            return(result);
        }
Example #6
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);
        }
Example #7
0
        List <FolderRec> IMailbox.EnumerateFolderHierarchy(EnumerateFolderHierarchyFlags flags, PropTag[] additionalPtagsToLoad)
        {
            MrsTracer.Provider.Function("EasMailbox.EnumerateFolderHierarchy({0})", new object[]
            {
                flags
            });
            this.RefreshFolderCache();
            List <FolderRec> list = new List <FolderRec>(this.EasFolderCache.Count + 2);

            foreach (Add add in this.EasFolderCache.Values)
            {
                list.Add(this.CreateGenericFolderRec(add));
            }
            list.Add(EasSyntheticFolder.RootFolder.FolderRec);
            list.Add(EasSyntheticFolder.IpmSubtreeFolder.FolderRec);
            return(list);
        }
Example #8
0
        List <FolderRec> IMailbox.EnumerateFolderHierarchy(EnumerateFolderHierarchyFlags flags, PropTag[] additionalPtagsToLoad)
        {
            MrsTracer.ProxyClient.Function("RemoteMailbox.EnumerateFolderHierarchy({0})", new object[]
            {
                flags
            });
            this.VerifyMailboxConnection();
            bool             flag;
            List <FolderRec> list = base.MrsProxy.IMailbox_EnumerateFolderHierarchyPaged2(base.Handle, flags, DataConverter <PropTagConverter, PropTag, int> .GetData(additionalPtagsToLoad), out flag);

            while (flag)
            {
                List <FolderRec> collection = base.MrsProxy.IMailbox_EnumerateFolderHierarchyNextBatch(base.Handle, out flag);
                list.AddRange(collection);
            }
            return(list);
        }
Example #9
0
 public List <FolderRecWrapper> LoadFolders <TFolderRec>(EnumerateFolderHierarchyFlags enumerateFolderHierarchyFlags, PropTag[] additionalPtags) where TFolderRec : FolderRecWrapper, new()
 {
     return(FolderRecWrapper.WrapList <TFolderRec>(this.Mailbox.EnumerateFolderHierarchy(enumerateFolderHierarchyFlags, additionalPtags)));
 }