UWP .NET9 (#555)

* Ground work for NET9 UWP switch.

* Add launch settings for Wino.Mail

* Added new test WAP project

* fix platforms in slnx solution

* ManagePackageVersionsCentrally set default

* Fixing assets and couple issues with the new packaging project.

* Add back markdown

* Fix nuget warnings

* FIx error in WAP about build tools

* Add build.props with default language preview

* Some AOT compilation progress.

* More AOT stuff.

* Remove deprecated protocol auth activation handler.

* Fix remaining protocol handler for google auth.

* Even more AOT

* More more AOT fixes

* Fix a few more AOT warnings

* Fix signature editor AOT

* Fix composer and renderer AOT JSON

* Outlook Sync AOT

* Fixing bundle generation and package signing.

---------

Co-authored-by: Burak Kaan Köse <bkaankose@outlook.com>
This commit is contained in:
Aleh Khantsevich
2025-02-14 01:43:52 +01:00
committed by GitHub
parent e8dd8bff44
commit 2ec05ea7cc
151 changed files with 1170 additions and 1962 deletions
@@ -2,7 +2,6 @@
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Toolkit.Uwp.Helpers;
using Windows.ApplicationModel.Activation;
using Windows.Storage;
using Windows.UI.Xaml;
@@ -10,6 +9,7 @@ using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media.Animation;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Interfaces;
using Wino.Core.UWP.Extensions;
using Wino.Views;
namespace Wino.Activation
@@ -44,7 +44,7 @@ namespace Wino.Activation
if (string.Equals(fileExtension, ".eml", StringComparison.OrdinalIgnoreCase))
{
var fileBytes = await file.ReadBytesAsync();
var fileBytes = await file.ToByteArrayAsync();
var directoryName = Path.GetDirectoryName(file.Path);
var messageInformation = await _mimeFileService.GetMimeMessageInformationAsync(fileBytes, directoryName).ConfigureAwait(false);
@@ -4,14 +4,12 @@ using CommunityToolkit.Mvvm.Messaging;
using Windows.ApplicationModel.Activation;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models.Launch;
using Wino.Messaging.Client.Authorization;
using Wino.Messaging.Client.Shell;
namespace Wino.Activation
{
internal class ProtocolActivationHandler : ActivationHandler<ProtocolActivatedEventArgs>
{
private const string GoogleAuthorizationProtocolTag = "google.pw.oauth2";
private const string MailtoProtocolTag = "mailto:";
private readonly INativeAppService _nativeAppService;
@@ -28,13 +26,7 @@ namespace Wino.Activation
// Check URI prefix.
var protocolString = args.Uri.AbsoluteUri;
// Google OAuth Response
if (protocolString.StartsWith(GoogleAuthorizationProtocolTag))
{
// App must be working already. No need to check for running state.
WeakReferenceMessenger.Default.Send(new ProtocolAuthorizationCallbackReceived(args.Uri));
}
else if (protocolString.StartsWith(MailtoProtocolTag))
if (protocolString.StartsWith(MailtoProtocolTag))
{
// mailto activation. Try to parse params.
_launchProtocolService.MailToUri = new MailToUri(protocolString);
@@ -1,8 +1,8 @@
using System;
using System.Threading.Tasks;
using CommunityToolkit.Mvvm.Messaging;
using CommunityToolkit.WinUI.Notifications;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Toolkit.Uwp.Notifications;
using Serilog;
using Windows.ApplicationModel.Activation;
using Wino.Core.Domain;
+1 -1
View File
@@ -6,7 +6,7 @@ using Wino.Core.UWP.Controls;
namespace Wino.Controls
{
public class AccountNavigationItem : WinoNavigationViewItem
public partial class AccountNavigationItem : WinoNavigationViewItem
{
public static readonly DependencyProperty IsActiveAccountProperty = DependencyProperty.Register(nameof(IsActiveAccount), typeof(bool), typeof(AccountNavigationItem), new PropertyMetadata(false, new PropertyChangedCallback(OnIsActiveAccountChanged)));
+1 -1
View File
@@ -19,7 +19,7 @@ namespace Wino.Controls.Advanced
/// Custom ListView control that handles multiple selection with Extended/Multiple selection mode
/// and supports threads.
/// </summary>
public class WinoListView : ListView, IDisposable
public partial class WinoListView : ListView, IDisposable
{
private ILogger logger = Log.ForContext<WinoListView>();
+1 -1
View File
@@ -15,7 +15,7 @@ using Wino.Core.UWP.Services;
namespace Wino.Controls
{
public class ImagePreviewControl : Control
public partial class ImagePreviewControl : Control
{
private const string PART_EllipseInitialsGrid = "EllipseInitialsGrid";
private const string PART_InitialsTextBlock = "InitialsTextBlock";
@@ -8,7 +8,7 @@ namespace Wino.Controls
/// <summary>
/// Templated button for each setting in Settings Dialog.
/// </summary>
public class SettingsMenuItemControl : Control
public partial class SettingsMenuItemControl : Control
{
public string Title
{
+1 -1
View File
@@ -7,7 +7,7 @@ using Windows.UI.Xaml.Markup;
namespace Wino.Controls
{
[ContentProperty(Name = nameof(Content))]
public class WinoExpander : Control
public partial class WinoExpander : Control
{
private const string PART_HeaderGrid = "HeaderGrid";
private const string PART_ContentAreaWrapper = "ContentAreaWrapper";
+1 -1
View File
@@ -8,7 +8,7 @@ using Wino.Mail.ViewModels.Data;
namespace Wino.Controls
{
public class WinoSwipeControlItems : SwipeItems
public partial class WinoSwipeControlItems : SwipeItems
{
public static readonly DependencyProperty SwipeOperationProperty = DependencyProperty.Register(nameof(SwipeOperation), typeof(MailOperation), typeof(WinoSwipeControlItems), new PropertyMetadata(default(MailOperation), new PropertyChangedCallback(OnItemsChanged)));
public static readonly DependencyProperty MailItemProperty = DependencyProperty.Register(nameof(MailItem), typeof(IMailItem), typeof(WinoSwipeControlItems), new PropertyMetadata(null));
+13 -22
View File
@@ -10,7 +10,9 @@ using Windows.UI.Xaml.Controls;
using Wino.Core.Domain;
using Wino.Core.Domain.Entities.Mail;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models;
using Wino.Core.Domain.Models.Reader;
using Wino.Core.UWP.Extensions;
using Wino.Views.Settings;
namespace Wino.Dialogs
@@ -76,9 +78,9 @@ namespace Wino.Dialogs
_getHTMLBodyFunction = new Func<Task<string>>(async () =>
{
var editorContent = await InvokeScriptSafeAsync("GetHTMLContent();");
var editorContent = await Chromium.ExecuteScriptFunctionSafeAsync("GetHTMLContent");
return JsonSerializer.Deserialize<string>(editorContent);
return JsonSerializer.Deserialize(editorContent, BasicTypesJsonContext.Default.String);
});
var underlyingThemeService = App.Current.Services.GetService<IUnderlyingThemeService>();
@@ -188,22 +190,6 @@ namespace Wino.Dialogs
}
}
public async Task<string> ExecuteScriptFunctionAsync(string functionName, params object[] parameters)
{
string script = functionName + "(";
for (int i = 0; i < parameters.Length; i++)
{
script += JsonSerializer.Serialize(parameters[i]);
if (i < parameters.Length - 1)
{
script += ", ";
}
}
script += ");";
return await Chromium.ExecuteScriptAsync(script);
}
private async Task<string> InvokeScriptSafeAsync(string function)
{
if (Chromium == null) return string.Empty;
@@ -283,11 +269,11 @@ namespace Wino.Dialogs
if (string.IsNullOrEmpty(htmlBody))
{
await ExecuteScriptFunctionAsync("RenderHTML", " ");
await Chromium.ExecuteScriptFunctionAsync("RenderHTML", parameters: JsonSerializer.Serialize(" ", BasicTypesJsonContext.Default.String));
}
else
{
await ExecuteScriptFunctionAsync("RenderHTML", htmlBody);
await Chromium.ExecuteScriptFunctionAsync("RenderHTML", parameters: JsonSerializer.Serialize(htmlBody, BasicTypesJsonContext.Default.String));
await FocusEditorAsync();
}
@@ -300,7 +286,12 @@ namespace Wino.Dialogs
int composerFontSize = _preferencesService.ComposerFontSize;
var readerFont = _preferencesService.ReaderFont;
int readerFontSize = _preferencesService.ReaderFontSize;
return await ExecuteScriptFunctionAsync("initializeJodit", fonts, composerFont, composerFontSize, readerFont, readerFontSize);
return await Chromium.ExecuteScriptFunctionAsync("initializeJodit", false,
JsonSerializer.Serialize(fonts, BasicTypesJsonContext.Default.ListString),
JsonSerializer.Serialize(composerFont, BasicTypesJsonContext.Default.String),
JsonSerializer.Serialize(composerFontSize, BasicTypesJsonContext.Default.Int32),
JsonSerializer.Serialize(readerFont, BasicTypesJsonContext.Default.String),
JsonSerializer.Serialize(readerFontSize, BasicTypesJsonContext.Default.Int32));
}
private async void ChromiumInitialized(Microsoft.UI.Xaml.Controls.WebView2 sender, Microsoft.UI.Xaml.Controls.CoreWebView2InitializedEventArgs args)
@@ -327,7 +318,7 @@ namespace Wino.Dialogs
private void ScriptMessageReceived(CoreWebView2 sender, CoreWebView2WebMessageReceivedEventArgs args)
{
var change = JsonSerializer.Deserialize<WebViewMessage>(args.WebMessageAsJson);
var change = JsonSerializer.Deserialize(args.WebMessageAsJson, DomainModelsJsonContext.Default.WebViewMessage);
if (change.Type == "bold")
{
@@ -10,7 +10,7 @@ using Wino.Helpers;
namespace Wino.MenuFlyouts
{
public class AccountSelectorFlyout : MenuFlyout, IDisposable
public partial class AccountSelectorFlyout : MenuFlyout, IDisposable
{
private readonly IEnumerable<MailAccount> _accounts;
private readonly Func<MailAccount, Task> _onItemSelection;
+1 -2
View File
@@ -3,14 +3,13 @@ using System.Linq;
using CommunityToolkit.Mvvm.Input;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Wino.Controls;
using Wino.Core.Domain.Models.Reader;
using Wino.Core.UWP.Controls;
using Wino.Helpers;
namespace Wino.MenuFlyouts
{
public class FilterMenuFlyout : MenuFlyout
public partial class FilterMenuFlyout : MenuFlyout
{
public static readonly DependencyProperty SelectedFilterChangedCommandProperty = DependencyProperty.Register(nameof(SelectedFilterChangedCommand), typeof(IRelayCommand<FilterOption>), typeof(FilterMenuFlyout), new PropertyMetadata(null));
public static readonly DependencyProperty FilterOptionsProperty = DependencyProperty.Register(nameof(FilterOptions), typeof(List<FilterOption>), typeof(FilterMenuFlyout), new PropertyMetadata(null, new PropertyChangedCallback(OnOptionsChanged)));
@@ -6,7 +6,7 @@ using Wino.Core.Domain.Models.Folders;
namespace Wino.MenuFlyouts.Context
{
public class FolderOperationFlyout : WinoOperationFlyout<FolderOperationMenuItem>
public partial class FolderOperationFlyout : WinoOperationFlyout<FolderOperationMenuItem>
{
public FolderOperationFlyout(IEnumerable<FolderOperationMenuItem> availableActions, TaskCompletionSource<FolderOperationMenuItem> completionSource) : base(availableActions, completionSource)
{
@@ -3,7 +3,7 @@ using Wino.Core.Domain.Models.Folders;
namespace Wino.MenuFlyouts
{
public class FolderOperationMenuFlyoutItem : WinoOperationFlyoutItem<FolderOperationMenuItem>
public partial class FolderOperationMenuFlyoutItem : WinoOperationFlyoutItem<FolderOperationMenuItem>
{
public FolderOperationMenuFlyoutItem(FolderOperationMenuItem operationMenuItem, Action<FolderOperationMenuItem> clicked) : base(operationMenuItem, clicked)
{
+1 -1
View File
@@ -6,7 +6,7 @@ using Wino.Core.Domain.Models.Menus;
namespace Wino.MenuFlyouts.Context
{
public class MailOperationFlyout : WinoOperationFlyout<MailOperationMenuItem>
public partial class MailOperationFlyout : WinoOperationFlyout<MailOperationMenuItem>
{
public MailOperationFlyout(IEnumerable<MailOperationMenuItem> availableActions, TaskCompletionSource<MailOperationMenuItem> completionSource) : base(availableActions, completionSource)
{
@@ -3,7 +3,7 @@ using Wino.Core.Domain.Models.Menus;
namespace Wino.MenuFlyouts.Context
{
public class MailOperationMenuFlyoutItem : WinoOperationFlyoutItem<MailOperationMenuItem>
public partial class MailOperationMenuFlyoutItem : WinoOperationFlyoutItem<MailOperationMenuItem>
{
public MailOperationMenuFlyoutItem(MailOperationMenuItem operationMenuItem, Action<MailOperationMenuItem> clicked) : base(operationMenuItem, clicked)
{
+1 -1
View File
@@ -13,7 +13,7 @@ namespace Wino.MenuFlyouts
public Guid ClickedFolderId { get; set; }
}
public class MoveButtonFlyout : MenuFlyout
public partial class MoveButtonFlyout : MenuFlyout
{
public event TypedEventHandler<MoveButtonFlyout, MoveButtonMenuItemClickedEventArgs> MenuItemClick;
public static readonly DependencyProperty FoldersProperty = DependencyProperty.Register(nameof(Folders), typeof(List<MailItemFolder>), typeof(MoveButtonFlyout), new PropertyMetadata(null, new PropertyChangedCallback(OnFoldersChanged)));
+1 -1
View File
@@ -5,7 +5,7 @@ using Windows.UI.Xaml.Controls;
namespace Wino.MenuFlyouts
{
public class WinoOperationFlyout<TActionType> : MenuFlyout, IDisposable where TActionType : class
public partial class WinoOperationFlyout<TActionType> : MenuFlyout, IDisposable where TActionType : class
{
public TActionType ClickedOperation { get; set; }
@@ -9,7 +9,7 @@ using Wino.Helpers;
namespace Wino.MenuFlyouts
{
public class WinoOperationFlyoutItem<TOperationMenuItem> : MenuFlyoutItem, IDisposable where TOperationMenuItem : IMenuOperation
public partial class WinoOperationFlyoutItem<TOperationMenuItem> : MenuFlyoutItem, IDisposable where TOperationMenuItem : IMenuOperation
{
private const double CustomHeight = 35;
-30
View File
@@ -1,30 +0,0 @@
using System;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Wino")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Wino")]
[assembly: AssemblyCopyright("Copyright © 2021")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: ComVisible(false)]
-44
View File
@@ -1,44 +0,0 @@
<!--
This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most
developers. However, you can modify these parameters to modify the behavior of the .NET Native
optimizer.
Runtime Directives are documented at https://go.microsoft.com/fwlink/?LinkID=391919
To fully enable reflection for App1.MyClass and all of its public/private members
<Type Name="App1.MyClass" Dynamic="Required All"/>
To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32
<TypeInstantiation Name="App1.AppClass" Arguments="System.Int32" Activate="Required Public" />
Using the Namespace directive to apply reflection policy to all the types in a particular namespace
<Namespace Name="DataClasses.ViewModels" Serialize="All" />
-->
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
<Application>
<!--
An Assembly element with Name="*Application*" applies to all assemblies in
the application package. The asterisks are not wildcards.
-->
<Assembly Name="*Application*" Dynamic="Required All" />
<!-- Reduce memory footprint when building with Microsoft.Graph -->
<Assembly Name="Microsoft.Graph" Serialize="Excluded" />
<Assembly Name="Microsoft.Kiota.Abstractions" Dynamic="Public" />
<Assembly Name="Microsoft.Kiota.Authentication.Azure" Dynamic="Public" />
<Assembly Name="Microsoft.Kiota.Http.HttpClientLibrary" Dynamic="Public" />
<Assembly Name="Microsoft.Kiota.Serialization.Form" Dynamic="Public" />
<Assembly Name="Microsoft.Kiota.Serialization.Json" Dynamic="Public" />
<Assembly Name="Microsoft.Kiota.Serialization.Multipart" Dynamic="Public" />
<!-- Add your application specific runtime directives here. -->
<Type Name="Windows.Foundation.TypedEventHandler{Microsoft.UI.Xaml.Controls.NavigationView,Microsoft.UI.Xaml.Controls.NavigationViewItemInvokedEventArgs}" MarshalObject="Public" />
<Type Name="Microsoft.UI.Xaml.Controls.NavigationView">
<Event Name="ItemInvoked" Dynamic="Required"/>
</Type>
</Application>
</Directives>
+7
View File
@@ -0,0 +1,7 @@
{
"profiles": {
"App1": {
"commandName": "MsixPackage"
}
}
}
@@ -4,7 +4,7 @@ using Wino.Core.ViewModels.Data;
namespace Wino.Selectors
{
public class AccountProviderViewModelTemplateSelector : DataTemplateSelector
public partial class AccountProviderViewModelTemplateSelector : DataTemplateSelector
{
public DataTemplate RootAccountTemplate { get; set; }
public DataTemplate MergedAccountTemplate { get; set; }
@@ -4,7 +4,7 @@ using Wino.Core.ViewModels.Data;
namespace Wino.Selectors
{
public class AccountReorderTemplateSelector : DataTemplateSelector
public partial class AccountReorderTemplateSelector : DataTemplateSelector
{
public DataTemplate MergedAccountReorderTemplate { get; set; }
public DataTemplate RootAccountReorderTemplate { get; set; }
@@ -4,7 +4,7 @@ using Wino.Mail.ViewModels.Data;
namespace Wino.Selectors
{
public class MailItemContainerStyleSelector : StyleSelector
public partial class MailItemContainerStyleSelector : StyleSelector
{
public Style Thread { get; set; }
@@ -7,7 +7,7 @@ namespace Wino.Selectors
/// <summary>
/// Template selector for previewing mail item display modes in Settings->Personalization page.
/// </summary>
public class MailItemDisplayModePreviewTemplateSelector : DataTemplateSelector
public partial class MailItemDisplayModePreviewTemplateSelector : DataTemplateSelector
{
public DataTemplate CompactTemplate { get; set; }
public DataTemplate MediumTemplate { get; set; }
@@ -4,7 +4,7 @@ using Wino.Mail.ViewModels.Data;
namespace Wino.Selectors
{
public class MailItemDisplaySelector : DataTemplateSelector
public partial class MailItemDisplaySelector : DataTemplateSelector
{
public DataTemplate SingleMailItemTemplate { get; set; }
public DataTemplate ThreadMailItemTemplate { get; set; }
@@ -1,10 +1,6 @@
using Wino.Core.UWP;
using Wino.Mail.ViewModels;
namespace Wino.Views.Abstract
{
public class MailListPageAbstract : BasePage<MailListPageViewModel>
{
namespace Wino.Views.Abstract;
}
}
public partial class MailListPageAbstract : BasePage<MailListPageViewModel>;
+18 -24
View File
@@ -4,13 +4,13 @@ using System.Collections.ObjectModel;
using System.Linq;
using System.Reactive.Linq;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading;
using System.Threading.Tasks;
using CommunityToolkit.Mvvm.Messaging;
using CommunityToolkit.WinUI.Controls;
using EmailValidation;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Toolkit.Uwp.Helpers;
using Microsoft.UI.Xaml.Controls;
using Microsoft.Web.WebView2.Core;
using MimeKit;
@@ -27,6 +27,7 @@ using Windows.UI.Xaml.Navigation;
using Wino.Core.Domain;
using Wino.Core.Domain.Entities.Shared;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models;
using Wino.Core.Domain.Models.Reader;
using Wino.Core.UWP.Extensions;
using Wino.Mail.ViewModels.Data;
@@ -215,7 +216,7 @@ namespace Wino.Views
}
}
await InvokeScriptSafeAsync($"insertImages({JsonSerializer.Serialize(imagesInformation)});");
await InvokeScriptSafeAsync($"insertImages({JsonSerializer.Serialize(imagesInformation, ComposerPageJsonContext.Default.ListImageInfo)});");
}
}
// State should be reset even when an exception occurs, otherwise the UI will be stuck in a dragging state.
@@ -227,7 +228,7 @@ namespace Wino.Views
static async Task<string> GetDataURL(StorageFile file)
{
return $"data:image/{file.FileType.Replace(".", "")};base64,{Convert.ToBase64String(await file.ReadBytesAsync())}";
return $"data:image/{file.FileType.Replace(".", "")};base64,{Convert.ToBase64String(await file.ToByteArrayAsync())}";
}
}
@@ -320,22 +321,6 @@ namespace Wino.Views
await InvokeScriptSafeAsync($"toggleToolbar('{enable}');");
}
public async Task<string> ExecuteScriptFunctionAsync(string functionName, params object[] parameters)
{
string script = functionName + "(";
for (int i = 0; i < parameters.Length; i++)
{
script += JsonSerializer.Serialize(parameters[i]);
if (i < parameters.Length - 1)
{
script += ", ";
}
}
script += ");";
return await Chromium.ExecuteScriptAsync(script);
}
private async Task<string> InvokeScriptSafeAsync(string function)
{
if (Chromium == null) return string.Empty;
@@ -404,11 +389,11 @@ namespace Wino.Views
if (string.IsNullOrEmpty(htmlBody))
{
await ExecuteScriptFunctionAsync("RenderHTML", " ");
await Chromium.ExecuteScriptFunctionAsync("RenderHTML", parameters: JsonSerializer.Serialize(" ", BasicTypesJsonContext.Default.String));
}
else
{
await ExecuteScriptFunctionAsync("RenderHTML", htmlBody);
await Chromium.ExecuteScriptFunctionAsync("RenderHTML", parameters: JsonSerializer.Serialize(htmlBody, BasicTypesJsonContext.Default.String));
}
}
@@ -419,7 +404,13 @@ namespace Wino.Views
int composerFontSize = ViewModel.PreferencesService.ComposerFontSize;
var readerFont = ViewModel.PreferencesService.ReaderFont;
int readerFontSize = ViewModel.PreferencesService.ReaderFontSize;
return await ExecuteScriptFunctionAsync("initializeJodit", fonts, composerFont, composerFontSize, readerFont, readerFontSize);
return await Chromium.ExecuteScriptFunctionAsync("initializeJodit",
false,
JsonSerializer.Serialize(fonts, BasicTypesJsonContext.Default.ListString),
JsonSerializer.Serialize(composerFont, BasicTypesJsonContext.Default.String),
JsonSerializer.Serialize(composerFontSize, BasicTypesJsonContext.Default.Int32),
JsonSerializer.Serialize(readerFont, BasicTypesJsonContext.Default.String),
JsonSerializer.Serialize(readerFontSize, BasicTypesJsonContext.Default.Int32));
}
private void DisposeWebView2()
@@ -468,7 +459,7 @@ namespace Wino.Views
{
var editorContent = await InvokeScriptSafeAsync("GetHTMLContent();");
return JsonSerializer.Deserialize<string>(editorContent);
return JsonSerializer.Deserialize(editorContent, BasicTypesJsonContext.Default.String);
});
var underlyingThemeService = App.Current.Services.GetService<IUnderlyingThemeService>();
@@ -492,7 +483,7 @@ namespace Wino.Views
private void ScriptMessageReceived(CoreWebView2 sender, CoreWebView2WebMessageReceivedEventArgs args)
{
var change = JsonSerializer.Deserialize<WebViewMessage>(args.WebMessageAsJson);
var change = JsonSerializer.Deserialize(args.WebMessageAsJson, DomainModelsJsonContext.Default.WebViewMessage);
if (change.Type == "bold")
{
@@ -698,4 +689,7 @@ namespace Wino.Views
finally { deferral.Complete(); }
}
}
[JsonSerializable(typeof(List<ImageInfo>))]
public partial class ComposerPageJsonContext: JsonSerializerContext;
}
+3 -4
View File
@@ -12,7 +12,6 @@
xmlns:enums="using:Wino.Core.Domain.Enums"
xmlns:helpers="using:Wino.Helpers"
xmlns:i="using:Microsoft.Xaml.Interactivity"
xmlns:ic="using:Microsoft.Xaml.Interactions.Core"
xmlns:interactivity="using:Microsoft.Xaml.Interactivity"
xmlns:listview="using:Wino.Controls.Advanced"
xmlns:local="using:Wino.Behaviors"
@@ -219,9 +218,9 @@
Text="{x:Bind ViewModel.SearchQuery, Mode=TwoWay}"
TextChanged="SearchBar_TextChanged">
<i:Interaction.Behaviors>
<ic:EventTriggerBehavior EventName="QuerySubmitted">
<ic:InvokeCommandAction Command="{x:Bind ViewModel.PerformSearchCommand}" />
</ic:EventTriggerBehavior>
<i:EventTriggerBehavior EventName="QuerySubmitted">
<i:InvokeCommandAction Command="{x:Bind ViewModel.PerformSearchCommand}" />
</i:EventTriggerBehavior>
</i:Interaction.Behaviors>
</AutoSuggestBox>
</Grid>
+8 -22
View File
@@ -11,7 +11,9 @@ using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media.Animation;
using Windows.UI.Xaml.Navigation;
using Wino.Core.Domain;
using Wino.Core.Domain.Interfaces;
using Wino.Core.UWP.Extensions;
using Wino.Mail.ViewModels.Data;
using Wino.Messaging.Client.Mails;
using Wino.Messaging.Client.Shell;
@@ -65,22 +67,6 @@ namespace Wino.Views
return string.Empty;
}
public async Task<string> ExecuteScriptFunctionAsync(string functionName, params object[] parameters)
{
string script = functionName + "(";
for (int i = 0; i < parameters.Length; i++)
{
script += JsonSerializer.Serialize(parameters[i]);
if (i < parameters.Length - 1)
{
script += ", ";
}
}
script += ");";
return isChromiumDisposed ? string.Empty : await Chromium.ExecuteScriptAsync(script);
}
private async Task RenderInternalAsync(string htmlBody)
{
isRenderingInProgress = true;
@@ -92,12 +78,14 @@ namespace Wino.Views
if (string.IsNullOrEmpty(htmlBody))
{
await ExecuteScriptFunctionAsync("RenderHTML", " ");
await Chromium.ExecuteScriptFunctionAsync("RenderHTML", isChromiumDisposed, JsonSerializer.Serialize(" ", BasicTypesJsonContext.Default.String));
}
else
{
var shouldLinkifyText = ViewModel.CurrentRenderModel?.MailRenderingOptions?.RenderPlaintextLinks ?? true;
await ExecuteScriptFunctionAsync("RenderHTML", htmlBody, shouldLinkifyText);
await Chromium.ExecuteScriptFunctionAsync("RenderHTML", isChromiumDisposed,
JsonSerializer.Serialize(htmlBody, BasicTypesJsonContext.Default.String),
JsonSerializer.Serialize(shouldLinkifyText, BasicTypesJsonContext.Default.Boolean));
}
isRenderingInProgress = false;
@@ -133,8 +121,6 @@ namespace Wino.Views
{
base.OnNavigatedFrom(e);
WeakReferenceMessenger.Default.Send(new CancelRenderingContentRequested());
// Disposing the page.
// Make sure the WebView2 is disposed properly.
@@ -263,7 +249,7 @@ namespace Wino.Views
private async Task UpdateReaderFontPropertiesAsync()
{
await ExecuteScriptFunctionAsync("ChangeFontSize", _preferencesService.ReaderFontSize);
await Chromium.ExecuteScriptFunctionAsync("ChangeFontSize", isChromiumDisposed, JsonSerializer.Serialize(_preferencesService.ReaderFontSize, BasicTypesJsonContext.Default.Int32));
// Prepare font family name with fallback to sans-serif by default.
var fontName = _preferencesService.ReaderFont;
@@ -271,7 +257,7 @@ namespace Wino.Views
// If font family name is not supported by the browser, fallback to sans-serif.
fontName += ", sans-serif";
await ExecuteScriptFunctionAsync("ChangeFontFamily", fontName);
await Chromium.ExecuteScriptFunctionAsync("ChangeFontFamily", isChromiumDisposed, JsonSerializer.Serialize(fontName, BasicTypesJsonContext.Default.String));
}
void IRecipient<ApplicationThemeChanged>.Receive(ApplicationThemeChanged message)
+8 -9
View File
@@ -1,17 +1,16 @@
using CommunityToolkit.Labs.WinUI.MarkdownTextBlock;
using Wino.Views.Abstract;
namespace Wino.Views
namespace Wino.Views;
public sealed partial class WelcomePage : WelcomePageAbstract
{
public sealed partial class WelcomePage : WelcomePageAbstract
private readonly MarkdownConfig _config;
public WelcomePage()
{
private readonly MarkdownConfig _config;
InitializeComponent();
public WelcomePage()
{
InitializeComponent();
_config = new MarkdownConfig();
}
_config = new MarkdownConfig();
}
}
+112 -638
View File
@@ -1,638 +1,112 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<LangVersion>8.0</LangVersion>
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
<!-- UWP WAM Authentication on Xbox needs this. -->
<UseDotNetNativeSharedAssemblyFrameworkPackage>false</UseDotNetNativeSharedAssemblyFrameworkPackage>
<PackageCertificateThumbprint>3B34414D49FBF00A35A040085092D8699459EA8E</PackageCertificateThumbprint>
<PackageCertificateKeyFile>Wino.Mail_TemporaryKey.pfx</PackageCertificateKeyFile>
</PropertyGroup>
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProjectGuid>{68A432B8-C1B7-494C-8D6D-230788EA683E}</ProjectGuid>
<OutputType>AppContainerExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Wino.Mail</RootNamespace>
<AssemblyName>Wino.Mail</AssemblyName>
<DefaultLanguage>en-US</DefaultLanguage>
<TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>
<TargetPlatformVersion Condition=" '$(TargetPlatformVersion)' == '' ">10.0.22621.0</TargetPlatformVersion>
<TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>
<MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<WindowsXamlEnableOverview>true</WindowsXamlEnableOverview>
<GenerateAppInstallerFile>False</GenerateAppInstallerFile>
<AppxPackageSigningTimestampDigestAlgorithm>SHA256</AppxPackageSigningTimestampDigestAlgorithm>
<AppxAutoIncrementPackageRevision>False</AppxAutoIncrementPackageRevision>
<GenerateTestArtifacts>True</GenerateTestArtifacts>
<AppxBundle>Always</AppxBundle>
<AppxBundlePlatforms>x86|x64|arm64</AppxBundlePlatforms>
<HoursBetweenUpdateChecks>0</HoursBetweenUpdateChecks>
<GenerateTemporaryStoreCertificate>True</GenerateTemporaryStoreCertificate>
<AppxSymbolPackageEnabled>True</AppxSymbolPackageEnabled>
<AppxPackageDir>C:\Users\bkaan\Desktop\Packages\</AppxPackageDir>
<AppxPackageSigningEnabled>True</AppxPackageSigningEnabled>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<NoWarn>;2008</NoWarn>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<Optimize>true</Optimize>
<NoWarn>;2008</NoWarn>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
<!-- .NET Native Shit -->
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
<UseDotNetNativeSharedAssemblyFrameworkPackage>false</UseDotNetNativeSharedAssemblyFrameworkPackage>
<Use64BitCompiler>true</Use64BitCompiler>
<OutOfProcPDB>true</OutOfProcPDB>
<!-- Opt-in to generate PDB's out of process -->
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\ARM64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<NoWarn>;2008</NoWarn>
<DebugType>full</DebugType>
<PlatformTarget>ARM64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM64'">
<OutputPath>bin\ARM64\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<Optimize>true</Optimize>
<NoWarn>;2008</NoWarn>
<DebugType>pdbonly</DebugType>
<PlatformTarget>ARM64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>false</Prefer32Bit>
<!-- .NET Native Shit -->
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
<UseDotNetNativeSharedAssemblyFrameworkPackage>false</UseDotNetNativeSharedAssemblyFrameworkPackage>
<Use64BitCompiler>true</Use64BitCompiler>
<ShortcutGenericAnalysis>true</ShortcutGenericAnalysis>
<OutOfProcPDB>true</OutOfProcPDB>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG;NETFX_CORE;WINDOWS_UWP;CODE_ANALYSIS;CODE_ANALYSIS;MAIL</DefineConstants>
<NoWarn>
</NoWarn>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<Optimize>true</Optimize>
<NoWarn>;2008</NoWarn>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<!-- .NET Native Shit -->
<UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
<UseDotNetNativeSharedAssemblyFrameworkPackage>false</UseDotNetNativeSharedAssemblyFrameworkPackage>
<Use64BitCompiler>true</Use64BitCompiler>
<OutOfProcPDB>true</OutOfProcPDB>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AdaptiveTriggerLibrary">
<Version>1.2.2</Version>
</PackageReference>
<PackageReference Include="ColorHashSharp">
<Version>1.0.0</Version>
</PackageReference>
<PackageReference Include="CommunityToolkit.Common">
<Version>8.3.2</Version>
</PackageReference>
<PackageReference Include="CommunityToolkit.Diagnostics">
<Version>8.3.2</Version>
</PackageReference>
<PackageReference Include="CommunityToolkit.Labs.Uwp.Controls.MarkdownTextBlock">
<Version>0.1.240917-build.1755</Version>
</PackageReference>
<PackageReference Include="CommunityToolkit.Mvvm">
<Version>8.3.2</Version>
</PackageReference>
<PackageReference Include="CommunityToolkit.Uwp.Animations">
<Version>8.1.240916</Version>
</PackageReference>
<PackageReference Include="CommunityToolkit.Uwp.Behaviors">
<Version>8.1.240916</Version>
</PackageReference>
<PackageReference Include="CommunityToolkit.Uwp.Controls.Segmented">
<Version>8.1.240916</Version>
</PackageReference>
<PackageReference Include="CommunityToolkit.Uwp.Controls.SettingsControls">
<Version>8.1.240916</Version>
</PackageReference>
<PackageReference Include="CommunityToolkit.Uwp.Controls.Sizers">
<Version>8.1.240916</Version>
</PackageReference>
<PackageReference Include="CommunityToolkit.Uwp.Controls.TabbedCommandBar">
<Version>8.1.240916</Version>
</PackageReference>
<PackageReference Include="CommunityToolkit.Uwp.Controls.TokenizingTextBox">
<Version>8.1.240916</Version>
</PackageReference>
<PackageReference Include="CommunityToolkit.Uwp.Extensions">
<Version>8.1.240916</Version>
</PackageReference>
<PackageReference Include="EmailValidation">
<Version>1.2.0</Version>
</PackageReference>
<PackageReference Include="Microsoft.AppCenter.Analytics">
<Version>5.0.6</Version>
</PackageReference>
<PackageReference Include="Microsoft.AppCenter.Crashes">
<Version>5.0.6</Version>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.DependencyInjection">
<Version>8.0.1</Version>
</PackageReference>
<PackageReference Include="Microsoft.Identity.Client">
<Version>4.66.2</Version>
</PackageReference>
<PackageReference Include="Microsoft.Net.Native.Compiler">
<Version>2.2.12-rel-33220-00</Version>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.NETCore.UniversalWindowsPlatform">
<Version>6.2.14</Version>
</PackageReference>
<PackageReference Include="Microsoft.UI.Xaml">
<Version>2.8.6</Version>
</PackageReference>
<PackageReference Include="Microsoft.Xaml.Behaviors.Uwp.Managed">
<Version>2.0.1</Version>
</PackageReference>
<PackageReference Include="Nito.AsyncEx">
<Version>5.1.2</Version>
</PackageReference>
<PackageReference Include="Serilog">
<Version>4.1.0</Version>
</PackageReference>
<PackageReference Include="Serilog.Exceptions">
<Version>8.4.0</Version>
</PackageReference>
<PackageReference Include="sqlite-net-pcl">
<Version>1.9.172</Version>
</PackageReference>
<PackageReference Include="Win2D.uwp">
<Version>1.28.0</Version>
</PackageReference>
</ItemGroup>
<ItemGroup>
<Compile Include="Activation\DefaultActivationHandler.cs" />
<Compile Include="Activation\FileActivationHandler.cs" />
<Compile Include="Activation\ProtocolActivationHandler.cs" />
<Compile Include="Activation\ToastNotificationActivationHandler.cs" />
<Compile Include="Behaviors\BindableCommandBarBehavior.cs" />
<Compile Include="Behaviors\CreateMailNavigationItemBehavior.cs" />
<Compile Include="Controls\AccountNavigationItem.cs" />
<Compile Include="Controls\SettingsMenuItemControl.cs" />
<Compile Include="Controls\Advanced\WinoListView.cs" />
<Compile Include="Controls\WinoExpander.cs" />
<Compile Include="Controls\WinoSwipeControlItems.cs" />
<Compile Include="Dialogs\AccountReorderDialog.xaml.cs">
<DependentUpon>AccountReorderDialog.xaml</DependentUpon>
</Compile>
<Compile Include="Dialogs\MessageSourceDialog.xaml.cs">
<DependentUpon>MessageSourceDialog.xaml</DependentUpon>
</Compile>
<Compile Include="Dialogs\MoveMailDialog.xaml.cs">
<DependentUpon>MoveMailDialog.xaml</DependentUpon>
</Compile>
<Compile Include="Dialogs\SignatureEditorDialog.xaml.cs">
<DependentUpon>SignatureEditorDialog.xaml</DependentUpon>
</Compile>
<Compile Include="Dialogs\NewImapSetupDialog.xaml.cs">
<DependentUpon>NewImapSetupDialog.xaml</DependentUpon>
</Compile>
<Compile Include="Dialogs\CreateAccountAliasDialog.xaml.cs">
<DependentUpon>CreateAccountAliasDialog.xaml</DependentUpon>
</Compile>
<Compile Include="Dialogs\SystemFolderConfigurationDialog.xaml.cs">
<DependentUpon>SystemFolderConfigurationDialog.xaml</DependentUpon>
</Compile>
<Compile Include="GlobalSuppressions.cs" />
<Compile Include="MenuFlyouts\AccountSelectorFlyout.cs" />
<Compile Include="MenuFlyouts\FolderOperationFlyout.cs" />
<Compile Include="MenuFlyouts\FolderOperationMenuFlyoutItem.cs" />
<Compile Include="MenuFlyouts\MailOperationFlyout.cs" />
<Compile Include="MenuFlyouts\MailOperationMenuFlyoutItem.cs" />
<Compile Include="MenuFlyouts\WinoOperationFlyout.cs" />
<Compile Include="MenuFlyouts\WinoOperationFlyoutItem.cs" />
<Compile Include="MenuFlyouts\FilterMenuFlyout.cs" />
<Compile Include="Controls\ImagePreviewControl.cs" />
<Compile Include="Controls\MailItemDisplayInformationControl.xaml.cs">
<DependentUpon>MailItemDisplayInformationControl.xaml</DependentUpon>
</Compile>
<Compile Include="MenuFlyouts\MoveButtonFlyout.cs" />
<Compile Include="Selectors\AccountProviderViewModelTemplateSelector.cs" />
<Compile Include="Selectors\AccountReorderTemplateSelector.cs" />
<Compile Include="Selectors\MailItemContainerStyleSelector.cs" />
<Compile Include="Selectors\MailItemDisplayModePreviewTemplateSelector.cs" />
<Compile Include="Selectors\MailItemDisplaySelector.cs" />
<Compile Include="Services\DialogService.cs" />
<Compile Include="Services\MailAuthenticatorConfiguration.cs" />
<Compile Include="Services\NavigationService.cs" />
<Compile Include="Services\ProviderService.cs" />
<Compile Include="Services\SettingsBuilderService.cs" />
<Compile Include="Styles\WinoExpanderStyle.xaml.cs">
<DependentUpon>WinoExpanderStyle.xaml</DependentUpon>
</Compile>
<Compile Include="Views\AboutPage.xaml.cs">
<DependentUpon>AboutPage.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Abstract\AboutPageAbstract.cs" />
<Compile Include="Views\Abstract\AccountDetailsPageAbstract.cs" />
<Compile Include="Views\Abstract\AccountManagementPageAbstract.cs" />
<Compile Include="Views\Abstract\AliasManagementPageAbstract.cs" />
<Compile Include="Views\Abstract\AppPreferencesPageAbstract.cs" />
<Compile Include="Views\Abstract\AppShellAbstract.cs" />
<Compile Include="Views\Abstract\ComposePageAbstract.cs" />
<Compile Include="Views\Abstract\IdlePageAbstract.cs" />
<Compile Include="Views\Abstract\LanguageTimePageAbstract.cs" />
<Compile Include="Views\Abstract\MailListPageAbstract.cs" />
<Compile Include="Views\Abstract\MailRenderingPageAbstract.cs" />
<Compile Include="Views\Abstract\MergedAccountDetailsPageAbstract.cs" />
<Compile Include="Views\Abstract\MessageListPageAbstract.cs" />
<Compile Include="Views\Abstract\PersonalizationPageAbstract.cs" />
<Compile Include="Views\Abstract\ReadComposePanePageAbstract.cs" />
<Compile Include="Views\Abstract\SignatureManagementPageAbstract.cs" />
<Compile Include="Views\Abstract\WelcomePageAbstract.cs" />
<Compile Include="Views\Account\AccountDetailsPage.xaml.cs">
<DependentUpon>AccountDetailsPage.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Account\AccountManagementPage.xaml.cs">
<DependentUpon>AccountManagementPage.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Account\MergedAccountDetailsPage.xaml.cs">
<DependentUpon>MergedAccountDetailsPage.xaml</DependentUpon>
</Compile>
<Compile Include="Views\ComposePage.xaml.cs">
<DependentUpon>ComposePage.xaml</DependentUpon>
</Compile>
<Compile Include="Views\IdlePage.xaml.cs">
<DependentUpon>IdlePage.xaml</DependentUpon>
</Compile>
<Compile Include="Views\ImapSetup\AdvancedImapSetupPage.xaml.cs">
<DependentUpon>AdvancedImapSetupPage.xaml</DependentUpon>
</Compile>
<Compile Include="Views\ImapSetup\ImapConnectionFailedPage.xaml.cs">
<DependentUpon>ImapConnectionFailedPage.xaml</DependentUpon>
</Compile>
<Compile Include="Views\ImapSetup\PreparingImapFoldersPage.xaml.cs">
<DependentUpon>PreparingImapFoldersPage.xaml</DependentUpon>
</Compile>
<Compile Include="Views\ImapSetup\TestingImapConnectionPage.xaml.cs">
<DependentUpon>TestingImapConnectionPage.xaml</DependentUpon>
</Compile>
<Compile Include="Views\ImapSetup\WelcomeImapSetupPage.xaml.cs">
<DependentUpon>WelcomeImapSetupPage.xaml</DependentUpon>
</Compile>
<Compile Include="Views\MailListPage.xaml.cs">
<DependentUpon>MailListPage.xaml</DependentUpon>
</Compile>
<Compile Include="Views\MailRenderingPage.xaml.cs">
<DependentUpon>MailRenderingPage.xaml</DependentUpon>
</Compile>
<Compile Include="Views\PersonalizationPage.xaml.cs">
<DependentUpon>PersonalizationPage.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Settings\AppPreferencesPage.xaml.cs">
<DependentUpon>AppPreferencesPage.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Settings\LanguageTimePage.xaml.cs">
<DependentUpon>LanguageTimePage.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Settings\MessageListPage.xaml.cs">
<DependentUpon>MessageListPage.xaml</DependentUpon>
</Compile>
<Compile Include="AppShell.xaml.cs">
<DependentUpon>AppShell.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Settings\ReadComposePanePage.xaml.cs">
<DependentUpon>ReadComposePanePage.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Settings\AliasManagementPage.xaml.cs">
<DependentUpon>AliasManagementPage.xaml</DependentUpon>
</Compile>
<Compile Include="Views\Settings\SignatureManagementPage.xaml.cs">
<DependentUpon>SignatureManagementPage.xaml</DependentUpon>
</Compile>
<Compile Include="Views\WelcomePage.xaml.cs">
<DependentUpon>WelcomePage.xaml</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<Compile Include="App.xaml.cs">
<DependentUpon>App.xaml</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<Page Include="Controls\MailItemDisplayInformationControl.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Dialogs\AccountReorderDialog.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Dialogs\MessageSourceDialog.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Dialogs\MoveMailDialog.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Dialogs\SignatureEditorDialog.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Dialogs\NewImapSetupDialog.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Dialogs\CreateAccountAliasDialog.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Dialogs\SystemFolderConfigurationDialog.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Styles\ImagePreviewControl.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Styles\ItemContainerStyles.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Styles\WinoExpanderStyle.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Views\AboutPage.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Views\Account\AccountDetailsPage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\Account\AccountManagementPage.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Views\Account\MergedAccountDetailsPage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\ComposePage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\IdlePage.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Views\ImapSetup\AdvancedImapSetupPage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\ImapSetup\ImapConnectionFailedPage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\ImapSetup\PreparingImapFoldersPage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\ImapSetup\TestingImapConnectionPage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\ImapSetup\WelcomeImapSetupPage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\MailListPage.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Views\MailRenderingPage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\PersonalizationPage.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Views\Settings\AppPreferencesPage.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Views\Settings\LanguageTimePage.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Views\Settings\MessageListPage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="AppShell.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Views\Settings\ReadComposePanePage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\Settings\AliasManagementPage.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Views\Settings\SignatureManagementPage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\WelcomePage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup>
<AppxManifest Include="Package.appxmanifest">
<SubType>Designer</SubType>
</AppxManifest>
</ItemGroup>
<ItemGroup>
<Content Include="Assets\BadgeLogo.scale-100.png" />
<Content Include="Assets\BadgeLogo.scale-125.png" />
<Content Include="Assets\BadgeLogo.scale-150.png" />
<Content Include="Assets\BadgeLogo.scale-200.png" />
<Content Include="Assets\BadgeLogo.scale-400.png" />
<Content Include="Assets\EML\eml.png" />
<Content Include="Assets\LargeTile.scale-100.png" />
<Content Include="Assets\LargeTile.scale-125.png" />
<Content Include="Assets\LargeTile.scale-150.png" />
<Content Include="Assets\LargeTile.scale-200.png" />
<Content Include="Assets\LargeTile.scale-400.png" />
<Content Include="Assets\NotificationIcons\delete.png" />
<Content Include="Assets\NotificationIcons\dismiss.png" />
<Content Include="Assets\NotificationIcons\markread.png" />
<Content Include="Assets\NotificationIcons\profile-dark.png" />
<Content Include="Assets\NotificationIcons\profile-light.png" />
<Content Include="Assets\SmallTile.scale-100.png" />
<Content Include="Assets\SmallTile.scale-125.png" />
<Content Include="Assets\SmallTile.scale-150.png" />
<Content Include="Assets\SmallTile.scale-200.png" />
<Content Include="Assets\SmallTile.scale-400.png" />
<Content Include="Assets\SplashScreen.scale-100.png" />
<Content Include="Assets\SplashScreen.scale-125.png" />
<Content Include="Assets\SplashScreen.scale-150.png" />
<Content Include="Assets\SplashScreen.scale-400.png" />
<Content Include="Assets\Square150x150Logo.scale-100.png" />
<Content Include="Assets\Square150x150Logo.scale-125.png" />
<Content Include="Assets\Square150x150Logo.scale-150.png" />
<Content Include="Assets\Square150x150Logo.scale-400.png" />
<Content Include="Assets\Square44x44Logo.altform-lightunplated_targetsize-16.png" />
<Content Include="Assets\Square44x44Logo.altform-lightunplated_targetsize-24.png" />
<Content Include="Assets\Square44x44Logo.altform-lightunplated_targetsize-256.png" />
<Content Include="Assets\Square44x44Logo.altform-lightunplated_targetsize-32.png" />
<Content Include="Assets\Square44x44Logo.altform-lightunplated_targetsize-48.png" />
<Content Include="Assets\Square44x44Logo.altform-unplated_targetsize-16.png" />
<Content Include="Assets\Square44x44Logo.altform-unplated_targetsize-256.png" />
<Content Include="Assets\Square44x44Logo.altform-unplated_targetsize-32.png" />
<Content Include="Assets\Square44x44Logo.altform-unplated_targetsize-48.png" />
<Content Include="Assets\Square44x44Logo.scale-100.png" />
<Content Include="Assets\Square44x44Logo.scale-125.png" />
<Content Include="Assets\Square44x44Logo.scale-150.png" />
<Content Include="Assets\Square44x44Logo.scale-400.png" />
<Content Include="Assets\Square44x44Logo.targetsize-16.png" />
<Content Include="Assets\Square44x44Logo.targetsize-24.png" />
<Content Include="Assets\Square44x44Logo.targetsize-256.png" />
<Content Include="Assets\Square44x44Logo.targetsize-32.png" />
<Content Include="Assets\Square44x44Logo.targetsize-48.png" />
<Content Include="Assets\StoreLogo.scale-100.png" />
<Content Include="Assets\StoreLogo.scale-125.png" />
<Content Include="Assets\StoreLogo.scale-150.png" />
<Content Include="Assets\StoreLogo.scale-200.png" />
<Content Include="Assets\StoreLogo.scale-400.png" />
<Content Include="Assets\Thumbnails\airbnb.com.png" />
<Content Include="Assets\Thumbnails\apple.com.png" />
<Content Include="Assets\Thumbnails\google.com.png" />
<Content Include="Assets\Thumbnails\microsoft.com.png" />
<Content Include="Assets\Thumbnails\steampowered.com.png" />
<Content Include="Assets\Thumbnails\youtube.com.png" />
<Content Include="Assets\Wide310x150Logo.scale-100.png" />
<Content Include="Assets\Wide310x150Logo.scale-125.png" />
<Content Include="Assets\Wide310x150Logo.scale-150.png" />
<Content Include="Assets\Wide310x150Logo.scale-400.png" />
<Content Include="JS\libs\darkreader.js" />
<Content Include="JS\editor.html" />
<Content Include="JS\editor.js" />
<Content Include="JS\global.css" />
<Content Include="JS\libs\jodit.min.css" />
<Content Include="JS\libs\jodit.min.js" />
<Content Include="JS\libs\linkify-element.min.js" />
<Content Include="JS\libs\linkify.min.js" />
<Content Include="JS\reader.html" />
<Content Include="Assets\ReleaseNotes\190.md" />
<None Include="Package.StoreAssociation.xml" />
<Content Include="Properties\Default.rd.xml" />
<Content Include="Assets\SplashScreen.scale-200.png" />
<Content Include="Assets\Square150x150Logo.scale-200.png" />
<Content Include="Assets\Square44x44Logo.scale-200.png" />
<Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
<Content Include="Assets\Wide310x150Logo.scale-200.png" />
<None Include="Wino.Mail_TemporaryKey.pfx" />
</ItemGroup>
<ItemGroup>
<Content Include="Assets\Thumbnails\uber.com.png" />
</ItemGroup>
<ItemGroup>
<ApplicationDefinition Include="App.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Wino.BackgroundTasks\Wino.BackgroundTasks.csproj">
<Project>{d9ef0f59-f5f2-4d6c-a5ba-84043d8f3e08}</Project>
<Name>Wino.BackgroundTasks</Name>
</ProjectReference>
<ProjectReference Include="..\Wino.Core.Domain\Wino.Core.Domain.csproj">
<Project>{CF3312E5-5DA0-4867-9945-49EA7598AF1F}</Project>
<Name>Wino.Core.Domain</Name>
</ProjectReference>
<ProjectReference Include="..\Wino.Core.UWP\Wino.Core.UWP.csproj">
<Project>{395f19ba-1e42-495c-9db5-1a6f537fccb8}</Project>
<Name>Wino.Core.UWP</Name>
</ProjectReference>
<ProjectReference Include="..\Wino.Core.ViewModels\Wino.Core.ViewModels.csproj">
<Project>{53723ae8-7e7e-4d54-adab-0a6033255cc8}</Project>
<Name>Wino.Core.ViewModels</Name>
</ProjectReference>
<ProjectReference Include="..\Wino.Mail.ViewModels\Wino.Mail.ViewModels.csproj">
<Project>{d62f1c03-da57-4709-a640-0283296a8e66}</Project>
<Name>Wino.Mail.ViewModels</Name>
</ProjectReference>
<ProjectReference Include="..\Wino.Messages\Wino.Messaging.csproj">
<Project>{0c307d7e-256f-448c-8265-5622a812fbcc}</Project>
<Name>Wino.Messaging</Name>
</ProjectReference>
<ProjectReference Include="..\Wino.Services\Wino.Services.csproj">
<Project>{4000a374-59fe-4400-acf6-d40473becd73}</Project>
<Name>Wino.Services</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<SDKReference Include="WindowsDesktop, Version=10.0.22621.0">
<Name>Windows Desktop Extensions for the UWP</Name>
</SDKReference>
</ItemGroup>
<ItemGroup />
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' ">
<VisualStudioVersion>14.0</VisualStudioVersion>
</PropertyGroup>
<Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net9.0-windows10.0.26100.0</TargetFramework>
<TargetPlatformMinVersion>10.0.18362.0</TargetPlatformMinVersion>
<UseUwp>true</UseUwp>
<Platforms>x86;x64;arm64</Platforms>
<RuntimeIdentifiers>win-x86;win-x64;win-arm64</RuntimeIdentifiers>
<DefaultLanguage>en-US</DefaultLanguage>
<!--<PublishAot>true</PublishAot>-->
<PublishProfile>win-$(Platform).pubxml</PublishProfile>
<DisableRuntimeMarshalling>true</DisableRuntimeMarshalling>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<GenerateAppInstallerFile>True</GenerateAppInstallerFile>
<AppxPackageSigningEnabled>True</AppxPackageSigningEnabled>
<AppxPackageSigningTimestampDigestAlgorithm>SHA256</AppxPackageSigningTimestampDigestAlgorithm>
</PropertyGroup>
<ItemGroup>
<Compile Remove="BundleArtifacts\**" />
<EmbeddedResource Remove="BundleArtifacts\**" />
<None Remove="BundleArtifacts\**" />
<Page Remove="BundleArtifacts\**" />
</ItemGroup>
<ItemGroup>
<PRIResource Remove="BundleArtifacts\**" />
</ItemGroup>
<ItemGroup>
<None Remove="Assets\EML\eml.png" />
<None Remove="Assets\NotificationIcons\delete.png" />
<None Remove="Assets\NotificationIcons\dismiss.png" />
<None Remove="Assets\NotificationIcons\markread.png" />
<None Remove="Assets\NotificationIcons\profile-dark.png" />
<None Remove="Assets\NotificationIcons\profile-light.png" />
<None Remove="Assets\ReleaseNotes\190.md" />
<None Remove="Assets\Thumbnails\airbnb.com.png" />
<None Remove="Assets\Thumbnails\apple.com.png" />
<None Remove="Assets\Thumbnails\google.com.png" />
<None Remove="Assets\Thumbnails\microsoft.com.png" />
<None Remove="Assets\Thumbnails\steampowered.com.png" />
<None Remove="Assets\Thumbnails\uber.com.png" />
<None Remove="Assets\Thumbnails\youtube.com.png" />
<None Remove="JS\editor.html" />
<None Remove="JS\editor.js" />
<None Remove="JS\global.css" />
<None Remove="JS\libs\darkreader.js" />
<None Remove="JS\libs\jodit.min.css" />
<None Remove="JS\libs\jodit.min.js" />
<None Remove="JS\libs\linkify-element.min.js" />
<None Remove="JS\libs\linkify.min.js" />
<None Remove="JS\reader.html" />
</ItemGroup>
<ItemGroup>
<Content Include="Assets\EML\eml.png" />
<Content Include="Assets\NotificationIcons\delete.png" />
<Content Include="Assets\NotificationIcons\dismiss.png" />
<Content Include="Assets\NotificationIcons\markread.png" />
<Content Include="Assets\NotificationIcons\profile-dark.png" />
<Content Include="Assets\NotificationIcons\profile-light.png" />
<Content Include="Assets\ReleaseNotes\190.md" />
<Content Include="Assets\Thumbnails\airbnb.com.png" />
<Content Include="Assets\Thumbnails\apple.com.png" />
<Content Include="Assets\Thumbnails\google.com.png" />
<Content Include="Assets\Thumbnails\microsoft.com.png" />
<Content Include="Assets\Thumbnails\steampowered.com.png" />
<Content Include="Assets\Thumbnails\uber.com.png" />
<Content Include="Assets\Thumbnails\youtube.com.png" />
<Content Include="JS\editor.html" />
<Content Include="JS\editor.js" />
<Content Include="JS\global.css" />
<Content Include="JS\libs\darkreader.js" />
<Content Include="JS\libs\jodit.min.css" />
<Content Include="JS\libs\jodit.min.js" />
<Content Include="JS\libs\linkify-element.min.js" />
<Content Include="JS\libs\linkify.min.js" />
<Content Include="JS\reader.html" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="ColorHashSharp" />
<PackageReference Include="CommunityToolkit.Common" />
<PackageReference Include="CommunityToolkit.Diagnostics" />
<PackageReference Include="CommunityToolkit.Labs.Uwp.Controls.MarkdownTextBlock" />
<PackageReference Include="CommunityToolkit.Mvvm" />
<PackageReference Include="CommunityToolkit.Uwp.Animations" />
<PackageReference Include="CommunityToolkit.Uwp.Behaviors" />
<PackageReference Include="CommunityToolkit.Uwp.Controls.Segmented" />
<PackageReference Include="CommunityToolkit.Uwp.Controls.SettingsControls" />
<PackageReference Include="CommunityToolkit.Uwp.Controls.Sizers" />
<PackageReference Include="CommunityToolkit.Uwp.Controls.TabbedCommandBar" />
<PackageReference Include="CommunityToolkit.Uwp.Controls.TokenizingTextBox" />
<PackageReference Include="CommunityToolkit.Uwp.Extensions" />
<PackageReference Include="EmailValidation" />
<PackageReference Include="Microsoft.AppCenter.Analytics" />
<PackageReference Include="Microsoft.AppCenter.Crashes" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" />
<PackageReference Include="Microsoft.Identity.Client" />
<PackageReference Include="Microsoft.UI.Xaml" />
<PackageReference Include="Microsoft.Xaml.Behaviors.Uwp.Managed" />
<PackageReference Include="Nito.AsyncEx" />
<PackageReference Include="Serilog" />
<PackageReference Include="Serilog.Exceptions" />
<PackageReference Include="sqlite-net-pcl" />
<PackageReference Include="Win2D.uwp" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Wino.Core.Domain\Wino.Core.Domain.csproj" />
<ProjectReference Include="..\Wino.Core.UWP\Wino.Core.UWP.csproj" />
<ProjectReference Include="..\Wino.Core.ViewModels\Wino.Core.ViewModels.csproj" />
<ProjectReference Include="..\Wino.Mail.ViewModels\Wino.Mail.ViewModels.csproj" />
<ProjectReference Include="..\Wino.Services\Wino.Services.csproj" />
</ItemGroup>
</Project>
-25
View File
@@ -1,25 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.002.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wino.Mail", "Wino.Mail.csproj", "{0B5C02DC-6B11-437C-9C46-EAB6430C3155}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{0B5C02DC-6B11-437C-9C46-EAB6430C3155}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0B5C02DC-6B11-437C-9C46-EAB6430C3155}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0B5C02DC-6B11-437C-9C46-EAB6430C3155}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0B5C02DC-6B11-437C-9C46-EAB6430C3155}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {0254B19E-9B52-4594-9F8A-8616BE750243}
EndGlobalSection
EndGlobal