Handling of AI pack through mmicrosoft store.

This commit is contained in:
Burak Kaan Köse
2026-04-02 15:07:05 +02:00
parent 7b369201b0
commit 8f16f553f5
26 changed files with 765 additions and 578 deletions
+51 -1
View File
@@ -1622,6 +1622,16 @@ public class GmailSynchronizer : WinoSynchronizer<IClientServiceRequest, Message
// Try to handle the error with registered handlers
var handled = await _gmailSynchronizerErrorHandlerFactory.HandleErrorAsync(errorContext);
if (handled)
{
if (ShouldRevertOptimisticMailStateChange(bundle?.UIChangeRequest))
{
bundle?.UIChangeRequest?.RevertUIChanges();
}
return;
}
// If not handled by any specific handler, apply default error handling
if (!handled)
{
@@ -1649,6 +1659,12 @@ public class GmailSynchronizer : WinoSynchronizer<IClientServiceRequest, Message
}
}
private static bool ShouldRevertOptimisticMailStateChange(IUIChangeRequest request)
=> request is BatchMarkReadRequest
|| request is MarkReadRequest
|| request is BatchChangeFlagRequest
|| request is ChangeFlagRequest;
private bool ShouldUpdateSyncIdentifier(ulong? historyId)
{
if (historyId == null) return false;
@@ -1672,7 +1688,13 @@ public class GmailSynchronizer : WinoSynchronizer<IClientServiceRequest, Message
HttpResponseMessage httpResponseMessage,
CancellationToken cancellationToken = default)
{
await ProcessGmailRequestErrorAsync(error, bundle);
if (error != null)
{
await ProcessGmailRequestErrorAsync(error, bundle).ConfigureAwait(false);
return;
}
await PersistSuccessfulMailStateChangesAsync(bundle).ConfigureAwait(false);
if (bundle is HttpRequestBundle<IClientServiceRequest, Message> messageBundle)
{
@@ -1735,6 +1757,34 @@ public class GmailSynchronizer : WinoSynchronizer<IClientServiceRequest, Message
}
}
private async Task PersistSuccessfulMailStateChangesAsync(IRequestBundle<IClientServiceRequest> bundle)
{
switch (bundle.UIChangeRequest)
{
case BatchMarkReadRequest batchMarkReadRequest:
foreach (var request in batchMarkReadRequest)
{
await _gmailChangeProcessor.ChangeMailReadStatusAsync(request.Item.Id, request.IsRead).ConfigureAwait(false);
}
break;
case MarkReadRequest markReadRequest:
await _gmailChangeProcessor.ChangeMailReadStatusAsync(markReadRequest.Item.Id, markReadRequest.IsRead).ConfigureAwait(false);
break;
case BatchChangeFlagRequest batchChangeFlagRequest:
foreach (var request in batchChangeFlagRequest)
{
await _gmailChangeProcessor.ChangeFlagStatusAsync(request.Item.Id, request.IsFlagged).ConfigureAwait(false);
}
break;
case ChangeFlagRequest changeFlagRequest:
await _gmailChangeProcessor.ChangeFlagStatusAsync(changeFlagRequest.Item.Id, changeFlagRequest.IsFlagged).ConfigureAwait(false);
break;
}
}
/// <summary>
/// Gmail Archive is a special folder that is not visible in the Gmail web interface.
/// We need to handle it separately.
+1 -1
View File
@@ -145,7 +145,7 @@ public class ImapSynchronizer : WinoSynchronizer<ImapRequest, ImapMessageCreatio
var remoteFolder = await client.GetFolderAsync(folder.RemoteFolderId);
await remoteFolder.OpenAsync(FolderAccess.ReadWrite).ConfigureAwait(false);
await remoteFolder.StoreAsync(GetUniqueId(item.Item.Id), new StoreFlagsRequest(item.Item.IsFlagged ? StoreAction.Add : StoreAction.Remove, MessageFlags.Flagged) { Silent = true }).ConfigureAwait(false);
await remoteFolder.StoreAsync(GetUniqueId(item.Item.Id), new StoreFlagsRequest(item.IsFlagged ? StoreAction.Add : StoreAction.Remove, MessageFlags.Flagged) { Silent = true }).ConfigureAwait(false);
await remoteFolder.CloseAsync().ConfigureAwait(false);
}, requests);
}