コード例 #1
0
        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;
                }
            }
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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);
        }