Added save of drafts when closing app (#546)

This commit is contained in:
Aleh Khantsevich
2025-02-09 10:42:51 +01:00
committed by GitHub
parent ab3f65edfa
commit e8dd8bff44
2 changed files with 25 additions and 10 deletions

View File

@@ -90,6 +90,7 @@
</Applications> </Applications>
<Capabilities> <Capabilities>
<rescap:Capability Name="confirmAppClose" />
<Capability Name="internetClient" /> <Capability Name="internetClient" />
<Capability Name="privateNetworkClientServer"/> <Capability Name="privateNetworkClientServer"/>
<Capability Name="internetClientServer"/> <Capability Name="internetClientServer"/>

View File

@@ -17,6 +17,7 @@ using MimeKit;
using Windows.ApplicationModel.DataTransfer; using Windows.ApplicationModel.DataTransfer;
using Windows.Foundation; using Windows.Foundation;
using Windows.Storage; using Windows.Storage;
using Windows.UI.Core.Preview;
using Windows.UI.ViewManagement.Core; using Windows.UI.ViewManagement.Core;
using Windows.UI.Xaml; using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls;
@@ -48,13 +49,15 @@ namespace Wino.Views
public static readonly DependencyProperty IsComposerDarkModeProperty = DependencyProperty.Register(nameof(IsComposerDarkMode), typeof(bool), typeof(ComposePage), new PropertyMetadata(false, OnIsComposerDarkModeChanged)); public static readonly DependencyProperty IsComposerDarkModeProperty = DependencyProperty.Register(nameof(IsComposerDarkMode), typeof(bool), typeof(ComposePage), new PropertyMetadata(false, OnIsComposerDarkModeChanged));
public WebView2 GetWebView() => Chromium; public WebView2 GetWebView() => Chromium;
private TaskCompletionSource<bool> DOMLoadedTask = new TaskCompletionSource<bool>(); private readonly TaskCompletionSource<bool> _domLoadedTask = new TaskCompletionSource<bool>();
private List<IDisposable> Disposables = new List<IDisposable>(); private readonly List<IDisposable> _disposables = new List<IDisposable>();
private readonly SystemNavigationManagerPreview _navManagerPreview = SystemNavigationManagerPreview.GetForCurrentView();
public ComposePage() public ComposePage()
{ {
InitializeComponent(); InitializeComponent();
_navManagerPreview.CloseRequested += OnClose;
Environment.SetEnvironmentVariable("WEBVIEW2_DEFAULT_BACKGROUND_COLOR", "00FFFFFF"); Environment.SetEnvironmentVariable("WEBVIEW2_DEFAULT_BACKGROUND_COLOR", "00FFFFFF");
Environment.SetEnvironmentVariable("WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS", "--enable-features=OverlayScrollbar,msOverlayScrollbarWinStyle,msOverlayScrollbarWinStyleAnimation"); Environment.SetEnvironmentVariable("WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS", "--enable-features=OverlayScrollbar,msOverlayScrollbarWinStyle,msOverlayScrollbarWinStyleAnimation");
@@ -378,7 +381,7 @@ namespace Wino.Views
public async Task UpdateEditorThemeAsync() public async Task UpdateEditorThemeAsync()
{ {
await DOMLoadedTask.Task; await _domLoadedTask.Task;
if (IsComposerDarkMode) if (IsComposerDarkMode)
{ {
@@ -394,7 +397,7 @@ namespace Wino.Views
private async Task RenderInternalAsync(string htmlBody) private async Task RenderInternalAsync(string htmlBody)
{ {
await DOMLoadedTask.Task; await _domLoadedTask.Task;
await UpdateEditorThemeAsync(); await UpdateEditorThemeAsync();
await InitializeEditorAsync(); await InitializeEditorAsync();
@@ -437,8 +440,8 @@ namespace Wino.Views
private void DisposeDisposables() private void DisposeDisposables()
{ {
if (Disposables.Any()) if (_disposables.Any())
Disposables.ForEach(a => a.Dispose()); _disposables.ForEach(a => a.Dispose());
} }
protected override async void OnNavigatedTo(NavigationEventArgs e) protected override async void OnNavigatedTo(NavigationEventArgs e)
@@ -452,9 +455,9 @@ namespace Wino.Views
DisposeDisposables(); DisposeDisposables();
Disposables.Add(GetSuggestionBoxDisposable(ToBox)); _disposables.Add(GetSuggestionBoxDisposable(ToBox));
Disposables.Add(GetSuggestionBoxDisposable(CCBox)); _disposables.Add(GetSuggestionBoxDisposable(CCBox));
Disposables.Add(GetSuggestionBoxDisposable(BccBox)); _disposables.Add(GetSuggestionBoxDisposable(BccBox));
Chromium.CoreWebView2Initialized -= ChromiumInitialized; Chromium.CoreWebView2Initialized -= ChromiumInitialized;
Chromium.CoreWebView2Initialized += ChromiumInitialized; Chromium.CoreWebView2Initialized += ChromiumInitialized;
@@ -539,7 +542,7 @@ namespace Wino.Views
} }
} }
private void DOMLoaded(CoreWebView2 sender, CoreWebView2DOMContentLoadedEventArgs args) => DOMLoadedTask.TrySetResult(true); private void DOMLoaded(CoreWebView2 sender, CoreWebView2DOMContentLoadedEventArgs args) => _domLoadedTask.TrySetResult(true);
async void IRecipient<CreateNewComposeMailRequested>.Receive(CreateNewComposeMailRequested message) async void IRecipient<CreateNewComposeMailRequested>.Receive(CreateNewComposeMailRequested message)
{ {
@@ -678,10 +681,21 @@ namespace Wino.Views
base.OnNavigatingFrom(e); base.OnNavigatingFrom(e);
FocusManager.GotFocus -= GlobalFocusManagerGotFocus; FocusManager.GotFocus -= GlobalFocusManagerGotFocus;
_navManagerPreview.CloseRequested -= OnClose;
await ViewModel.UpdateMimeChangesAsync(); await ViewModel.UpdateMimeChangesAsync();
DisposeDisposables(); DisposeDisposables();
DisposeWebView2(); DisposeWebView2();
} }
private async void OnClose(object sender, SystemNavigationCloseRequestedPreviewEventArgs e)
{
var deferral = e.GetDeferral();
try
{
await ViewModel.UpdateMimeChangesAsync();
}
finally { deferral.Complete(); }
}
} }
} }