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