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.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<CopyAuthURLRequested>(messageJson));
break;
case nameof(NewMailSynchronizationRequested):
WeakReferenceMessenger.Default.Send(JsonSerializer.Deserialize<NewMailSynchronizationRequested>(messageJson));
break;
default:
throw new Exception("Invalid data type name passed to client.");
}

View File

@@ -71,7 +71,7 @@ namespace Wino.Core.Synchronizers.ImapSync
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();
}

View File

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

View File

@@ -8,7 +8,7 @@ namespace Wino.Messaging.Server
/// Triggers a new mail synchronization if possible.
/// </summary>
/// <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>
/// Triggers a new calendar synchronization if possible.

View File

@@ -43,7 +43,8 @@ namespace Wino.Server
IRecipient<ServerTerminationModeChanged>,
IRecipient<AccountSynchronizationProgressUpdatedMessage>,
IRecipient<AccountFolderConfigurationUpdated>,
IRecipient<CopyAuthURLRequested>
IRecipient<CopyAuthURLRequested>,
IRecipient<NewMailSynchronizationRequested>
{
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