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; } } } }
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; }
private void PatchRulesForDownlevelSources(RuleData[] rules, FolderMap sourceFolderMap) { RuleData.ConvertRulesToUplevel(rules, (byte[] entryID) => sourceFolderMap[entryID] != null); }
public PublicFolderMoveSyncContext(ISourceMailbox sourceMailbox, FolderMap sourceFolderMap, IDestinationMailbox destinationMailbox, FolderMap targetFolderMap) : base(sourceFolderMap, targetFolderMap) { this.sourceMailbox = sourceMailbox; this.destinationMailbox = destinationMailbox; }
public SyncContext(FolderMap sourceFolderMap, FolderMap targetFolderMap) { this.sourceFolderMap = sourceFolderMap; this.targetFolderMap = targetFolderMap; this.CopyMessagesCount = default(CopyMessagesCount); }