More abstractions

This commit is contained in:
Burak Kaan Köse
2024-11-27 03:01:14 +01:00
parent 1ce7bb8c02
commit 54eb4f78b2
8 changed files with 58 additions and 52 deletions

View File

@@ -0,0 +1,7 @@
namespace Wino.Core.Domain.Interfaces
{
public interface IBaseCalendarSynchronizer : IBaseSynchronizer
{
}
}

View File

@@ -0,0 +1,30 @@
using System.Threading;
using System.Threading.Tasks;
using MailKit;
using Wino.Core.Domain.Models.MailItem;
using Wino.Core.Domain.Models.Synchronization;
namespace Wino.Core.Domain.Interfaces
{
public interface IBaseMailSynchronizer : IBaseSynchronizer
{
/// <summary>
/// Performs a full synchronization with the server with given options.
/// This will also prepares batch requests for execution.
/// Requests are executed in the order they are queued and happens before the synchronization.
/// Result of the execution queue is processed during the synchronization.
/// </summary>
/// <param name="options">Options for synchronization.</param>
/// <param name="cancellationToken">Cancellation token.</param>
/// <returns>Result summary of synchronization.</returns>
Task<SynchronizationResult> SynchronizeAsync(SynchronizationOptions options, CancellationToken cancellationToken = default);
/// <summary>
/// Downloads a single MIME message from the server and saves it to disk.
/// </summary>
/// <param name="mailItem">Mail item to download from server.</param>
/// <param name="transferProgress">Optional progress reporting for download operation.</param>
/// <param name="cancellationToken">Cancellation token.</param>
Task DownloadMissingMimeMessageAsync(IMailItem mailItem, ITransferProgress transferProgress, CancellationToken cancellationToken = default);
}
}

View File

@@ -1,15 +1,11 @@
using System.Threading;
using System.Threading.Tasks;
using MailKit;
using System.Threading.Tasks;
using Wino.Core.Domain.Entities.Shared;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Models.Accounts;
using Wino.Core.Domain.Models.MailItem;
using Wino.Core.Domain.Models.Synchronization;
namespace Wino.Core.Domain.Interfaces
{
public interface IBaseMailSynchronizer
public interface IBaseSynchronizer
{
/// <summary>
/// Account that is assigned for this synchronizer.
@@ -33,30 +29,11 @@ namespace Wino.Core.Domain.Interfaces
/// <returns>Whether active synchronization is stopped or not.</returns>
bool CancelActiveSynchronization();
/// <summary>
/// Performs a full synchronization with the server with given options.
/// This will also prepares batch requests for execution.
/// Requests are executed in the order they are queued and happens before the synchronization.
/// Result of the execution queue is processed during the synchronization.
/// </summary>
/// <param name="options">Options for synchronization.</param>
/// <param name="cancellationToken">Cancellation token.</param>
/// <returns>Result summary of synchronization.</returns>
Task<SynchronizationResult> SynchronizeAsync(SynchronizationOptions options, CancellationToken cancellationToken = default);
/// <summary>
/// Synchronizes profile information with the server.
/// Sender name and Profile picture are updated.
/// </summary>
/// <returns>Profile information model that holds the values.</returns>
Task<ProfileInformation> GetProfileInformationAsync();
/// <summary>
/// Downloads a single MIME message from the server and saves it to disk.
/// </summary>
/// <param name="mailItem">Mail item to download from server.</param>
/// <param name="transferProgress">Optional progress reporting for download operation.</param>
/// <param name="cancellationToken">Cancellation token.</param>
Task DownloadMissingMimeMessageAsync(IMailItem mailItem, ITransferProgress transferProgress, CancellationToken cancellationToken = default);
}
}

View File

@@ -1,9 +0,0 @@
using System.Threading.Tasks;
namespace Wino.Core.Integration
{
public abstract class BaseCalendarIntegrator<TNativeRequestType, TCalendarEventType>
{
public abstract Task<TCalendarEventType> CreateCalendarEventAsync(TNativeRequestType request);
}
}

View File

@@ -0,0 +1,12 @@
using Wino.Core.Domain.Entities.Shared;
using Wino.Core.Domain.Interfaces;
namespace Wino.Core.Synchronizers
{
public abstract class BaseCalendarSynchronizer<TBaseRequest, TMessageType> : BaseSynchronizer<TBaseRequest>, IBaseCalendarSynchronizer
{
protected BaseCalendarSynchronizer(MailAccount account) : base(account)
{
}
}
}

View File

@@ -13,7 +13,7 @@ using Wino.Messaging.UI;
namespace Wino.Core.Synchronizers
{
public abstract class BaseSynchronizer<TBaseRequest>
public abstract class BaseSynchronizer<TBaseRequest> : IBaseSynchronizer
{
protected SemaphoreSlim synchronizationSemaphore = new(1);
protected CancellationToken activeSynchronizationCancellationToken;
@@ -38,7 +38,6 @@ namespace Wino.Core.Synchronizers
Account = account;
}
/// <summary>
/// Queues a single request to be executed in the next synchronization.
/// </summary>

View File

@@ -1,9 +0,0 @@
using Wino.Core.Integration;
namespace Wino.Core.Synchronizers.Calendar
{
public abstract class BaseCalendarSynchronizer<TNativeRequestType, TCalendarEventType> : BaseCalendarIntegrator<TNativeRequestType, TCalendarEventType>
{
}
}

View File

@@ -1,21 +1,20 @@
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Graph.Models;
using Microsoft.Kiota.Abstractions;
using Wino.Core.Domain.Entities.Shared;
using Wino.Core.Domain.Interfaces;
namespace Wino.Core.Synchronizers.Calendar
{
public class OutlookCalendarSynchronizer : BaseCalendarSynchronizer<RequestInformation, Event>
public class OutlookCalendarSynchronizer : BaseSynchronizer<RequestInformation>
{
public OutlookCalendarSynchronizer(MailAccount account)
public OutlookCalendarSynchronizer(MailAccount account) : base(account)
{
Account = account;
}
public MailAccount Account { get; }
public override Task<Event> CreateCalendarEventAsync(RequestInformation request)
public override Task ExecuteNativeRequestsAsync(List<IRequestBundle<RequestInformation>> batchedRequests, CancellationToken cancellationToken = default)
{
throw new NotImplementedException();
}