Generic 404 handler for synchronizers.

This commit is contained in:
Burak Kaan Köse
2026-02-08 22:20:38 +01:00
parent 1747ed84a8
commit e559a79506
15 changed files with 258 additions and 35 deletions
@@ -1,4 +1,5 @@
using Wino.Core.Domain.Interfaces;
using Wino.Core.Synchronizers.Errors;
using Wino.Core.Synchronizers.Errors.Gmail;
namespace Wino.Core.Services;
@@ -12,11 +13,13 @@ public class GmailSynchronizerErrorHandlingFactory : SynchronizerErrorHandlingFa
public GmailSynchronizerErrorHandlingFactory(
GmailQuotaExceededHandler quotaExceededHandler,
GmailRateLimitHandler rateLimitHandler,
GmailHistoryExpiredHandler historyExpiredHandler)
GmailHistoryExpiredHandler historyExpiredHandler,
EntityNotFoundHandler entityNotFoundHandler)
{
// Order matters - more specific handlers should be registered first
RegisterHandler(quotaExceededHandler);
RegisterHandler(historyExpiredHandler);
RegisterHandler(entityNotFoundHandler);
RegisterHandler(rateLimitHandler); // Most generic rate limit handler last
}
}
@@ -1,4 +1,5 @@
using Wino.Core.Domain.Interfaces;
using Wino.Core.Synchronizers.Errors;
using Wino.Core.Synchronizers.Errors.Imap;
namespace Wino.Core.Services;
@@ -12,11 +13,13 @@ public class ImapSynchronizerErrorHandlingFactory : SynchronizerErrorHandlingFac
public ImapSynchronizerErrorHandlingFactory(
ImapConnectionLostHandler connectionLostHandler,
ImapAuthenticationFailedHandler authFailedHandler,
EntityNotFoundHandler entityNotFoundHandler,
ImapFolderNotFoundHandler folderNotFoundHandler,
ImapProtocolErrorHandler protocolErrorHandler)
{
// Order matters - more specific handlers should be registered first
RegisterHandler(authFailedHandler);
RegisterHandler(entityNotFoundHandler);
RegisterHandler(folderNotFoundHandler);
RegisterHandler(connectionLostHandler);
RegisterHandler(protocolErrorHandler); // Most generic, registered last
@@ -1,6 +1,5 @@
using System.Threading.Tasks;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models.Synchronization;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Synchronizers.Errors;
using Wino.Core.Synchronizers.Errors.Outlook;
namespace Wino.Core.Services;
@@ -8,13 +7,11 @@ namespace Wino.Core.Services;
public class OutlookSynchronizerErrorHandlingFactory : SynchronizerErrorHandlingFactory, IOutlookSynchronizerErrorHandlerFactory
{
public OutlookSynchronizerErrorHandlingFactory(ObjectCannotBeDeletedHandler objectCannotBeDeleted,
EntityNotFoundHandler entityNotFoundHandler,
DeltaTokenExpiredHandler deltaTokenExpiredHandler)
{
RegisterHandler(objectCannotBeDeleted);
RegisterHandler(entityNotFoundHandler);
RegisterHandler(deltaTokenExpiredHandler);
}
public bool CanHandle(SynchronizerErrorContext error) => CanHandle(error);
public Task HandleAsync(SynchronizerErrorContext error) => HandleErrorAsync(error);
}
@@ -405,6 +405,11 @@ public class SynchronizationManager : ISynchronizationManager
await synchronizer.DownloadMissingMimeMessageAsync(mailItem, null, cancellationToken);
return mailItem.Id.ToString(); // Return some identifier, actual implementation might be different
}
catch (SynchronizerEntityNotFoundException)
{
_logger.Warning("MIME message for mail item {MailItemId} no longer exists on server. Removed locally.", mailItem.Id);
return null;
}
catch (Exception ex)
{
_logger.Error(ex, "Failed to download MIME message for mail item {MailItemId}", mailItem.Id);