Delegating idle synchronizations to server to post-sync operations.
This commit is contained in:
@@ -18,6 +18,7 @@ using Wino.Core.Integration.Json;
|
|||||||
using Wino.Messaging;
|
using Wino.Messaging;
|
||||||
using Wino.Messaging.Client.Connection;
|
using Wino.Messaging.Client.Connection;
|
||||||
using Wino.Messaging.Enums;
|
using Wino.Messaging.Enums;
|
||||||
|
using Wino.Messaging.Server;
|
||||||
using Wino.Messaging.UI;
|
using Wino.Messaging.UI;
|
||||||
|
|
||||||
namespace Wino.Core.UWP.Services
|
namespace Wino.Core.UWP.Services
|
||||||
@@ -256,6 +257,9 @@ namespace Wino.Core.UWP.Services
|
|||||||
case nameof(CopyAuthURLRequested):
|
case nameof(CopyAuthURLRequested):
|
||||||
WeakReferenceMessenger.Default.Send(JsonSerializer.Deserialize<CopyAuthURLRequested>(messageJson));
|
WeakReferenceMessenger.Default.Send(JsonSerializer.Deserialize<CopyAuthURLRequested>(messageJson));
|
||||||
break;
|
break;
|
||||||
|
case nameof(NewMailSynchronizationRequested):
|
||||||
|
WeakReferenceMessenger.Default.Send(JsonSerializer.Deserialize<NewMailSynchronizationRequested>(messageJson));
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
throw new Exception("Invalid data type name passed to client.");
|
throw new Exception("Invalid data type name passed to client.");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ namespace Wino.Core.Synchronizers.ImapSync
|
|||||||
return downloadedMessageIds;
|
return downloadedMessageIds;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override async Task<IList<UniqueId>> GetChangedUidsAsync(IImapClient client, MailItemFolder localFolder, IMailFolder remoteFolder, IImapSynchronizer synchronizer, CancellationToken cancellationToken = default)
|
internal override Task<IList<UniqueId>> GetChangedUidsAsync(IImapClient client, MailItemFolder localFolder, IMailFolder remoteFolder, IImapSynchronizer synchronizer, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ using Wino.Core.Integration.Processors;
|
|||||||
using Wino.Core.Requests.Bundles;
|
using Wino.Core.Requests.Bundles;
|
||||||
using Wino.Core.Requests.Folder;
|
using Wino.Core.Requests.Folder;
|
||||||
using Wino.Core.Requests.Mail;
|
using Wino.Core.Requests.Mail;
|
||||||
|
using Wino.Messaging.Server;
|
||||||
using Wino.Messaging.UI;
|
using Wino.Messaging.UI;
|
||||||
using Wino.Services.Extensions;
|
using Wino.Services.Extensions;
|
||||||
|
|
||||||
@@ -716,6 +717,8 @@ namespace Wino.Core.Synchronizers.Mail
|
|||||||
inboxFolder.MessageExpunged += IdleNotificationTriggered;
|
inboxFolder.MessageExpunged += IdleNotificationTriggered;
|
||||||
inboxFolder.MessagesVanished += IdleNotificationTriggered;
|
inboxFolder.MessagesVanished += IdleNotificationTriggered;
|
||||||
|
|
||||||
|
Log.Debug("Starting an idle client for {Name}", Account.Name);
|
||||||
|
|
||||||
await client.IdleAsync(idleDoneTokenSource.Token, idleCancellationTokenSource.Token);
|
await client.IdleAsync(idleDoneTokenSource.Token, idleCancellationTokenSource.Token);
|
||||||
}
|
}
|
||||||
catch (ImapProtocolException protocolException)
|
catch (ImapProtocolException protocolException)
|
||||||
@@ -788,7 +791,7 @@ namespace Wino.Core.Synchronizers.Mail
|
|||||||
Type = MailSynchronizationType.IMAPIdle
|
Type = MailSynchronizationType.IMAPIdle
|
||||||
};
|
};
|
||||||
|
|
||||||
_ = SynchronizeMailsAsync(options);
|
WeakReferenceMessenger.Default.Send(new NewMailSynchronizationRequested(options, SynchronizationSource.Client));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void IdleNotificationTriggered(object sender, EventArgs e)
|
private void IdleNotificationTriggered(object sender, EventArgs e)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ namespace Wino.Messaging.Server
|
|||||||
/// Triggers a new mail synchronization if possible.
|
/// Triggers a new mail synchronization if possible.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="Options">Options for synchronization.</param>
|
/// <param name="Options">Options for synchronization.</param>
|
||||||
public record NewMailSynchronizationRequested(MailSynchronizationOptions Options, SynchronizationSource Source) : IClientMessage;
|
public record NewMailSynchronizationRequested(MailSynchronizationOptions Options, SynchronizationSource Source) : IClientMessage, IUIMessage;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Triggers a new calendar synchronization if possible.
|
/// Triggers a new calendar synchronization if possible.
|
||||||
|
|||||||
@@ -43,7 +43,8 @@ namespace Wino.Server
|
|||||||
IRecipient<ServerTerminationModeChanged>,
|
IRecipient<ServerTerminationModeChanged>,
|
||||||
IRecipient<AccountSynchronizationProgressUpdatedMessage>,
|
IRecipient<AccountSynchronizationProgressUpdatedMessage>,
|
||||||
IRecipient<AccountFolderConfigurationUpdated>,
|
IRecipient<AccountFolderConfigurationUpdated>,
|
||||||
IRecipient<CopyAuthURLRequested>
|
IRecipient<CopyAuthURLRequested>,
|
||||||
|
IRecipient<NewMailSynchronizationRequested>
|
||||||
{
|
{
|
||||||
private readonly System.Timers.Timer _timer;
|
private readonly System.Timers.Timer _timer;
|
||||||
private static object connectionLock = new object();
|
private static object connectionLock = new object();
|
||||||
@@ -141,6 +142,7 @@ namespace Wino.Server
|
|||||||
public async void Receive(AccountFolderConfigurationUpdated message) => await SendMessageAsync(MessageType.UIMessage, message);
|
public async void Receive(AccountFolderConfigurationUpdated message) => await SendMessageAsync(MessageType.UIMessage, message);
|
||||||
|
|
||||||
public async void Receive(CopyAuthURLRequested message) => await SendMessageAsync(MessageType.UIMessage, message);
|
public async void Receive(CopyAuthURLRequested message) => await SendMessageAsync(MessageType.UIMessage, message);
|
||||||
|
public async void Receive(NewMailSynchronizationRequested message) => await SendMessageAsync(MessageType.UIMessage, message);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user