private void EnumerateIncrementalChanges(FolderChangesManifest changes, IReadOnlyCollection <MessageRec> messageRecs) { if (messageRecs.Count == 0) { return; } foreach (MessageRec messageRec in messageRecs) { switch (EasSourceFolder.FindMessageCategory(messageRec)) { case EasMessageCategory.AddOrUpdate: case EasMessageCategory.Delete: changes.ChangedMessages.Add(messageRec); break; case EasMessageCategory.ChangeToRead: changes.ReadMessages.Add(messageRec.EntryId); break; case EasMessageCategory.ChangeToUnread: changes.UnreadMessages.Add(messageRec.EntryId); break; } } }
ISourceFolder ISourceMailbox.GetFolder(byte[] entryId) { MrsTracer.Provider.Function("EasSourceMailbox.GetFolder({0})", new object[] { TraceUtils.DumpEntryId(entryId) }); Add add; EasFolderBase easFolderBase; if (base.EasFolderCache.TryGetValue(entryId, out add)) { easFolderBase = new EasSourceFolder(add, base.EasConnectionWrapper.UserSmtpAddress); } else if (EasMailbox.GetStringId(entryId) == EasSyntheticFolder.RootFolder.ServerId) { easFolderBase = EasSyntheticFolder.RootFolder; } else { if (!(EasMailbox.GetStringId(entryId) == EasSyntheticFolder.IpmSubtreeFolder.ServerId)) { MrsTracer.Provider.Debug("Folder with folderId '{0}' does not exist.", new object[] { entryId }); return(null); } easFolderBase = EasSyntheticFolder.IpmSubtreeFolder; } return((ISourceFolder)easFolderBase.Configure(this)); }
List <MessageRec> ISourceFolder.EnumerateMessagesPaged(int maxPageSize) { SyncContentsManifestState syncContentsManifestState = base.Mailbox.SyncState[base.EntryId]; EasFolderSyncState persistedSyncState = base.Mailbox.GetPersistedSyncState(syncContentsManifestState); if (string.IsNullOrEmpty(this.nextEnumerateKey)) { this.nextEnumerateKey = persistedSyncState.CrawlerSyncKey; } else { persistedSyncState.CrawlerSyncKey = this.nextEnumerateKey; persistedSyncState.CrawlerDeletions.AddRange(this.pendingDeletes); syncContentsManifestState.Data = persistedSyncState.Serialize(); } EasSyncOptions options = new EasSyncOptions { SyncKey = this.nextEnumerateKey, RecentOnly = false, MaxNumberOfMessage = maxPageSize }; EasSyncResult easSyncResult = base.SyncMessages(base.Mailbox.CrawlerConnectionWrapper, options); if (this.estimatedItemCount == 0) { options.SyncKey = easSyncResult.SyncKeyRequested; this.estimatedItemCount = base.GetItemEstimate(base.Mailbox.CrawlerConnectionWrapper, options); } if (easSyncResult.MessageRecs.Count == 0) { return(null); } this.nextEnumerateKey = easSyncResult.NewSyncKey; List <MessageRec> list = new List <MessageRec>(easSyncResult.MessageRecs.Count); foreach (MessageRec messageRec in easSyncResult.MessageRecs) { if (persistedSyncState.ChangesSynced == null || !(messageRec.CreationTimestamp < persistedSyncState.ChangesSynced.Value) || !(messageRec.CreationTimestamp > persistedSyncState.ChangesSynced.Value - EasRequestGenerator.RecentSyncTimeSpan)) { if (EasSourceFolder.FindMessageCategory(messageRec) == EasMessageCategory.Delete) { this.pendingDeletes.Add(EasMailbox.GetStringId(messageRec.EntryId)); } else { list.Add(messageRec); } } } return(list); }