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>
<Capabilities>
<rescap:Capability Name="confirmAppClose" />
<Capability Name="internetClient" />
<Capability Name="privateNetworkClientServer"/>
<Capability Name="internetClientServer"/>

View File

@@ -17,6 +17,7 @@ using MimeKit;
using Windows.ApplicationModel.DataTransfer;
using Windows.Foundation;
using Windows.Storage;
using Windows.UI.Core.Preview;
using Windows.UI.ViewManagement.Core;
using Windows.UI.Xaml;
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 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()
{
InitializeComponent();
_navManagerPreview.CloseRequested += OnClose;
Environment.SetEnvironmentVariable("WEBVIEW2_DEFAULT_BACKGROUND_COLOR", "00FFFFFF");
Environment.SetEnvironmentVariable("WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS", "--enable-features=OverlayScrollbar,msOverlayScrollbarWinStyle,msOverlayScrollbarWinStyleAnimation");
@@ -378,7 +381,7 @@ namespace Wino.Views
public async Task UpdateEditorThemeAsync()
{
await DOMLoadedTask.Task;
await _domLoadedTask.Task;
if (IsComposerDarkMode)
{
@@ -394,7 +397,7 @@ namespace Wino.Views
private async Task RenderInternalAsync(string htmlBody)
{
await DOMLoadedTask.Task;
await _domLoadedTask.Task;
await UpdateEditorThemeAsync();
await InitializeEditorAsync();
@@ -437,8 +440,8 @@ namespace Wino.Views
private void DisposeDisposables()
{
if (Disposables.Any())
Disposables.ForEach(a => a.Dispose());
if (_disposables.Any())
_disposables.ForEach(a => a.Dispose());
}
protected override async void OnNavigatedTo(NavigationEventArgs e)
@@ -452,9 +455,9 @@ namespace Wino.Views
DisposeDisposables();
Disposables.Add(GetSuggestionBoxDisposable(ToBox));
Disposables.Add(GetSuggestionBoxDisposable(CCBox));
Disposables.Add(GetSuggestionBoxDisposable(BccBox));
_disposables.Add(GetSuggestionBoxDisposable(ToBox));
_disposables.Add(GetSuggestionBoxDisposable(CCBox));
_disposables.Add(GetSuggestionBoxDisposable(BccBox));
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)
{
@@ -678,10 +681,21 @@ namespace Wino.Views
base.OnNavigatingFrom(e);
FocusManager.GotFocus -= GlobalFocusManagerGotFocus;
_navManagerPreview.CloseRequested -= OnClose;
await ViewModel.UpdateMimeChangesAsync();
DisposeDisposables();
DisposeWebView2();
}
private async void OnClose(object sender, SystemNavigationCloseRequestedPreviewEventArgs e)
{
var deferral = e.GetDeferral();
try
{
await ViewModel.UpdateMimeChangesAsync();
}
finally { deferral.Complete(); }
}
}
}