FolderChangesManifest ISourceFolder.EnumerateChanges(EnumerateContentChangesFlags flags, int maxChanges) { FolderChangesManifest folderChangesManifest = new FolderChangesManifest(base.FolderId); folderChangesManifest.ChangedMessages = new List <MessageRec>(); folderChangesManifest.ReadMessages = new List <byte[]>(); folderChangesManifest.UnreadMessages = new List <byte[]>(); if (!base.Folder.IsSelectable) { return(folderChangesManifest); } SyncContentsManifestState syncContentsManifestState = base.Mailbox.SyncState[base.FolderId]; ImapFolderState imapFolderState; if (syncContentsManifestState.Data != null) { imapFolderState = ImapFolderState.Deserialize(syncContentsManifestState.Data); if (imapFolderState.UidValidity != base.Folder.UidValidity) { syncContentsManifestState.Data = ImapFolderState.CreateNew(base.Folder).Serialize(); this.nextSeqNumCrawl = null; folderChangesManifest.FolderRecoverySync = true; return(folderChangesManifest); } } else { imapFolderState = ImapFolderState.CreateNew(base.Folder); } List <MessageRec> messages = base.EnumerateMessages(FetchMessagesFlags.None, null, null); ImapFolderState imapFolderState2 = ImapFolderState.Create(messages, imapFolderState.SeqNumCrawl, base.Folder.UidNext, base.Folder.UidValidity); this.EnumerateIncrementalChanges(imapFolderState2, imapFolderState, folderChangesManifest, messages); syncContentsManifestState.Data = imapFolderState2.Serialize(); return(folderChangesManifest); }
List <MessageRec> ISourceFolder.EnumerateMessagesPaged(int maxPageSize) { if (!base.Folder.IsSelectable) { return(null); } SyncContentsManifestState syncContentsManifestState = base.Mailbox.SyncState[base.FolderId]; ImapFolderState imapFolderState = (syncContentsManifestState.Data != null) ? ImapFolderState.Deserialize(syncContentsManifestState.Data) : ImapFolderState.CreateNew(base.Folder); if (this.nextSeqNumCrawl == null) { this.nextSeqNumCrawl = new int?((imapFolderState.SeqNumCrawl == int.MaxValue) ? (base.Folder.NumberOfMessages ?? 0) : imapFolderState.SeqNumCrawl); } else { imapFolderState.SeqNumCrawl = this.nextSeqNumCrawl.Value; syncContentsManifestState.Data = imapFolderState.Serialize(); } if (this.nextSeqNumCrawl == 0) { return(null); } int num = Math.Max(1, (this.nextSeqNumCrawl - maxPageSize + 1).Value); List <MessageRec> result = base.EnumerateMessages(FetchMessagesFlags.IncludeExtendedData, new int?(this.nextSeqNumCrawl.Value), new int?(num)); this.nextSeqNumCrawl = new int?(Math.Max(0, num - 1)); return(result); }