Delegating idle synchronizations to server to post-sync operations.

This commit is contained in:
Burak Kaan Köse
2025-01-28 23:57:09 +01:00
parent b73eb3efcb
commit 7d8da33f42
5 changed files with 13 additions and 4 deletions

View File

@@ -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.");
} }

View File

@@ -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();
} }

View File

@@ -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)

View File

@@ -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.

View File

@@ -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