Пример #1
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;
             }
         }
     }
 }
Пример #2
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;
        }
 protected override MailboxChangesManifest EnumerateSourceHierarchyChanges(MailboxCopierBase mbxCtx, bool catchup, SyncContext syncContext)
 {
     if (catchup)
     {
         if (!mbxCtx.IsRoot)
         {
             return(null);
         }
         return(base.EnumerateSourceHierarchyChanges(mbxCtx, catchup, syncContext));
     }
     else
     {
         if (mbxCtx.IsRoot)
         {
             return(base.EnumerateSourceHierarchyChanges(mbxCtx, catchup, syncContext));
         }
         FolderMap destinationFolderMap = base.GetRootMailboxContext().GetDestinationFolderMap(GetFolderMapFlags.None);
         EntryIdMap <FolderRecWrapper> primaryMailboxFolderRecWrappers = new EntryIdMap <FolderRecWrapper>();
         destinationFolderMap.EnumerateFolderHierarchy(EnumHierarchyFlags.NormalFolders | EnumHierarchyFlags.RootFolder, delegate(FolderRecWrapper primaryFolderRecWrapper, FolderMap.EnumFolderContext enumFolderContext)
         {
             if (mbxCtx.IsContentAvailableInTargetMailbox(primaryFolderRecWrapper))
             {
                 byte[] key = (byte[])primaryFolderRecWrapper.FolderRec[PropTag.LTID];
                 primaryMailboxFolderRecWrappers[key] = primaryFolderRecWrapper;
             }
         });
         EntryIdMap <FolderRecWrapper> secondaryMailboxFolderRecWrappers = new EntryIdMap <FolderRecWrapper>();
         syncContext.TargetFolderMap.EnumerateFolderHierarchy(EnumHierarchyFlags.NormalFolders | EnumHierarchyFlags.RootFolder, delegate(FolderRecWrapper secondaryFolderRecWrapper, FolderMap.EnumFolderContext enumFolderContext)
         {
             if (mbxCtx.IsContentAvailableInTargetMailbox(secondaryFolderRecWrapper))
             {
                 byte[] key = (byte[])secondaryFolderRecWrapper.FolderRec[PropTag.LTID];
                 secondaryMailboxFolderRecWrappers[key] = secondaryFolderRecWrapper;
             }
         });
         MailboxChangesManifest mailboxChangesManifest = new MailboxChangesManifest();
         mailboxChangesManifest.ChangedFolders = new List <byte[]>();
         mailboxChangesManifest.DeletedFolders = new List <byte[]>();
         foreach (KeyValuePair <byte[], FolderRecWrapper> keyValuePair in primaryMailboxFolderRecWrappers)
         {
             FolderRecWrapper folderRecWrapper;
             if (!secondaryMailboxFolderRecWrappers.TryGetValue(keyValuePair.Key, out folderRecWrapper) || folderRecWrapper.FolderRec.LastModifyTimestamp != keyValuePair.Value.FolderRec.LastModifyTimestamp)
             {
                 mailboxChangesManifest.ChangedFolders.Add(mbxCtx.SourceMailbox.GetSessionSpecificEntryId(keyValuePair.Key));
             }
         }
         foreach (KeyValuePair <byte[], FolderRecWrapper> keyValuePair2 in secondaryMailboxFolderRecWrappers)
         {
             FolderRecWrapper folderRecWrapper2;
             if (!primaryMailboxFolderRecWrappers.TryGetValue(keyValuePair2.Key, out folderRecWrapper2))
             {
                 mailboxChangesManifest.DeletedFolders.Add(mbxCtx.SourceMailbox.GetSessionSpecificEntryId(keyValuePair2.Key));
             }
         }
         return(mailboxChangesManifest);
     }
 }
		public override FolderRecWrapper GetTargetFolderBySourceId(byte[] sourceId)
		{
			FolderMap sourceFolderMap = base.SourceFolderMap;
			FolderMapping folderMapping = base.SourceFolderMap[sourceId] as FolderMapping;
			if (folderMapping != null && folderMapping.IsSystemPublicFolder)
			{
				FolderHierarchy folderHierarchy = base.TargetFolderMap as FolderHierarchy;
				return folderHierarchy.GetWellKnownFolder(folderMapping.WKFType);
			}
			return base.TargetFolderMap[this.destinationMailbox.GetSessionSpecificEntryId(sourceId)];
		}
		public PublicFolderMigrationSyncContext(ISourceMailbox sourceDatabase, FolderMap sourceFolderMap, IDestinationMailbox destinationMailbox, FolderMap targetFolderMap, bool isTargetPrimaryHierarchyMailbox) : base(sourceFolderMap, targetFolderMap)
		{
			this.sourceDatabase = sourceDatabase;
			this.destinationMailbox = destinationMailbox;
			this.isTargetPrimaryHierarchyMailbox = isTargetPrimaryHierarchyMailbox;
		}
Пример #6
0
 private void PatchRulesForDownlevelSources(RuleData[] rules, FolderMap sourceFolderMap)
 {
     RuleData.ConvertRulesToUplevel(rules, (byte[] entryID) => sourceFolderMap[entryID] != null);
 }
Пример #7
0
 public PublicFolderMoveSyncContext(ISourceMailbox sourceMailbox, FolderMap sourceFolderMap, IDestinationMailbox destinationMailbox, FolderMap targetFolderMap) : base(sourceFolderMap, targetFolderMap)
 {
     this.sourceMailbox      = sourceMailbox;
     this.destinationMailbox = destinationMailbox;
 }
Пример #8
0
 public SyncContext(FolderMap sourceFolderMap, FolderMap targetFolderMap)
 {
     this.sourceFolderMap   = sourceFolderMap;
     this.targetFolderMap   = targetFolderMap;
     this.CopyMessagesCount = default(CopyMessagesCount);
 }