예제 #1
0
        protected virtual IEnumerable <FolderRecWrapper> GetFolderList(EnumHierarchyFlags flags, FolderRecWrapper folderRec)
        {
            Stack <FolderRecWrapper> stack = new Stack <FolderRecWrapper>();

            stack.Push(folderRec);
            while (stack.Count > 0)
            {
                FolderRecWrapper currentFolderRec = stack.Pop();
                if (!currentFolderRec.IsSpoolerQueue)
                {
                    if (FolderMap.IsValidFolderType(flags, currentFolderRec))
                    {
                        yield return(currentFolderRec);
                    }
                    if (currentFolderRec.Children != null)
                    {
                        foreach (FolderRecWrapper item in currentFolderRec.Children)
                        {
                            stack.Push(item);
                        }
                    }
                }
            }
            yield break;
        }
예제 #2
0
 public IEnumerator <FolderRecWrapper> GetFolderHierarchyEnumerator(EnumHierarchyFlags flags)
 {
     if (this.subtreeEnumerator == null)
     {
         this.subtreeEnumerator = this.GetFolderList(flags, this.RootRec).GetEnumerator();
     }
     return(this.subtreeEnumerator);
 }
예제 #3
0
 protected override IEnumerable <FolderRecWrapper> GetFolderList(EnumHierarchyFlags flags, FolderRecWrapper folderRec)
 {
     foreach (KeyValuePair <byte[], FolderRecWrapper> kvp in this.folders)
     {
         KeyValuePair <byte[], FolderRecWrapper> keyValuePair = kvp;
         yield return(keyValuePair.Value);
     }
     yield break;
 }
예제 #4
0
 public override void EnumerateSubtree(EnumHierarchyFlags flags, FolderRecWrapper root, FolderMap.EnumFolderCallback callback)
 {
     FolderMap.EnumFolderContext enumFolderContext = new FolderMap.EnumFolderContext();
     enumFolderContext.Result = EnumHierarchyResult.Continue;
     foreach (KeyValuePair <byte[], FolderRecWrapper> keyValuePair in this.folders)
     {
         callback(keyValuePair.Value, enumFolderContext);
     }
 }
예제 #5
0
        protected static bool IsValidFolderType(EnumHierarchyFlags flags, FolderRecWrapper folderRec)
        {
            switch (folderRec.FolderType)
            {
            case FolderType.Root:
                return((flags & EnumHierarchyFlags.RootFolder) != EnumHierarchyFlags.None);

            case FolderType.Generic:
                return((flags & EnumHierarchyFlags.NormalFolders) != EnumHierarchyFlags.None);

            case FolderType.Search:
                return((flags & EnumHierarchyFlags.SearchFolders) != EnumHierarchyFlags.None);

            default:
                return(false);
            }
        }
예제 #6
0
 private void EnumSingleFolder(FolderRecWrapper folderRec, FolderMap.EnumFolderContext ctx, FolderMap.EnumFolderCallback callback, EnumHierarchyFlags flags)
 {
     ctx.Result = EnumHierarchyResult.Continue;
     if (folderRec.IsSpoolerQueue)
     {
         return;
     }
     if (FolderMap.IsValidFolderType(flags, folderRec))
     {
         callback(folderRec, ctx);
     }
     if (ctx.Result == EnumHierarchyResult.Cancel || ctx.Result == EnumHierarchyResult.SkipSubtree)
     {
         return;
     }
     if (folderRec.Children != null)
     {
         foreach (FolderRecWrapper folderRec2 in folderRec.Children)
         {
             ctx.Result = EnumHierarchyResult.Continue;
             this.EnumSingleFolder(folderRec2, ctx, callback, flags);
             if (ctx.Result == EnumHierarchyResult.Cancel)
             {
                 break;
             }
         }
     }
 }
예제 #7
0
 public virtual void EnumerateSubtree(EnumHierarchyFlags flags, FolderRecWrapper root, FolderMap.EnumFolderCallback callback)
 {
     FolderMap.EnumFolderContext ctx = new FolderMap.EnumFolderContext();
     this.EnumSingleFolder(root, ctx, callback, flags);
 }
예제 #8
0
 public void EnumerateFolderHierarchy(EnumHierarchyFlags flags, FolderMap.EnumFolderCallback callback)
 {
     this.EnumerateSubtree(flags, this.RootRec, callback);
 }