using System.Collections.Generic; using Wino.Core.Domain.Entities; using Wino.Core.Domain.Enums; namespace Wino.Core.Domain.Interfaces { /// /// Represents a group of requests. /// public interface IRequestBundle { string BundleId { get; set; } IRequestBase Request { get; } } /// /// Represents a group of requests with their native response types. /// /// Native request type from each synchronizer to store. public interface IRequestBundle : IRequestBundle { TRequest NativeRequest { get; } } public interface IRequestBase : IClientMessage { /// /// Synchronizer option to perform. /// MailSynchronizerOperation Operation { get; } /// /// UI changes to apply to the item before sending the request to the server. /// Changes here only affect the UI, not the item itself. /// Changes here are reverted if the request fails by calling . /// void ApplyUIChanges(); /// /// Reverts the UI changes applied by if the request fails. /// void RevertUIChanges(); /// /// Whether synchronizations should be delayed after executing this request. /// Specially Outlook sometimes don't report changes back immidiately after sending the API request. /// This results following synchronization to miss the changes. /// We add small delay for the following synchronization after executing current requests to overcome this issue. /// Default is false. /// int ResynchronizationDelay { get; } } public interface IRequest : IRequestBase { MailCopy Item { get; } IBatchChangeRequest CreateBatch(IEnumerable requests); } public interface IFolderRequest : IRequestBase { MailItemFolder Folder { get; } } public interface IBatchChangeRequest : IRequestBase { IEnumerable Items { get; } } }