Separation of change processors.
This commit is contained in:
@@ -41,12 +41,12 @@ namespace Wino.Core.Synchronizers
|
||||
private readonly ConfigurableHttpClient _gmailHttpClient;
|
||||
private readonly GmailService _gmailService;
|
||||
private readonly IAuthenticator _authenticator;
|
||||
private readonly IDefaultChangeProcessor _gmailChangeProcessor;
|
||||
private readonly IGmailChangeProcessor _gmailChangeProcessor;
|
||||
private readonly ILogger _logger = Log.ForContext<GmailSynchronizer>();
|
||||
|
||||
public GmailSynchronizer(MailAccount account,
|
||||
IAuthenticator authenticator,
|
||||
IDefaultChangeProcessor gmailChangeProcessor) : base(account)
|
||||
IGmailChangeProcessor gmailChangeProcessor) : base(account)
|
||||
{
|
||||
var messageHandler = new GmailClientMessageHandler(() => _authenticator.GetTokenAsync(Account));
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ namespace Wino.Core.Synchronizers
|
||||
|
||||
private readonly ILogger _logger = Log.ForContext<ImapSynchronizer>();
|
||||
private readonly ImapClientPool _clientPool;
|
||||
private readonly IDefaultChangeProcessor _imapChangeProcessor;
|
||||
private readonly IImapChangeProcessor _imapChangeProcessor;
|
||||
|
||||
// Minimum summary items to Fetch for mail synchronization from IMAP.
|
||||
private readonly MessageSummaryItems mailSynchronizationFlags =
|
||||
@@ -61,7 +61,7 @@ namespace Wino.Core.Synchronizers
|
||||
public override uint BatchModificationSize => 1000;
|
||||
public override uint InitialMessageDownloadCountPerFolder => 500;
|
||||
|
||||
public ImapSynchronizer(MailAccount account, IDefaultChangeProcessor imapChangeProcessor) : base(account)
|
||||
public ImapSynchronizer(MailAccount account, IImapChangeProcessor imapChangeProcessor) : base(account)
|
||||
{
|
||||
_clientPool = new ImapClientPool(Account.ServerInformation);
|
||||
|
||||
@@ -830,10 +830,9 @@ namespace Wino.Core.Synchronizers
|
||||
await _imapChangeProcessor.InsertFolderAsync(folder);
|
||||
}
|
||||
|
||||
// Update last synchronization identifier.
|
||||
// This will update last sync date for the folder.
|
||||
// Update last synchronization date for the folder..
|
||||
|
||||
await _imapChangeProcessor.UpdateFolderDeltaSynchronizationIdentifierAsync(folder.Id, string.Empty).ConfigureAwait(false);
|
||||
await _imapChangeProcessor.UpdateFolderLastSyncDateAsync(folder.Id).ConfigureAwait(false);
|
||||
|
||||
return downloadedMessageIds;
|
||||
}
|
||||
|
||||
@@ -93,7 +93,6 @@ namespace Wino.Core.Synchronizers
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
options.ProgressListener?.AccountProgressUpdated(Account.Id, 1);
|
||||
|
||||
await SynchronizeFoldersAsync(cancellationToken).ConfigureAwait(false);
|
||||
@@ -102,6 +101,9 @@ namespace Wino.Core.Synchronizers
|
||||
{
|
||||
var synchronizationFolders = await _outlookChangeProcessor.GetSynchronizationFoldersAsync(options).ConfigureAwait(false);
|
||||
|
||||
_logger.Information("Found {Count} folders to synchronize.", synchronizationFolders.Count);
|
||||
_logger.Information(string.Format("Folders: {0}", string.Join(",", synchronizationFolders.Select(a => a.FolderName))));
|
||||
|
||||
for (int i = 0; i < synchronizationFolders.Count; i++)
|
||||
{
|
||||
var folder = synchronizationFolders[i];
|
||||
@@ -149,6 +151,8 @@ namespace Wino.Core.Synchronizers
|
||||
|
||||
if (isInitialSync)
|
||||
{
|
||||
_logger.Debug("No sync identifier for Folder {FolderName}. Performing initial sync.", folder.FolderName);
|
||||
|
||||
// No delta link. Performing initial sync.
|
||||
|
||||
messageCollectionPage = await _graphClient.Me.MailFolders[folder.RemoteFolderId].Messages.Delta.GetAsDeltaGetResponseAsync((config) =>
|
||||
@@ -162,6 +166,9 @@ namespace Wino.Core.Synchronizers
|
||||
{
|
||||
var currentDeltaToken = folder.DeltaToken;
|
||||
|
||||
_logger.Debug("Sync identifier found for Folder {FolderName}. Performing delta sync.", folder.FolderName);
|
||||
_logger.Debug("Current delta token: {CurrentDeltaToken}", currentDeltaToken);
|
||||
|
||||
var requestInformation = _graphClient.Me.MailFolders[folder.RemoteFolderId].Messages.Delta.ToGetRequestInformation((config) =>
|
||||
{
|
||||
config.QueryParameters.Top = (int)InitialMessageDownloadCountPerFolder;
|
||||
@@ -186,6 +193,14 @@ namespace Wino.Core.Synchronizers
|
||||
|
||||
latestDeltaLink = messageIteratorAsync.Deltalink;
|
||||
|
||||
if (downloadedMessageIds.Any())
|
||||
{
|
||||
_logger.Debug("Downloaded {Count} messages for folder {FolderName}", downloadedMessageIds.Count, folder.FolderName);
|
||||
}
|
||||
|
||||
_logger.Debug("Iterator completed for folder {FolderName}", folder.FolderName);
|
||||
_logger.Debug("Extracted latest delta link is {LatestDeltaLink}", latestDeltaLink);
|
||||
|
||||
//Store delta link for tracking new changes.
|
||||
if (!string.IsNullOrEmpty(latestDeltaLink))
|
||||
{
|
||||
@@ -196,6 +211,8 @@ namespace Wino.Core.Synchronizers
|
||||
await _outlookChangeProcessor.UpdateFolderDeltaSynchronizationIdentifierAsync(folder.Id, deltaToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
await _outlookChangeProcessor.UpdateFolderLastSyncDateAsync(folder.Id).ConfigureAwait(false);
|
||||
|
||||
return downloadedMessageIds;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user