diff --git a/Wino.Core.UWP/Services/WinoServerConnectionManager.cs b/Wino.Core.UWP/Services/WinoServerConnectionManager.cs index 80d279d7..de99bc54 100644 --- a/Wino.Core.UWP/Services/WinoServerConnectionManager.cs +++ b/Wino.Core.UWP/Services/WinoServerConnectionManager.cs @@ -18,6 +18,7 @@ using Wino.Core.Integration.Json; using Wino.Messaging; using Wino.Messaging.Client.Connection; using Wino.Messaging.Enums; +using Wino.Messaging.Server; using Wino.Messaging.UI; namespace Wino.Core.UWP.Services @@ -256,6 +257,9 @@ namespace Wino.Core.UWP.Services case nameof(CopyAuthURLRequested): WeakReferenceMessenger.Default.Send(JsonSerializer.Deserialize(messageJson)); break; + case nameof(NewMailSynchronizationRequested): + WeakReferenceMessenger.Default.Send(JsonSerializer.Deserialize(messageJson)); + break; default: throw new Exception("Invalid data type name passed to client."); } diff --git a/Wino.Core/Synchronizers/ImapSync/UidBasedSynchronizer.cs b/Wino.Core/Synchronizers/ImapSync/UidBasedSynchronizer.cs index ebb33608..1367ad22 100644 --- a/Wino.Core/Synchronizers/ImapSync/UidBasedSynchronizer.cs +++ b/Wino.Core/Synchronizers/ImapSync/UidBasedSynchronizer.cs @@ -71,7 +71,7 @@ namespace Wino.Core.Synchronizers.ImapSync return downloadedMessageIds; } - internal override async Task> GetChangedUidsAsync(IImapClient client, MailItemFolder localFolder, IMailFolder remoteFolder, IImapSynchronizer synchronizer, CancellationToken cancellationToken = default) + internal override Task> GetChangedUidsAsync(IImapClient client, MailItemFolder localFolder, IMailFolder remoteFolder, IImapSynchronizer synchronizer, CancellationToken cancellationToken = default) { throw new NotImplementedException(); } diff --git a/Wino.Core/Synchronizers/ImapSynchronizer.cs b/Wino.Core/Synchronizers/ImapSynchronizer.cs index a86c5e27..ebac3007 100644 --- a/Wino.Core/Synchronizers/ImapSynchronizer.cs +++ b/Wino.Core/Synchronizers/ImapSynchronizer.cs @@ -25,6 +25,7 @@ using Wino.Core.Integration.Processors; using Wino.Core.Requests.Bundles; using Wino.Core.Requests.Folder; using Wino.Core.Requests.Mail; +using Wino.Messaging.Server; using Wino.Messaging.UI; using Wino.Services.Extensions; @@ -716,6 +717,8 @@ namespace Wino.Core.Synchronizers.Mail inboxFolder.MessageExpunged += IdleNotificationTriggered; inboxFolder.MessagesVanished += IdleNotificationTriggered; + Log.Debug("Starting an idle client for {Name}", Account.Name); + await client.IdleAsync(idleDoneTokenSource.Token, idleCancellationTokenSource.Token); } catch (ImapProtocolException protocolException) @@ -788,7 +791,7 @@ namespace Wino.Core.Synchronizers.Mail Type = MailSynchronizationType.IMAPIdle }; - _ = SynchronizeMailsAsync(options); + WeakReferenceMessenger.Default.Send(new NewMailSynchronizationRequested(options, SynchronizationSource.Client)); } private void IdleNotificationTriggered(object sender, EventArgs e) diff --git a/Wino.Messages/Server/NewSynchronizationRequested.cs b/Wino.Messages/Server/NewSynchronizationRequested.cs index 64261cd5..c8ed646c 100644 --- a/Wino.Messages/Server/NewSynchronizationRequested.cs +++ b/Wino.Messages/Server/NewSynchronizationRequested.cs @@ -8,7 +8,7 @@ namespace Wino.Messaging.Server /// Triggers a new mail synchronization if possible. /// /// Options for synchronization. - public record NewMailSynchronizationRequested(MailSynchronizationOptions Options, SynchronizationSource Source) : IClientMessage; + public record NewMailSynchronizationRequested(MailSynchronizationOptions Options, SynchronizationSource Source) : IClientMessage, IUIMessage; /// /// Triggers a new calendar synchronization if possible. diff --git a/Wino.Server/ServerContext.cs b/Wino.Server/ServerContext.cs index 67f2520b..bda98a32 100644 --- a/Wino.Server/ServerContext.cs +++ b/Wino.Server/ServerContext.cs @@ -43,7 +43,8 @@ namespace Wino.Server IRecipient, IRecipient, IRecipient, - IRecipient + IRecipient, + IRecipient { private readonly System.Timers.Timer _timer; 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(CopyAuthURLRequested message) => await SendMessageAsync(MessageType.UIMessage, message); + public async void Receive(NewMailSynchronizationRequested message) => await SendMessageAsync(MessageType.UIMessage, message); #endregion