From 3b8454269e29f8de0e5f013d9a90b516df6a3773 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Kaan=20K=C3=B6se?= Date: Tue, 16 Jul 2024 14:56:46 +0200 Subject: [PATCH] Separation of messages. Introducing Wino.Messages library. --- .../Interfaces/IBaseSynchronizer.cs | 54 +++++++++++++++++++ .../Requests => Interfaces}/IUIMessage.cs | 2 +- .../Interfaces/IWinoSynchronizerFactory.cs | 12 +++++ .../ToggleRequestRule.cs | 3 +- .../Models/Reader/WebViewMessage.cs | 16 ++++++ .../Models/Requests/WebViewMessage.cs | 9 ---- Wino.Core.Domain/Wino.Core.Domain.csproj | 3 +- .../AccountSynchronizerStateChanged.cs | 2 +- Wino.Core/Services/AccountService.cs | 2 +- Wino.Core/Services/BaseDatabaseService.cs | 2 +- Wino.Core/Services/FolderService.cs | 2 +- Wino.Core/Services/MailService.cs | 2 +- Wino.Core/Services/WinoRequestProcessor.cs | 1 - Wino.Core/Synchronizers/BaseSynchronizer.cs | 44 --------------- Wino.Core/Wino.Core.csproj | 5 +- Wino.Core/WinoSynchronizerFactory.cs | 8 --- .../AccountDetailsPageViewModel.cs | 2 +- .../AccountManagementViewModel.cs | 2 +- Wino.Mail.ViewModels/AppShellViewModel.cs | 2 +- Wino.Mail.ViewModels/BaseViewModel.cs | 1 - .../MergedAccountDetailsPageViewModel.cs | 2 +- .../Wino.Mail.ViewModels.csproj | 1 + .../Dialogs/SignatureEditorDialog.xaml.cs | 38 ++++++------- Wino.Mail/Services/DialogService.cs | 2 +- Wino.Mail/Views/ComposePage.xaml.cs | 38 ++++++------- .../Views/NewAccountManagementPage.xaml.cs | 2 +- Wino.Mail/Wino.Mail.csproj | 4 ++ .../Accounts/AccountMenuItemExtended.cs | 14 +++++ .../Accounts/AccountMenuItemsReordered.cs | 11 ++++ .../Accounts/AccountsMenuRefreshRequested.cs | 7 +++ .../ProtocolAuthorizationCallbackReceived.cs | 10 ++++ .../Mails/CancelRenderingContentRequested.cs | 7 +++ .../Mails/ClearMailSelectionsRequested.cs | 7 +++ .../Mails/CreateNewComposeMailRequested.cs | 10 ++++ .../Mails/DisposeRenderingFrameRequested.cs | 7 +++ Wino.Messages/Mails/HtmlRenderingRequested.cs | 8 +++ .../Mails/ImapSetupBackNavigationRequested.cs | 12 +++++ .../Mails/ImapSetupDismissRequested.cs | 10 ++++ .../Mails/ImapSetupNavigationRequested.cs | 11 ++++ .../Mails/MailItemNavigationRequested.cs | 11 ++++ .../Mails/NavigateMailFolderEvent.cs | 17 ++++++ .../Mails/RefreshUnreadCountsMessage.cs | 6 +++ Wino.Messages/Mails/SaveAsPDFRequested.cs | 11 ++++ .../Mails/SelectedMailItemsChanged.cs | 8 +++ .../BackBreadcrumNavigationRequested.cs | 7 +++ .../BreadcrumbNavigationRequested.cs | 12 +++++ .../Navigation/NavigateSettingsRequested.cs | 7 +++ .../Shell/ApplicationThemeChanged.cs | 8 +++ ...ateNewMailWithMultipleAccountsRequested.cs | 16 ++++++ .../Shell/InfoBarMessageRequested.cs | 17 ++++++ Wino.Messages/Shell/LanguageChanged.cs | 7 +++ .../Shell/MailtoProtocolMessageRequested.cs | 4 ++ .../Shell/NavigationPaneModeChanged.cs | 10 ++++ Wino.Messages/Shell/ShellStateUpdated.cs | 7 +++ .../AccountSynchronizationCompleted.cs | 7 +++ .../AccountSynchronizerStateChanged.cs | 12 +++++ .../NewSynchronizationRequested.cs | 10 ++++ .../Requests => Wino.Messages}/UIMessages.cs | 4 +- Wino.Messages/Wino.Messages.csproj | 19 +++++++ Wino.sln | 50 +++++++++++++++++ 60 files changed, 505 insertions(+), 120 deletions(-) create mode 100644 Wino.Core.Domain/Interfaces/IBaseSynchronizer.cs rename Wino.Core.Domain/{Models/Requests => Interfaces}/IUIMessage.cs (88%) create mode 100644 Wino.Core.Domain/Interfaces/IWinoSynchronizerFactory.cs rename Wino.Core.Domain/Models/{Requests => MailItem}/ToggleRequestRule.cs (86%) create mode 100644 Wino.Core.Domain/Models/Reader/WebViewMessage.cs delete mode 100644 Wino.Core.Domain/Models/Requests/WebViewMessage.cs create mode 100644 Wino.Messages/Accounts/AccountMenuItemExtended.cs create mode 100644 Wino.Messages/Accounts/AccountMenuItemsReordered.cs create mode 100644 Wino.Messages/Accounts/AccountsMenuRefreshRequested.cs create mode 100644 Wino.Messages/Authorization/ProtocolAuthorizationCallbackReceived.cs create mode 100644 Wino.Messages/Mails/CancelRenderingContentRequested.cs create mode 100644 Wino.Messages/Mails/ClearMailSelectionsRequested.cs create mode 100644 Wino.Messages/Mails/CreateNewComposeMailRequested.cs create mode 100644 Wino.Messages/Mails/DisposeRenderingFrameRequested.cs create mode 100644 Wino.Messages/Mails/HtmlRenderingRequested.cs create mode 100644 Wino.Messages/Mails/ImapSetupBackNavigationRequested.cs create mode 100644 Wino.Messages/Mails/ImapSetupDismissRequested.cs create mode 100644 Wino.Messages/Mails/ImapSetupNavigationRequested.cs create mode 100644 Wino.Messages/Mails/MailItemNavigationRequested.cs create mode 100644 Wino.Messages/Mails/NavigateMailFolderEvent.cs create mode 100644 Wino.Messages/Mails/RefreshUnreadCountsMessage.cs create mode 100644 Wino.Messages/Mails/SaveAsPDFRequested.cs create mode 100644 Wino.Messages/Mails/SelectedMailItemsChanged.cs create mode 100644 Wino.Messages/Navigation/BackBreadcrumNavigationRequested.cs create mode 100644 Wino.Messages/Navigation/BreadcrumbNavigationRequested.cs create mode 100644 Wino.Messages/Navigation/NavigateSettingsRequested.cs create mode 100644 Wino.Messages/Shell/ApplicationThemeChanged.cs create mode 100644 Wino.Messages/Shell/CreateNewMailWithMultipleAccountsRequested.cs create mode 100644 Wino.Messages/Shell/InfoBarMessageRequested.cs create mode 100644 Wino.Messages/Shell/LanguageChanged.cs create mode 100644 Wino.Messages/Shell/MailtoProtocolMessageRequested.cs create mode 100644 Wino.Messages/Shell/NavigationPaneModeChanged.cs create mode 100644 Wino.Messages/Shell/ShellStateUpdated.cs create mode 100644 Wino.Messages/Synchronization/AccountSynchronizationCompleted.cs create mode 100644 Wino.Messages/Synchronization/AccountSynchronizerStateChanged.cs create mode 100644 Wino.Messages/Synchronization/NewSynchronizationRequested.cs rename {Wino.Core/Requests => Wino.Messages}/UIMessages.cs (93%) create mode 100644 Wino.Messages/Wino.Messages.csproj diff --git a/Wino.Core.Domain/Interfaces/IBaseSynchronizer.cs b/Wino.Core.Domain/Interfaces/IBaseSynchronizer.cs new file mode 100644 index 00000000..21ca1f8a --- /dev/null +++ b/Wino.Core.Domain/Interfaces/IBaseSynchronizer.cs @@ -0,0 +1,54 @@ +using System.Threading; +using System.Threading.Tasks; +using MailKit; +using Wino.Core.Domain.Entities; +using Wino.Core.Domain.Enums; +using Wino.Core.Domain.Models.MailItem; +using Wino.Core.Domain.Models.Synchronization; + +namespace Wino.Core.Domain.Interfaces +{ + public interface IBaseSynchronizer + { + /// + /// Account that is assigned for this synchronizer. + /// + MailAccount Account { get; } + + /// + /// Synchronizer state. + /// + AccountSynchronizerState State { get; } + + /// + /// Queues a single request to be executed in the next synchronization. + /// + /// Request to queue. + void QueueRequest(IRequestBase request); + + /// + /// TODO + /// + /// Whether active synchronization is stopped or not. + bool CancelActiveSynchronization(); + + /// + /// 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. + /// + /// Options for synchronization. + /// Cancellation token. + /// Result summary of synchronization. + Task SynchronizeAsync(SynchronizationOptions options, CancellationToken cancellationToken = default); + + /// + /// Downloads a single MIME message from the server and saves it to disk. + /// + /// Mail item to download from server. + /// Optional progress reporting for download operation. + /// Cancellation token. + Task DownloadMissingMimeMessageAsync(IMailItem mailItem, ITransferProgress transferProgress, CancellationToken cancellationToken = default); + } +} diff --git a/Wino.Core.Domain/Models/Requests/IUIMessage.cs b/Wino.Core.Domain/Interfaces/IUIMessage.cs similarity index 88% rename from Wino.Core.Domain/Models/Requests/IUIMessage.cs rename to Wino.Core.Domain/Interfaces/IUIMessage.cs index 44b74525..5a637e2b 100644 --- a/Wino.Core.Domain/Models/Requests/IUIMessage.cs +++ b/Wino.Core.Domain/Interfaces/IUIMessage.cs @@ -1,4 +1,4 @@ -namespace Wino.Core.Domain.Models.Requests +namespace Wino.Core.Domain.Interfaces { /// /// Interface for all messages to report UI changes from synchronizers to UI. diff --git a/Wino.Core.Domain/Interfaces/IWinoSynchronizerFactory.cs b/Wino.Core.Domain/Interfaces/IWinoSynchronizerFactory.cs new file mode 100644 index 00000000..9bf1489e --- /dev/null +++ b/Wino.Core.Domain/Interfaces/IWinoSynchronizerFactory.cs @@ -0,0 +1,12 @@ +using System; +using Wino.Core.Domain.Entities; + +namespace Wino.Core.Domain.Interfaces +{ + public interface IWinoSynchronizerFactory : IInitializeAsync + { + IBaseSynchronizer GetAccountSynchronizer(Guid accountId); + IBaseSynchronizer CreateNewSynchronizer(MailAccount account); + void DeleteSynchronizer(MailAccount account); + } +} diff --git a/Wino.Core.Domain/Models/Requests/ToggleRequestRule.cs b/Wino.Core.Domain/Models/MailItem/ToggleRequestRule.cs similarity index 86% rename from Wino.Core.Domain/Models/Requests/ToggleRequestRule.cs rename to Wino.Core.Domain/Models/MailItem/ToggleRequestRule.cs index b69db903..9ed10f48 100644 --- a/Wino.Core.Domain/Models/Requests/ToggleRequestRule.cs +++ b/Wino.Core.Domain/Models/MailItem/ToggleRequestRule.cs @@ -1,8 +1,7 @@ using System; using Wino.Core.Domain.Enums; -using Wino.Core.Domain.Models.MailItem; -namespace Wino.Core.Domain.Models.Requests +namespace Wino.Core.Domain.Models.MailItem { /// /// Defines a single rule for toggling user actions if needed. diff --git a/Wino.Core.Domain/Models/Reader/WebViewMessage.cs b/Wino.Core.Domain/Models/Reader/WebViewMessage.cs new file mode 100644 index 00000000..f3a462b1 --- /dev/null +++ b/Wino.Core.Domain/Models/Reader/WebViewMessage.cs @@ -0,0 +1,16 @@ +using Newtonsoft.Json; + +namespace Wino.Core.Domain.Models.Reader +{ + /// + /// Used to pass messages from the webview to the app. + /// + public class WebViewMessage + { + [JsonProperty("type")] + public string Type { get; set; } + + [JsonProperty("value")] + public string Value { get; set; } + } +} diff --git a/Wino.Core.Domain/Models/Requests/WebViewMessage.cs b/Wino.Core.Domain/Models/Requests/WebViewMessage.cs deleted file mode 100644 index 2c6aab9c..00000000 --- a/Wino.Core.Domain/Models/Requests/WebViewMessage.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Wino.Core.Domain.Models.Requests -{ - // Used to pass messages from the webview to the app. - public class WebViewMessage - { - public string type { get; set; } - public string value { get; set; } - } -} diff --git a/Wino.Core.Domain/Wino.Core.Domain.csproj b/Wino.Core.Domain/Wino.Core.Domain.csproj index 187841b8..cd4d5484 100644 --- a/Wino.Core.Domain/Wino.Core.Domain.csproj +++ b/Wino.Core.Domain/Wino.Core.Domain.csproj @@ -49,7 +49,8 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + + diff --git a/Wino.Core/Messages/Synchronization/AccountSynchronizerStateChanged.cs b/Wino.Core/Messages/Synchronization/AccountSynchronizerStateChanged.cs index ea7db120..4662fcb7 100644 --- a/Wino.Core/Messages/Synchronization/AccountSynchronizerStateChanged.cs +++ b/Wino.Core/Messages/Synchronization/AccountSynchronizerStateChanged.cs @@ -1,5 +1,5 @@ using Wino.Core.Domain.Enums; -using Wino.Core.Synchronizers; +using Wino.Core.Domain.Interfaces; namespace Wino.Core.Messages.Synchronization { diff --git a/Wino.Core/Services/AccountService.cs b/Wino.Core/Services/AccountService.cs index 851c22ea..763e724c 100644 --- a/Wino.Core/Services/AccountService.cs +++ b/Wino.Core/Services/AccountService.cs @@ -10,9 +10,9 @@ using SqlKata; using Wino.Core.Domain.Entities; using Wino.Core.Domain.Enums; using Wino.Core.Domain.Interfaces; +using Wino.Core.Domain.Models.Requests; using Wino.Core.Extensions; using Wino.Core.Messages.Accounts; -using Wino.Core.Requests; namespace Wino.Core.Services { diff --git a/Wino.Core/Services/BaseDatabaseService.cs b/Wino.Core/Services/BaseDatabaseService.cs index cd0136e2..18e6d9ce 100644 --- a/Wino.Core/Services/BaseDatabaseService.cs +++ b/Wino.Core/Services/BaseDatabaseService.cs @@ -1,6 +1,6 @@ using CommunityToolkit.Mvvm.Messaging; using SQLite; -using Wino.Core.Domain.Models.Requests; +using Wino.Core.Domain.Interfaces; namespace Wino.Core.Services { diff --git a/Wino.Core/Services/FolderService.cs b/Wino.Core/Services/FolderService.cs index 04ffafae..6aec1a87 100644 --- a/Wino.Core/Services/FolderService.cs +++ b/Wino.Core/Services/FolderService.cs @@ -13,10 +13,10 @@ using Wino.Core.Domain.Interfaces; using Wino.Core.Domain.Models.Accounts; using Wino.Core.Domain.Models.Folders; using Wino.Core.Domain.Models.MailItem; +using Wino.Core.Domain.Models.Requests; using Wino.Core.Domain.Models.Synchronization; using Wino.Core.Extensions; using Wino.Core.MenuItems; -using Wino.Core.Requests; namespace Wino.Core.Services { diff --git a/Wino.Core/Services/MailService.cs b/Wino.Core/Services/MailService.cs index d96dcf5c..744ce330 100644 --- a/Wino.Core/Services/MailService.cs +++ b/Wino.Core/Services/MailService.cs @@ -13,8 +13,8 @@ using Wino.Core.Domain.Enums; using Wino.Core.Domain.Interfaces; using Wino.Core.Domain.Models.Comparers; using Wino.Core.Domain.Models.MailItem; +using Wino.Core.Domain.Models.Requests; using Wino.Core.Extensions; -using Wino.Core.Requests; namespace Wino.Core.Services { diff --git a/Wino.Core/Services/WinoRequestProcessor.cs b/Wino.Core/Services/WinoRequestProcessor.cs index ffcf3f01..9639a00b 100644 --- a/Wino.Core/Services/WinoRequestProcessor.cs +++ b/Wino.Core/Services/WinoRequestProcessor.cs @@ -9,7 +9,6 @@ using Wino.Core.Domain.Exceptions; using Wino.Core.Domain.Interfaces; using Wino.Core.Domain.Models.Folders; using Wino.Core.Domain.Models.MailItem; -using Wino.Core.Domain.Models.Requests; using Wino.Core.Requests; namespace Wino.Core.Services diff --git a/Wino.Core/Synchronizers/BaseSynchronizer.cs b/Wino.Core/Synchronizers/BaseSynchronizer.cs index 246c432f..185921b9 100644 --- a/Wino.Core/Synchronizers/BaseSynchronizer.cs +++ b/Wino.Core/Synchronizers/BaseSynchronizer.cs @@ -21,50 +21,6 @@ using Wino.Core.Requests; namespace Wino.Core.Synchronizers { - public interface IBaseSynchronizer - { - /// - /// Account that is assigned for this synchronizer. - /// - MailAccount Account { get; } - - /// - /// Synchronizer state. - /// - AccountSynchronizerState State { get; } - - /// - /// Queues a single request to be executed in the next synchronization. - /// - /// Request to queue. - void QueueRequest(IRequestBase request); - - /// - /// TODO - /// - /// Whether active synchronization is stopped or not. - bool CancelActiveSynchronization(); - - /// - /// 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. - /// - /// Options for synchronization. - /// Cancellation token. - /// Result summary of synchronization. - Task SynchronizeAsync(SynchronizationOptions options, CancellationToken cancellationToken = default); - - /// - /// Downloads a single MIME message from the server and saves it to disk. - /// - /// Mail item to download from server. - /// Optional progress reporting for download operation. - /// Cancellation token. - Task DownloadMissingMimeMessageAsync(IMailItem mailItem, ITransferProgress transferProgress, CancellationToken cancellationToken = default); - } - public abstract class BaseSynchronizer : BaseMailIntegrator, IBaseSynchronizer { private SemaphoreSlim synchronizationSemaphore = new(1); diff --git a/Wino.Core/Wino.Core.csproj b/Wino.Core/Wino.Core.csproj index 07ec28a4..5d1a3e25 100644 --- a/Wino.Core/Wino.Core.csproj +++ b/Wino.Core/Wino.Core.csproj @@ -18,11 +18,11 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + - + @@ -37,5 +37,6 @@ + diff --git a/Wino.Core/WinoSynchronizerFactory.cs b/Wino.Core/WinoSynchronizerFactory.cs index d01b7c86..89c34409 100644 --- a/Wino.Core/WinoSynchronizerFactory.cs +++ b/Wino.Core/WinoSynchronizerFactory.cs @@ -10,13 +10,6 @@ using Wino.Core.Synchronizers; namespace Wino.Core { - public interface IWinoSynchronizerFactory : IInitializeAsync - { - IBaseSynchronizer GetAccountSynchronizer(Guid accountId); - IBaseSynchronizer CreateNewSynchronizer(MailAccount account); - void DeleteSynchronizer(MailAccount account); - } - /// /// Factory that keeps track of all integrator with associated mail accounts. /// Synchronizer per-account makes sense because re-generating synchronizers are not ideal. @@ -82,7 +75,6 @@ namespace Wino.Core return new OutlookSynchronizer(mailAccount, outlookAuthenticator, _outlookChangeProcessor); case Domain.Enums.MailProviderType.Gmail: var gmailAuthenticator = new GmailAuthenticator(_tokenService, _nativeAppService); - return new GmailSynchronizer(mailAccount, gmailAuthenticator, _gmailChangeProcessor); case Domain.Enums.MailProviderType.Office365: break; diff --git a/Wino.Mail.ViewModels/AccountDetailsPageViewModel.cs b/Wino.Mail.ViewModels/AccountDetailsPageViewModel.cs index 8f373065..b921ef1a 100644 --- a/Wino.Mail.ViewModels/AccountDetailsPageViewModel.cs +++ b/Wino.Mail.ViewModels/AccountDetailsPageViewModel.cs @@ -12,8 +12,8 @@ using Wino.Core.Domain.Enums; using Wino.Core.Domain.Interfaces; using Wino.Core.Domain.Models.Folders; using Wino.Core.Domain.Models.Navigation; +using Wino.Core.Domain.Models.Requests; using Wino.Core.Messages.Navigation; -using Wino.Core.Requests; namespace Wino.Mail.ViewModels { diff --git a/Wino.Mail.ViewModels/AccountManagementViewModel.cs b/Wino.Mail.ViewModels/AccountManagementViewModel.cs index dfdd5a09..c67dbcf4 100644 --- a/Wino.Mail.ViewModels/AccountManagementViewModel.cs +++ b/Wino.Mail.ViewModels/AccountManagementViewModel.cs @@ -15,11 +15,11 @@ using Wino.Core.Domain.Enums; using Wino.Core.Domain.Exceptions; using Wino.Core.Domain.Interfaces; using Wino.Core.Domain.Models.Navigation; +using Wino.Core.Domain.Models.Requests; using Wino.Core.Domain.Models.Store; using Wino.Core.Domain.Models.Synchronization; using Wino.Core.Messages.Authorization; using Wino.Core.Messages.Navigation; -using Wino.Core.Requests; using Wino.Mail.ViewModels.Data; namespace Wino.Mail.ViewModels diff --git a/Wino.Mail.ViewModels/AppShellViewModel.cs b/Wino.Mail.ViewModels/AppShellViewModel.cs index 5717d901..4e8f73b5 100644 --- a/Wino.Mail.ViewModels/AppShellViewModel.cs +++ b/Wino.Mail.ViewModels/AppShellViewModel.cs @@ -18,6 +18,7 @@ using Wino.Core.Domain.Interfaces; using Wino.Core.Domain.Models.Folders; using Wino.Core.Domain.Models.MailItem; using Wino.Core.Domain.Models.Navigation; +using Wino.Core.Domain.Models.Requests; using Wino.Core.Domain.Models.Synchronization; using Wino.Core.MenuItems; using Wino.Core.Messages.Accounts; @@ -25,7 +26,6 @@ using Wino.Core.Messages.Mails; using Wino.Core.Messages.Navigation; using Wino.Core.Messages.Shell; using Wino.Core.Messages.Synchronization; -using Wino.Core.Requests; using Wino.Core.Services; namespace Wino.Mail.ViewModels diff --git a/Wino.Mail.ViewModels/BaseViewModel.cs b/Wino.Mail.ViewModels/BaseViewModel.cs index 544ddda8..1d6de4e2 100644 --- a/Wino.Mail.ViewModels/BaseViewModel.cs +++ b/Wino.Mail.ViewModels/BaseViewModel.cs @@ -7,7 +7,6 @@ using Wino.Core.Domain.Interfaces; using Wino.Core.Domain.Models.Folders; using Wino.Core.Domain.Models.Navigation; using Wino.Core.Domain.Models.Requests; -using Wino.Core.Requests; namespace Wino.Mail.ViewModels { diff --git a/Wino.Mail.ViewModels/MergedAccountDetailsPageViewModel.cs b/Wino.Mail.ViewModels/MergedAccountDetailsPageViewModel.cs index 9121954b..67b7e800 100644 --- a/Wino.Mail.ViewModels/MergedAccountDetailsPageViewModel.cs +++ b/Wino.Mail.ViewModels/MergedAccountDetailsPageViewModel.cs @@ -8,8 +8,8 @@ using CommunityToolkit.Mvvm.Messaging; using Wino.Core.Domain; using Wino.Core.Domain.Interfaces; using Wino.Core.Domain.Models.Navigation; +using Wino.Core.Domain.Models.Requests; using Wino.Core.Messages.Navigation; -using Wino.Core.Requests; using Wino.Mail.ViewModels.Data; namespace Wino.Mail.ViewModels diff --git a/Wino.Mail.ViewModels/Wino.Mail.ViewModels.csproj b/Wino.Mail.ViewModels/Wino.Mail.ViewModels.csproj index ccac6be6..3bad0c74 100644 --- a/Wino.Mail.ViewModels/Wino.Mail.ViewModels.csproj +++ b/Wino.Mail.ViewModels/Wino.Mail.ViewModels.csproj @@ -17,6 +17,7 @@ + diff --git a/Wino.Mail/Dialogs/SignatureEditorDialog.xaml.cs b/Wino.Mail/Dialogs/SignatureEditorDialog.xaml.cs index 753ae356..bd729f84 100644 --- a/Wino.Mail/Dialogs/SignatureEditorDialog.xaml.cs +++ b/Wino.Mail/Dialogs/SignatureEditorDialog.xaml.cs @@ -10,7 +10,7 @@ using Windows.UI.Xaml.Controls; using Wino.Core.Domain; using Wino.Core.Domain.Entities; using Wino.Core.Domain.Interfaces; -using Wino.Core.Domain.Models.Requests; +using Wino.Core.Domain.Models.Reader; using Wino.Views.Settings; namespace Wino.Dialogs @@ -314,41 +314,41 @@ namespace Wino.Dialogs { var change = JsonConvert.DeserializeObject(args.WebMessageAsJson); - if (change.type == "bold") + if (change.Type == "bold") { - BoldButton.IsChecked = change.value == "true"; + BoldButton.IsChecked = change.Value == "true"; } - else if (change.type == "italic") + else if (change.Type == "italic") { - ItalicButton.IsChecked = change.value == "true"; + ItalicButton.IsChecked = change.Value == "true"; } - else if (change.type == "underline") + else if (change.Type == "underline") { - UnderlineButton.IsChecked = change.value == "true"; + UnderlineButton.IsChecked = change.Value == "true"; } - else if (change.type == "strikethrough") + else if (change.Type == "strikethrough") { - StrokeButton.IsChecked = change.value == "true"; + StrokeButton.IsChecked = change.Value == "true"; } - else if (change.type == "ol") + else if (change.Type == "ol") { - OrderedListButton.IsChecked = change.value == "true"; + OrderedListButton.IsChecked = change.Value == "true"; } - else if (change.type == "ul") + else if (change.Type == "ul") { - BulletListButton.IsChecked = change.value == "true"; + BulletListButton.IsChecked = change.Value == "true"; } - else if (change.type == "indent") + else if (change.Type == "indent") { - IncreaseIndentButton.IsEnabled = change.value == "disabled" ? false : true; + IncreaseIndentButton.IsEnabled = change.Value == "disabled" ? false : true; } - else if (change.type == "outdent") + else if (change.Type == "outdent") { - DecreaseIndentButton.IsEnabled = change.value == "disabled" ? false : true; + DecreaseIndentButton.IsEnabled = change.Value == "disabled" ? false : true; } - else if (change.type == "alignment") + else if (change.Type == "alignment") { - var parsedValue = change.value switch + var parsedValue = change.Value switch { "jodit-icon_left" => 0, "jodit-icon_center" => 1, diff --git a/Wino.Mail/Services/DialogService.cs b/Wino.Mail/Services/DialogService.cs index c1a33c6c..4350765d 100644 --- a/Wino.Mail/Services/DialogService.cs +++ b/Wino.Mail/Services/DialogService.cs @@ -15,10 +15,10 @@ using Wino.Core.Domain.Enums; using Wino.Core.Domain.Interfaces; using Wino.Core.Domain.Models.Accounts; using Wino.Core.Domain.Models.Folders; +using Wino.Core.Domain.Models.Requests; using Wino.Core.Domain.Models.Synchronization; using Wino.Core.Messages.Shell; using Wino.Core.Messages.Synchronization; -using Wino.Core.Requests; using Wino.Core.UWP.Extensions; using Wino.Dialogs; diff --git a/Wino.Mail/Views/ComposePage.xaml.cs b/Wino.Mail/Views/ComposePage.xaml.cs index e2a71e7b..511b9bac 100644 --- a/Wino.Mail/Views/ComposePage.xaml.cs +++ b/Wino.Mail/Views/ComposePage.xaml.cs @@ -27,7 +27,7 @@ using Wino.Core.Domain; using Wino.Core.Domain.Entities; using Wino.Core.Domain.Enums; using Wino.Core.Domain.Interfaces; -using Wino.Core.Domain.Models.Requests; +using Wino.Core.Domain.Models.Reader; using Wino.Core.Messages.Mails; using Wino.Core.Messages.Shell; using Wino.Extensions; @@ -478,41 +478,41 @@ namespace Wino.Views { var change = JsonConvert.DeserializeObject(args.WebMessageAsJson); - if (change.type == "bold") + if (change.Type == "bold") { - BoldButton.IsChecked = change.value == "true"; + BoldButton.IsChecked = change.Value == "true"; } - else if (change.type == "italic") + else if (change.Type == "italic") { - ItalicButton.IsChecked = change.value == "true"; + ItalicButton.IsChecked = change.Value == "true"; } - else if (change.type == "underline") + else if (change.Type == "underline") { - UnderlineButton.IsChecked = change.value == "true"; + UnderlineButton.IsChecked = change.Value == "true"; } - else if (change.type == "strikethrough") + else if (change.Type == "strikethrough") { - StrokeButton.IsChecked = change.value == "true"; + StrokeButton.IsChecked = change.Value == "true"; } - else if (change.type == "ol") + else if (change.Type == "ol") { - OrderedListButton.IsChecked = change.value == "true"; + OrderedListButton.IsChecked = change.Value == "true"; } - else if (change.type == "ul") + else if (change.Type == "ul") { - BulletListButton.IsChecked = change.value == "true"; + BulletListButton.IsChecked = change.Value == "true"; } - else if (change.type == "indent") + else if (change.Type == "indent") { - IncreaseIndentButton.IsEnabled = change.value == "disabled" ? false : true; + IncreaseIndentButton.IsEnabled = change.Value == "disabled" ? false : true; } - else if (change.type == "outdent") + else if (change.Type == "outdent") { - DecreaseIndentButton.IsEnabled = change.value == "disabled" ? false : true; + DecreaseIndentButton.IsEnabled = change.Value == "disabled" ? false : true; } - else if (change.type == "alignment") + else if (change.Type == "alignment") { - var parsedValue = change.value switch + var parsedValue = change.Value switch { "jodit-icon_left" => 0, "jodit-icon_center" => 1, diff --git a/Wino.Mail/Views/NewAccountManagementPage.xaml.cs b/Wino.Mail/Views/NewAccountManagementPage.xaml.cs index a00c25e9..9eb49606 100644 --- a/Wino.Mail/Views/NewAccountManagementPage.xaml.cs +++ b/Wino.Mail/Views/NewAccountManagementPage.xaml.cs @@ -6,8 +6,8 @@ using MoreLinq; using Windows.UI.Xaml.Media.Animation; using Windows.UI.Xaml.Navigation; using Wino.Core.Domain.Enums; +using Wino.Core.Domain.Models.Requests; using Wino.Core.Messages.Navigation; -using Wino.Core.Requests; using Wino.Mail.ViewModels.Data; using Wino.Views.Abstract; using Wino.Views.Account; diff --git a/Wino.Mail/Wino.Mail.csproj b/Wino.Mail/Wino.Mail.csproj index a758c37c..23732c9d 100644 --- a/Wino.Mail/Wino.Mail.csproj +++ b/Wino.Mail/Wino.Mail.csproj @@ -802,6 +802,10 @@ {d62f1c03-da57-4709-a640-0283296a8e66} Wino.Mail.ViewModels + + {0c307d7e-256f-448c-8265-5622a812fbcc} + Wino.Messages + diff --git a/Wino.Messages/Accounts/AccountMenuItemExtended.cs b/Wino.Messages/Accounts/AccountMenuItemExtended.cs new file mode 100644 index 00000000..f06ae4bc --- /dev/null +++ b/Wino.Messages/Accounts/AccountMenuItemExtended.cs @@ -0,0 +1,14 @@ +using System; +using Wino.Core.Domain.Models.MailItem; + +namespace Wino.Messages.Accounts +{ + /// + /// When menu item for the account is requested to be extended. + /// Additional properties are also supported to navigate to correct IMailItem. + /// + /// Account to extend menu item for. + /// Folder to select after expansion. + /// Mail item to select if possible in the expanded folder. + public record AccountMenuItemExtended(Guid FolderId, IMailItem NavigateMailItem); +} diff --git a/Wino.Messages/Accounts/AccountMenuItemsReordered.cs b/Wino.Messages/Accounts/AccountMenuItemsReordered.cs new file mode 100644 index 00000000..75ac5b4c --- /dev/null +++ b/Wino.Messages/Accounts/AccountMenuItemsReordered.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; + +namespace Wino.Messages.Accounts +{ + /// + /// Emitted when account menu items are reordered. + /// + /// New order info. + public record AccountMenuItemsReordered(Dictionary newOrderDictionary); +} diff --git a/Wino.Messages/Accounts/AccountsMenuRefreshRequested.cs b/Wino.Messages/Accounts/AccountsMenuRefreshRequested.cs new file mode 100644 index 00000000..3bee7e7f --- /dev/null +++ b/Wino.Messages/Accounts/AccountsMenuRefreshRequested.cs @@ -0,0 +1,7 @@ +namespace Wino.Messages.Accounts +{ + /// + /// When a full menu refresh for accounts menu is requested. + /// + public record AccountsMenuRefreshRequested(bool AutomaticallyNavigateFirstItem = true); +} diff --git a/Wino.Messages/Authorization/ProtocolAuthorizationCallbackReceived.cs b/Wino.Messages/Authorization/ProtocolAuthorizationCallbackReceived.cs new file mode 100644 index 00000000..0f089779 --- /dev/null +++ b/Wino.Messages/Authorization/ProtocolAuthorizationCallbackReceived.cs @@ -0,0 +1,10 @@ +using System; + +namespace Wino.Messages.Authorization +{ + /// + /// When Google authentication makes a callback to the app via protocol activation to the app. + /// + /// Callback Uri that Google returned. + public record ProtocolAuthorizationCallbackReceived(Uri AuthorizationResponseUri); +} diff --git a/Wino.Messages/Mails/CancelRenderingContentRequested.cs b/Wino.Messages/Mails/CancelRenderingContentRequested.cs new file mode 100644 index 00000000..9c650793 --- /dev/null +++ b/Wino.Messages/Mails/CancelRenderingContentRequested.cs @@ -0,0 +1,7 @@ +namespace Wino.Messages.Mails +{ + /// + /// When rendered html is requested to cancel. + /// + public record CancelRenderingContentRequested; +} diff --git a/Wino.Messages/Mails/ClearMailSelectionsRequested.cs b/Wino.Messages/Mails/ClearMailSelectionsRequested.cs new file mode 100644 index 00000000..8099d526 --- /dev/null +++ b/Wino.Messages/Mails/ClearMailSelectionsRequested.cs @@ -0,0 +1,7 @@ +namespace Wino.Messages.Mails +{ + /// + /// When reset all mail selections requested. + /// + public record ClearMailSelectionsRequested; +} diff --git a/Wino.Messages/Mails/CreateNewComposeMailRequested.cs b/Wino.Messages/Mails/CreateNewComposeMailRequested.cs new file mode 100644 index 00000000..7a42dd31 --- /dev/null +++ b/Wino.Messages/Mails/CreateNewComposeMailRequested.cs @@ -0,0 +1,10 @@ +using Wino.Core.Domain.Models.Reader; + +namespace Wino.Messages.Mails +{ + /// + /// When a new composing requested. + /// + /// + public record CreateNewComposeMailRequested(MailRenderModel RenderModel); +} diff --git a/Wino.Messages/Mails/DisposeRenderingFrameRequested.cs b/Wino.Messages/Mails/DisposeRenderingFrameRequested.cs new file mode 100644 index 00000000..334ef349 --- /dev/null +++ b/Wino.Messages/Mails/DisposeRenderingFrameRequested.cs @@ -0,0 +1,7 @@ +namespace Wino.Messages.Mails +{ + /// + /// When rendering frame should be disposed. + /// + public class DisposeRenderingFrameRequested { } +} diff --git a/Wino.Messages/Mails/HtmlRenderingRequested.cs b/Wino.Messages/Mails/HtmlRenderingRequested.cs new file mode 100644 index 00000000..0b2b36f8 --- /dev/null +++ b/Wino.Messages/Mails/HtmlRenderingRequested.cs @@ -0,0 +1,8 @@ +namespace Wino.Messages.Mails +{ + /// + /// When existing a new html is requested to be rendered due to mail selection or signature. + /// + /// HTML to render in WebView2. + public record HtmlRenderingRequested(string HtmlBody); +} diff --git a/Wino.Messages/Mails/ImapSetupBackNavigationRequested.cs b/Wino.Messages/Mails/ImapSetupBackNavigationRequested.cs new file mode 100644 index 00000000..5b40c008 --- /dev/null +++ b/Wino.Messages/Mails/ImapSetupBackNavigationRequested.cs @@ -0,0 +1,12 @@ +using System; + +namespace Wino.Messages.Mails +{ + /// + /// When IMAP setup dialog requestes back breadcrumb navigation. + /// Not providing PageType will go back to previous page by doing back navigation. + /// + /// Type to go back. + /// Back parameters. + public record ImapSetupBackNavigationRequested(Type PageType = null, object Parameter = null); +} diff --git a/Wino.Messages/Mails/ImapSetupDismissRequested.cs b/Wino.Messages/Mails/ImapSetupDismissRequested.cs new file mode 100644 index 00000000..655227c9 --- /dev/null +++ b/Wino.Messages/Mails/ImapSetupDismissRequested.cs @@ -0,0 +1,10 @@ +using Wino.Core.Domain.Entities; + +namespace Wino.Messages.Mails +{ + /// + /// When user asked to dismiss IMAP setup dialog. + /// + /// Validated server information that is ready to be saved to database. + public record ImapSetupDismissRequested(CustomServerInformation CompletedServerInformation = null); +} diff --git a/Wino.Messages/Mails/ImapSetupNavigationRequested.cs b/Wino.Messages/Mails/ImapSetupNavigationRequested.cs new file mode 100644 index 00000000..a9c91479 --- /dev/null +++ b/Wino.Messages/Mails/ImapSetupNavigationRequested.cs @@ -0,0 +1,11 @@ +using System; + +namespace Wino.Messages.Mails +{ + /// + /// When IMAP setup dialog breadcrumb navigation requested. + /// + /// Page type to navigate. + /// Navigation parameters. + public record ImapSetupNavigationRequested(Type PageType, object Parameter); +} diff --git a/Wino.Messages/Mails/MailItemNavigationRequested.cs b/Wino.Messages/Mails/MailItemNavigationRequested.cs new file mode 100644 index 00000000..b38dd2b2 --- /dev/null +++ b/Wino.Messages/Mails/MailItemNavigationRequested.cs @@ -0,0 +1,11 @@ +using System; + +namespace Wino.Messages.Mails +{ + /// + /// When a IMailItem needs to be navigated (or selected) + /// + /// UniqueId of the mail to navigate. + /// Whether navigated item should be scrolled to or not.. + public record MailItemNavigationRequested(Guid UniqueMailId, bool ScrollToItem = false); +} diff --git a/Wino.Messages/Mails/NavigateMailFolderEvent.cs b/Wino.Messages/Mails/NavigateMailFolderEvent.cs new file mode 100644 index 00000000..bba5f297 --- /dev/null +++ b/Wino.Messages/Mails/NavigateMailFolderEvent.cs @@ -0,0 +1,17 @@ +using System.Threading.Tasks; +using Wino.Core.Domain.Interfaces; +using Wino.Core.Domain.Models.Navigation; + +namespace Wino.Messages.Mails +{ + /// + /// Selects the given FolderMenuItem in the shell folders list. + /// + public class NavigateMailFolderEvent : NavigateMailFolderEventArgs + { + public NavigateMailFolderEvent(IBaseFolderMenuItem baseFolderMenuItem, TaskCompletionSource folderInitLoadAwaitTask = null) + : base(baseFolderMenuItem, folderInitLoadAwaitTask) + { + } + } +} diff --git a/Wino.Messages/Mails/RefreshUnreadCountsMessage.cs b/Wino.Messages/Mails/RefreshUnreadCountsMessage.cs new file mode 100644 index 00000000..4aff7058 --- /dev/null +++ b/Wino.Messages/Mails/RefreshUnreadCountsMessage.cs @@ -0,0 +1,6 @@ +using System; + +namespace Wino.Messages.Mails +{ + public record RefreshUnreadCountsMessage(Guid AccountId); +} diff --git a/Wino.Messages/Mails/SaveAsPDFRequested.cs b/Wino.Messages/Mails/SaveAsPDFRequested.cs new file mode 100644 index 00000000..8e2771b2 --- /dev/null +++ b/Wino.Messages/Mails/SaveAsPDFRequested.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Wino.Messages.Mails +{ + /// + /// When mail save as PDF requested. + /// + public record SaveAsPDFRequested(string FileSavePath); +} diff --git a/Wino.Messages/Mails/SelectedMailItemsChanged.cs b/Wino.Messages/Mails/SelectedMailItemsChanged.cs new file mode 100644 index 00000000..4e602178 --- /dev/null +++ b/Wino.Messages/Mails/SelectedMailItemsChanged.cs @@ -0,0 +1,8 @@ +namespace Wino.Messages.Mails +{ + /// + /// When selected mail count is changed. + /// + /// New selected mail count. + public record SelectedMailItemsChanged(int SelectedItemCount); +} diff --git a/Wino.Messages/Navigation/BackBreadcrumNavigationRequested.cs b/Wino.Messages/Navigation/BackBreadcrumNavigationRequested.cs new file mode 100644 index 00000000..005505a8 --- /dev/null +++ b/Wino.Messages/Navigation/BackBreadcrumNavigationRequested.cs @@ -0,0 +1,7 @@ +namespace Wino.Messages.Navigation +{ + /// + /// When back navigation is requested for breadcrumb pages. + /// + public record BackBreadcrumNavigationRequested { } +} diff --git a/Wino.Messages/Navigation/BreadcrumbNavigationRequested.cs b/Wino.Messages/Navigation/BreadcrumbNavigationRequested.cs new file mode 100644 index 00000000..b8c9d58c --- /dev/null +++ b/Wino.Messages/Navigation/BreadcrumbNavigationRequested.cs @@ -0,0 +1,12 @@ +using Wino.Core.Domain.Enums; + +namespace Wino.Messages.Navigation +{ + /// + /// When Breadcrumb control navigation requested. + /// + /// Title to display for the page. + /// Enum equilavent of the page to navigate. + /// Additional parameters to the page. + public record BreadcrumbNavigationRequested(string PageTitle, WinoPage PageType, object Parameter = null); +} diff --git a/Wino.Messages/Navigation/NavigateSettingsRequested.cs b/Wino.Messages/Navigation/NavigateSettingsRequested.cs new file mode 100644 index 00000000..9b188b54 --- /dev/null +++ b/Wino.Messages/Navigation/NavigateSettingsRequested.cs @@ -0,0 +1,7 @@ +namespace Wino.Messages.Navigation +{ + /// + /// Navigates to settings page. + /// + public record NavigateSettingsRequested; +} \ No newline at end of file diff --git a/Wino.Messages/Shell/ApplicationThemeChanged.cs b/Wino.Messages/Shell/ApplicationThemeChanged.cs new file mode 100644 index 00000000..440d4d42 --- /dev/null +++ b/Wino.Messages/Shell/ApplicationThemeChanged.cs @@ -0,0 +1,8 @@ +namespace Wino.Messages.Shell +{ + /// + /// When the application theme changed. + /// + /// + public record ApplicationThemeChanged(bool IsUnderlyingThemeDark); +} diff --git a/Wino.Messages/Shell/CreateNewMailWithMultipleAccountsRequested.cs b/Wino.Messages/Shell/CreateNewMailWithMultipleAccountsRequested.cs new file mode 100644 index 00000000..8c4f3463 --- /dev/null +++ b/Wino.Messages/Shell/CreateNewMailWithMultipleAccountsRequested.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; +using Wino.Core.Domain.Entities; + +namespace Wino.Messages.Shell +{ + /// + /// When + /// - There is no selection of any folder for any account + /// - Multiple accounts exists + /// - User clicked 'Create New Mail' + /// + /// flyout must be presented to pick correct account. + /// This message will be picked up by UWP Shell. + /// + public record CreateNewMailWithMultipleAccountsRequested(IEnumerable AllAccounts); +} diff --git a/Wino.Messages/Shell/InfoBarMessageRequested.cs b/Wino.Messages/Shell/InfoBarMessageRequested.cs new file mode 100644 index 00000000..da7f4c84 --- /dev/null +++ b/Wino.Messages/Shell/InfoBarMessageRequested.cs @@ -0,0 +1,17 @@ +using System; +using Wino.Core.Domain.Enums; + +namespace Wino.Messages.Shell +{ + /// + /// For displaying right sliding notification message in shell. + /// + /// Severity of notification. + /// Title of the message. + /// Message content. + public record InfoBarMessageRequested(InfoBarMessageType Severity, + string Title, + string Message, + string ActionButtonTitle = "", + Action Action = null); +} diff --git a/Wino.Messages/Shell/LanguageChanged.cs b/Wino.Messages/Shell/LanguageChanged.cs new file mode 100644 index 00000000..61f106bb --- /dev/null +++ b/Wino.Messages/Shell/LanguageChanged.cs @@ -0,0 +1,7 @@ +namespace Wino.Messages.Shell +{ + /// + /// When application language is updated. + /// + public record LanguageChanged; +} diff --git a/Wino.Messages/Shell/MailtoProtocolMessageRequested.cs b/Wino.Messages/Shell/MailtoProtocolMessageRequested.cs new file mode 100644 index 00000000..011a9b37 --- /dev/null +++ b/Wino.Messages/Shell/MailtoProtocolMessageRequested.cs @@ -0,0 +1,4 @@ +namespace Wino.Messages.Shell +{ + public class MailtoProtocolMessageRequested { } +} diff --git a/Wino.Messages/Shell/NavigationPaneModeChanged.cs b/Wino.Messages/Shell/NavigationPaneModeChanged.cs new file mode 100644 index 00000000..4a874384 --- /dev/null +++ b/Wino.Messages/Shell/NavigationPaneModeChanged.cs @@ -0,0 +1,10 @@ +using Wino.Core.Domain.Enums; + +namespace Wino.Messages.Shell +{ + /// + /// When navigation pane mode is changed. + /// + /// New navigation mode. + public record NavigationPaneModeChanged(MenuPaneMode NewMode); +} diff --git a/Wino.Messages/Shell/ShellStateUpdated.cs b/Wino.Messages/Shell/ShellStateUpdated.cs new file mode 100644 index 00000000..56c6f644 --- /dev/null +++ b/Wino.Messages/Shell/ShellStateUpdated.cs @@ -0,0 +1,7 @@ +namespace Wino.Messages.Shell +{ + /// + /// When reading mail state or reader pane narrowed state is changed. + /// + public record ShellStateUpdated; +} diff --git a/Wino.Messages/Synchronization/AccountSynchronizationCompleted.cs b/Wino.Messages/Synchronization/AccountSynchronizationCompleted.cs new file mode 100644 index 00000000..e5376c63 --- /dev/null +++ b/Wino.Messages/Synchronization/AccountSynchronizationCompleted.cs @@ -0,0 +1,7 @@ +using System; +using Wino.Core.Domain.Enums; + +namespace Wino.Messages.Synchronization +{ + public record AccountSynchronizationCompleted(Guid AccountId, SynchronizationCompletedState Result, Guid? SynchronizationTrackingId); +} diff --git a/Wino.Messages/Synchronization/AccountSynchronizerStateChanged.cs b/Wino.Messages/Synchronization/AccountSynchronizerStateChanged.cs new file mode 100644 index 00000000..e7eb0f3c --- /dev/null +++ b/Wino.Messages/Synchronization/AccountSynchronizerStateChanged.cs @@ -0,0 +1,12 @@ +using Wino.Core.Domain.Enums; +using Wino.Core.Domain.Interfaces; + +namespace Wino.Messages.Synchronization +{ + /// + /// Emitted when synchronizer state is updated. + /// + /// Account Synchronizer + /// New state. + public record AccountSynchronizerStateChanged(IBaseSynchronizer Synchronizer, AccountSynchronizerState NewState); +} diff --git a/Wino.Messages/Synchronization/NewSynchronizationRequested.cs b/Wino.Messages/Synchronization/NewSynchronizationRequested.cs new file mode 100644 index 00000000..1fba42d0 --- /dev/null +++ b/Wino.Messages/Synchronization/NewSynchronizationRequested.cs @@ -0,0 +1,10 @@ +using Wino.Core.Domain.Models.Synchronization; + +namespace Wino.Messages.Synchronization +{ + /// + /// Triggers a new synchronization if possible. + /// + /// Options for synchronization. + public record NewSynchronizationRequested(SynchronizationOptions Options); +} diff --git a/Wino.Core/Requests/UIMessages.cs b/Wino.Messages/UIMessages.cs similarity index 93% rename from Wino.Core/Requests/UIMessages.cs rename to Wino.Messages/UIMessages.cs index 6373a350..895451e3 100644 --- a/Wino.Core/Requests/UIMessages.cs +++ b/Wino.Messages/UIMessages.cs @@ -1,9 +1,9 @@ using System; using Wino.Core.Domain.Entities; +using Wino.Core.Domain.Interfaces; using Wino.Core.Domain.Models.Folders; -using Wino.Core.Domain.Models.Requests; -namespace Wino.Core.Requests +namespace Wino.Core.Domain.Models.Requests { public record MailAddedMessage(MailCopy AddedMail) : IUIMessage; public record MailRemovedMessage(MailCopy RemovedMail) : IUIMessage; diff --git a/Wino.Messages/Wino.Messages.csproj b/Wino.Messages/Wino.Messages.csproj new file mode 100644 index 00000000..f224dbb2 --- /dev/null +++ b/Wino.Messages/Wino.Messages.csproj @@ -0,0 +1,19 @@ + + + + netstandard2.0 + 12 + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + diff --git a/Wino.sln b/Wino.sln index 75f50855..7b557c83 100644 --- a/Wino.sln +++ b/Wino.sln @@ -15,18 +15,25 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wino.BackgroundTasks", "Win EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wino.Mail.ViewModels", "Wino.Mail.ViewModels\Wino.Mail.ViewModels.csproj", "{D62F1C03-DA57-4709-A640-0283296A8E66}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wino.Messages", "Wino.Messages\Wino.Messages.csproj", "{0C307D7E-256F-448C-8265-5622A812FBCC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU Debug|ARM = Debug|ARM Debug|ARM64 = Debug|ARM64 Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU Release|ARM = Release|ARM Release|ARM64 = Release|ARM64 Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {68A432B8-C1B7-494C-8D6D-230788EA683E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {68A432B8-C1B7-494C-8D6D-230788EA683E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {68A432B8-C1B7-494C-8D6D-230788EA683E}.Debug|Any CPU.Deploy.0 = Debug|Any CPU {68A432B8-C1B7-494C-8D6D-230788EA683E}.Debug|ARM.ActiveCfg = Debug .NET Native|ARM {68A432B8-C1B7-494C-8D6D-230788EA683E}.Debug|ARM.Build.0 = Debug .NET Native|ARM {68A432B8-C1B7-494C-8D6D-230788EA683E}.Debug|ARM.Deploy.0 = Debug .NET Native|ARM @@ -39,6 +46,9 @@ Global {68A432B8-C1B7-494C-8D6D-230788EA683E}.Debug|x86.ActiveCfg = Debug|x86 {68A432B8-C1B7-494C-8D6D-230788EA683E}.Debug|x86.Build.0 = Debug|x86 {68A432B8-C1B7-494C-8D6D-230788EA683E}.Debug|x86.Deploy.0 = Debug|x86 + {68A432B8-C1B7-494C-8D6D-230788EA683E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {68A432B8-C1B7-494C-8D6D-230788EA683E}.Release|Any CPU.Build.0 = Release|Any CPU + {68A432B8-C1B7-494C-8D6D-230788EA683E}.Release|Any CPU.Deploy.0 = Release|Any CPU {68A432B8-C1B7-494C-8D6D-230788EA683E}.Release|ARM.ActiveCfg = Release|ARM {68A432B8-C1B7-494C-8D6D-230788EA683E}.Release|ARM.Build.0 = Release|ARM {68A432B8-C1B7-494C-8D6D-230788EA683E}.Release|ARM.Deploy.0 = Release|ARM @@ -51,6 +61,8 @@ Global {68A432B8-C1B7-494C-8D6D-230788EA683E}.Release|x86.ActiveCfg = Release|x86 {68A432B8-C1B7-494C-8D6D-230788EA683E}.Release|x86.Build.0 = Release|x86 {68A432B8-C1B7-494C-8D6D-230788EA683E}.Release|x86.Deploy.0 = Release|x86 + {E6B1632A-8901-41E8-9DDF-6793C7698B0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E6B1632A-8901-41E8-9DDF-6793C7698B0B}.Debug|Any CPU.Build.0 = Debug|Any CPU {E6B1632A-8901-41E8-9DDF-6793C7698B0B}.Debug|ARM.ActiveCfg = Debug|Any CPU {E6B1632A-8901-41E8-9DDF-6793C7698B0B}.Debug|ARM.Build.0 = Debug|Any CPU {E6B1632A-8901-41E8-9DDF-6793C7698B0B}.Debug|ARM64.ActiveCfg = Debug|Any CPU @@ -59,6 +71,8 @@ Global {E6B1632A-8901-41E8-9DDF-6793C7698B0B}.Debug|x64.Build.0 = Debug|Any CPU {E6B1632A-8901-41E8-9DDF-6793C7698B0B}.Debug|x86.ActiveCfg = Debug|Any CPU {E6B1632A-8901-41E8-9DDF-6793C7698B0B}.Debug|x86.Build.0 = Debug|Any CPU + {E6B1632A-8901-41E8-9DDF-6793C7698B0B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E6B1632A-8901-41E8-9DDF-6793C7698B0B}.Release|Any CPU.Build.0 = Release|Any CPU {E6B1632A-8901-41E8-9DDF-6793C7698B0B}.Release|ARM.ActiveCfg = Release|Any CPU {E6B1632A-8901-41E8-9DDF-6793C7698B0B}.Release|ARM.Build.0 = Release|Any CPU {E6B1632A-8901-41E8-9DDF-6793C7698B0B}.Release|ARM64.ActiveCfg = Release|Any CPU @@ -67,6 +81,8 @@ Global {E6B1632A-8901-41E8-9DDF-6793C7698B0B}.Release|x64.Build.0 = Release|Any CPU {E6B1632A-8901-41E8-9DDF-6793C7698B0B}.Release|x86.ActiveCfg = Release|Any CPU {E6B1632A-8901-41E8-9DDF-6793C7698B0B}.Release|x86.Build.0 = Release|Any CPU + {395F19BA-1E42-495C-9DB5-1A6F537FCCB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {395F19BA-1E42-495C-9DB5-1A6F537FCCB8}.Debug|Any CPU.Build.0 = Debug|Any CPU {395F19BA-1E42-495C-9DB5-1A6F537FCCB8}.Debug|ARM.ActiveCfg = Debug|ARM {395F19BA-1E42-495C-9DB5-1A6F537FCCB8}.Debug|ARM.Build.0 = Debug|ARM {395F19BA-1E42-495C-9DB5-1A6F537FCCB8}.Debug|ARM64.ActiveCfg = Debug|ARM64 @@ -75,6 +91,8 @@ Global {395F19BA-1E42-495C-9DB5-1A6F537FCCB8}.Debug|x64.Build.0 = Debug|x64 {395F19BA-1E42-495C-9DB5-1A6F537FCCB8}.Debug|x86.ActiveCfg = Debug|x86 {395F19BA-1E42-495C-9DB5-1A6F537FCCB8}.Debug|x86.Build.0 = Debug|x86 + {395F19BA-1E42-495C-9DB5-1A6F537FCCB8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {395F19BA-1E42-495C-9DB5-1A6F537FCCB8}.Release|Any CPU.Build.0 = Release|Any CPU {395F19BA-1E42-495C-9DB5-1A6F537FCCB8}.Release|ARM.ActiveCfg = Release|ARM {395F19BA-1E42-495C-9DB5-1A6F537FCCB8}.Release|ARM.Build.0 = Release|ARM {395F19BA-1E42-495C-9DB5-1A6F537FCCB8}.Release|ARM64.ActiveCfg = Release|ARM64 @@ -83,6 +101,8 @@ Global {395F19BA-1E42-495C-9DB5-1A6F537FCCB8}.Release|x64.Build.0 = Release|x64 {395F19BA-1E42-495C-9DB5-1A6F537FCCB8}.Release|x86.ActiveCfg = Release|x86 {395F19BA-1E42-495C-9DB5-1A6F537FCCB8}.Release|x86.Build.0 = Release|x86 + {CF3312E5-5DA0-4867-9945-49EA7598AF1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CF3312E5-5DA0-4867-9945-49EA7598AF1F}.Debug|Any CPU.Build.0 = Debug|Any CPU {CF3312E5-5DA0-4867-9945-49EA7598AF1F}.Debug|ARM.ActiveCfg = Debug|Any CPU {CF3312E5-5DA0-4867-9945-49EA7598AF1F}.Debug|ARM.Build.0 = Debug|Any CPU {CF3312E5-5DA0-4867-9945-49EA7598AF1F}.Debug|ARM64.ActiveCfg = Debug|Any CPU @@ -91,6 +111,8 @@ Global {CF3312E5-5DA0-4867-9945-49EA7598AF1F}.Debug|x64.Build.0 = Debug|Any CPU {CF3312E5-5DA0-4867-9945-49EA7598AF1F}.Debug|x86.ActiveCfg = Debug|Any CPU {CF3312E5-5DA0-4867-9945-49EA7598AF1F}.Debug|x86.Build.0 = Debug|Any CPU + {CF3312E5-5DA0-4867-9945-49EA7598AF1F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CF3312E5-5DA0-4867-9945-49EA7598AF1F}.Release|Any CPU.Build.0 = Release|Any CPU {CF3312E5-5DA0-4867-9945-49EA7598AF1F}.Release|ARM.ActiveCfg = Release|Any CPU {CF3312E5-5DA0-4867-9945-49EA7598AF1F}.Release|ARM.Build.0 = Release|Any CPU {CF3312E5-5DA0-4867-9945-49EA7598AF1F}.Release|ARM64.ActiveCfg = Release|Any CPU @@ -99,6 +121,8 @@ Global {CF3312E5-5DA0-4867-9945-49EA7598AF1F}.Release|x64.Build.0 = Release|Any CPU {CF3312E5-5DA0-4867-9945-49EA7598AF1F}.Release|x86.ActiveCfg = Release|Any CPU {CF3312E5-5DA0-4867-9945-49EA7598AF1F}.Release|x86.Build.0 = Release|Any CPU + {D9EF0F59-F5F2-4D6C-A5BA-84043D8F3E08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D9EF0F59-F5F2-4D6C-A5BA-84043D8F3E08}.Debug|Any CPU.Build.0 = Debug|Any CPU {D9EF0F59-F5F2-4D6C-A5BA-84043D8F3E08}.Debug|ARM.ActiveCfg = Debug|ARM {D9EF0F59-F5F2-4D6C-A5BA-84043D8F3E08}.Debug|ARM.Build.0 = Debug|ARM {D9EF0F59-F5F2-4D6C-A5BA-84043D8F3E08}.Debug|ARM64.ActiveCfg = Debug|ARM64 @@ -107,6 +131,8 @@ Global {D9EF0F59-F5F2-4D6C-A5BA-84043D8F3E08}.Debug|x64.Build.0 = Debug|x64 {D9EF0F59-F5F2-4D6C-A5BA-84043D8F3E08}.Debug|x86.ActiveCfg = Debug|x86 {D9EF0F59-F5F2-4D6C-A5BA-84043D8F3E08}.Debug|x86.Build.0 = Debug|x86 + {D9EF0F59-F5F2-4D6C-A5BA-84043D8F3E08}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D9EF0F59-F5F2-4D6C-A5BA-84043D8F3E08}.Release|Any CPU.Build.0 = Release|Any CPU {D9EF0F59-F5F2-4D6C-A5BA-84043D8F3E08}.Release|ARM.ActiveCfg = Release|ARM {D9EF0F59-F5F2-4D6C-A5BA-84043D8F3E08}.Release|ARM.Build.0 = Release|ARM {D9EF0F59-F5F2-4D6C-A5BA-84043D8F3E08}.Release|ARM64.ActiveCfg = Release|ARM64 @@ -115,6 +141,8 @@ Global {D9EF0F59-F5F2-4D6C-A5BA-84043D8F3E08}.Release|x64.Build.0 = Release|x64 {D9EF0F59-F5F2-4D6C-A5BA-84043D8F3E08}.Release|x86.ActiveCfg = Release|x86 {D9EF0F59-F5F2-4D6C-A5BA-84043D8F3E08}.Release|x86.Build.0 = Release|x86 + {D62F1C03-DA57-4709-A640-0283296A8E66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D62F1C03-DA57-4709-A640-0283296A8E66}.Debug|Any CPU.Build.0 = Debug|Any CPU {D62F1C03-DA57-4709-A640-0283296A8E66}.Debug|ARM.ActiveCfg = Debug|Any CPU {D62F1C03-DA57-4709-A640-0283296A8E66}.Debug|ARM.Build.0 = Debug|Any CPU {D62F1C03-DA57-4709-A640-0283296A8E66}.Debug|ARM64.ActiveCfg = Debug|Any CPU @@ -123,6 +151,8 @@ Global {D62F1C03-DA57-4709-A640-0283296A8E66}.Debug|x64.Build.0 = Debug|Any CPU {D62F1C03-DA57-4709-A640-0283296A8E66}.Debug|x86.ActiveCfg = Debug|Any CPU {D62F1C03-DA57-4709-A640-0283296A8E66}.Debug|x86.Build.0 = Debug|Any CPU + {D62F1C03-DA57-4709-A640-0283296A8E66}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D62F1C03-DA57-4709-A640-0283296A8E66}.Release|Any CPU.Build.0 = Release|Any CPU {D62F1C03-DA57-4709-A640-0283296A8E66}.Release|ARM.ActiveCfg = Release|Any CPU {D62F1C03-DA57-4709-A640-0283296A8E66}.Release|ARM.Build.0 = Release|Any CPU {D62F1C03-DA57-4709-A640-0283296A8E66}.Release|ARM64.ActiveCfg = Release|Any CPU @@ -131,6 +161,26 @@ Global {D62F1C03-DA57-4709-A640-0283296A8E66}.Release|x64.Build.0 = Release|Any CPU {D62F1C03-DA57-4709-A640-0283296A8E66}.Release|x86.ActiveCfg = Release|Any CPU {D62F1C03-DA57-4709-A640-0283296A8E66}.Release|x86.Build.0 = Release|Any CPU + {0C307D7E-256F-448C-8265-5622A812FBCC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0C307D7E-256F-448C-8265-5622A812FBCC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0C307D7E-256F-448C-8265-5622A812FBCC}.Debug|ARM.ActiveCfg = Debug|Any CPU + {0C307D7E-256F-448C-8265-5622A812FBCC}.Debug|ARM.Build.0 = Debug|Any CPU + {0C307D7E-256F-448C-8265-5622A812FBCC}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {0C307D7E-256F-448C-8265-5622A812FBCC}.Debug|ARM64.Build.0 = Debug|Any CPU + {0C307D7E-256F-448C-8265-5622A812FBCC}.Debug|x64.ActiveCfg = Debug|Any CPU + {0C307D7E-256F-448C-8265-5622A812FBCC}.Debug|x64.Build.0 = Debug|Any CPU + {0C307D7E-256F-448C-8265-5622A812FBCC}.Debug|x86.ActiveCfg = Debug|Any CPU + {0C307D7E-256F-448C-8265-5622A812FBCC}.Debug|x86.Build.0 = Debug|Any CPU + {0C307D7E-256F-448C-8265-5622A812FBCC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0C307D7E-256F-448C-8265-5622A812FBCC}.Release|Any CPU.Build.0 = Release|Any CPU + {0C307D7E-256F-448C-8265-5622A812FBCC}.Release|ARM.ActiveCfg = Release|Any CPU + {0C307D7E-256F-448C-8265-5622A812FBCC}.Release|ARM.Build.0 = Release|Any CPU + {0C307D7E-256F-448C-8265-5622A812FBCC}.Release|ARM64.ActiveCfg = Release|Any CPU + {0C307D7E-256F-448C-8265-5622A812FBCC}.Release|ARM64.Build.0 = Release|Any CPU + {0C307D7E-256F-448C-8265-5622A812FBCC}.Release|x64.ActiveCfg = Release|Any CPU + {0C307D7E-256F-448C-8265-5622A812FBCC}.Release|x64.Build.0 = Release|Any CPU + {0C307D7E-256F-448C-8265-5622A812FBCC}.Release|x86.ActiveCfg = Release|Any CPU + {0C307D7E-256F-448C-8265-5622A812FBCC}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE