public void CreateMissingFolders() { IDestinationMailbox destMailbox = (IDestinationMailbox)this.MbxWrapper.Mailbox; base.EnumerateFolderHierarchy(EnumHierarchyFlags.AllFolders, delegate(FolderRecWrapper fRec, FolderMap.EnumFolderContext ctx) { if (fRec.EntryId != null) { return; } FolderMapping fm = (FolderMapping)fRec; fm.FolderRec.ParentId = fm.ParentId; ExecutionContext.Create(new DataContext[] { new FolderRecWrapperDataContext(fRec) }).Execute(delegate { byte[] array; destMailbox.CreateFolder(fRec.FolderRec, CreateFolderFlags.FailIfExists, out array); fm.FolderRec.EntryId = array; this[array] = fm; if (fm.SourceFolder != null) { List <PropValueData> list = new List <PropValueData>(); list.Add(new PropValueData(this.SourceEntryIDPtag, fm.SourceFolder.EntryId)); list.Add(new PropValueData(this.SourceLastModifiedTimestampPtag, fm.SourceFolder.FolderRec.LastModifyTimestamp)); if (fm.SourceFolder.WKFType != WellKnownFolderType.None) { list.Add(new PropValueData(this.SourceWKFTypePtag, (int)fm.SourceFolder.WKFType)); } using (IDestinationFolder folder = destMailbox.GetFolder(array)) { if (folder != null) { folder.SetProps(list.ToArray()); } else { MrsTracer.Service.Warning("Something just deleted newly created folder from under us. Ignoring.", new object[0]); } } if (fm.SourceFolder.WKFType != WellKnownFolderType.None && this.GetWellKnownFolder(fm.SourceFolder.WKFType) == null) { this.SetWellKnownFolder(fm.SourceFolder.WKFType, fm); if (this.RootFolder == this.RootRec && (this.MbxWrapper.Flags & MailboxWrapperFlags.Archive) == (MailboxWrapperFlags)0 && (this.MbxWrapper.Flags & MailboxWrapperFlags.PST) == (MailboxWrapperFlags)0) { this.WriteWellKnownFolderReference(fm.SourceFolder.WKFType, fm.EntryId); } } } }); }); }
private void WriteWellKnownFolderReferenceToFolder(WellKnownFolderType targetFolderType, WellKnownFolderType wkfType, PropTagFolderMapping ptfm, byte[] folderId) { FolderMapping wellKnownFolder = this.GetWellKnownFolder(targetFolderType); if (wellKnownFolder == null && targetFolderType == WellKnownFolderType.NonIpmSubtree) { wellKnownFolder = this.GetWellKnownFolder(WellKnownFolderType.Root); } if (wellKnownFolder == null) { MrsTracer.Service.Warning("There's no {0} in the target mailbox, not writing WKF reference for {1}", new object[] { targetFolderType, wkfType }); } IDestinationMailbox destinationMailbox = this.MbxWrapper.Mailbox as IDestinationMailbox; using (IDestinationFolder folder = destinationMailbox.GetFolder(wellKnownFolder.EntryId)) { if (folder == null) { MrsTracer.Service.Error("{0} disappeared??? Not writing WKF reference for {1}", new object[] { targetFolderType, wkfType }); } else { this.WriteEntryIdReference(ptfm, folderId, (PropTag[] pta) => folder.GetProps(pta), delegate(PropValueData[] pvda) { folder.SetProps(pvda); }); } } }