Exemplo n.º 1
0
        public void SetFolderFilter(string[] includeFolders, bool includeDumpster, string[] excludeFolders, string sourceRootFolder, bool isLivePublicFolderMailboxRestore, Guid sourceMailboxGuid)
        {
            if (this.folderFilterApplied)
            {
                throw new ArgumentException("SetFolderFilter was already called");
            }
            this.folderFilterApplied = true;
            if (includeFolders == null || includeFolders.Length == 0)
            {
                includeFolders = new string[]
                {
                    "/*"
                };
            }
            foreach (string folderPath in includeFolders)
            {
                this.MarkFolderByPath(sourceRootFolder, folderPath, true);
            }
            if (includeDumpster)
            {
                FolderMapping wellKnownFolder = this.GetWellKnownFolder(WellKnownFolderType.Dumpster);
                if (wellKnownFolder != null)
                {
                    wellKnownFolder.Flags = (FolderMappingFlags.Include | FolderMappingFlags.Inherit);
                }
            }
            if (excludeFolders != null)
            {
                foreach (string folderPath2 in excludeFolders)
                {
                    this.MarkFolderByPath(sourceRootFolder, folderPath2, false);
                }
            }
            base.EnumerateFolderHierarchy(EnumHierarchyFlags.AllFolders, delegate(FolderRecWrapper fRec, FolderMap.EnumFolderContext ctx)
            {
                FolderMapping folderMapping = (FolderMapping)fRec;
                WellKnownFolderType wkftype = folderMapping.WKFType;
                switch (wkftype)
                {
                case WellKnownFolderType.FreeBusy:
                case WellKnownFolderType.OfflineAddressBook:
                    break;

                default:
                    if (wkftype != WellKnownFolderType.System)
                    {
                        switch (wkftype)
                        {
                        case WellKnownFolderType.DumpsterAdminAuditLogs:
                        case WellKnownFolderType.DumpsterAudits:
                        case WellKnownFolderType.SpoolerQueue:
                        case WellKnownFolderType.TransportQueue:
                        case WellKnownFolderType.MRSSyncStates:
                            break;

                        case WellKnownFolderType.ConversationActionSettings:
                            return;

                        default:
                            return;
                        }
                    }
                    break;
                }
                folderMapping.Flags &= ~FolderMappingFlags.Include;
                folderMapping.Flags |= (FolderMappingFlags.Exclude | FolderMappingFlags.Inherit);
            });
            bool hasIncludedFolders = false;

            base.EnumerateFolderHierarchy(EnumHierarchyFlags.AllFolders, delegate(FolderRecWrapper fRec, FolderMap.EnumFolderContext ctx)
            {
                FolderMapping folderMapping = (FolderMapping)fRec;
                if (this.IsPublicFolderMailbox && folderMapping.IsPublicFolderDumpster && !includeDumpster)
                {
                    return;
                }
                folderMapping.ApplyInheritanceFlags();
                if (includeDumpster)
                {
                    this.MarkPublicFolderDumpster(fRec);
                }
                if ((folderMapping.Flags & FolderMappingFlags.Include) != FolderMappingFlags.None)
                {
                    hasIncludedFolders = true;
                }
            });
            if (isLivePublicFolderMailboxRestore)
            {
                this.CheckFolderRestorePossible(sourceMailboxGuid);
            }
            if (!hasIncludedFolders)
            {
                this.Warnings.Add(MrsStrings.NoFoldersIncluded);
            }
        }