From bd9cbe30c53883a574f3d456a11131eef6a25479 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Kaan=20K=C3=B6se?= Date: Wed, 21 Aug 2024 23:14:59 +0200 Subject: [PATCH] Fixed crashing issue with disposing composing page. --- Wino.Mail.ViewModels/ComposePageViewModel.cs | 9 ++++----- Wino.Mail/Views/ComposePage.xaml.cs | 16 ++++++++++++---- .../Client/Mails/KillChromiumRequested.cs | 7 ------- 3 files changed, 16 insertions(+), 16 deletions(-) delete mode 100644 Wino.Messages/Client/Mails/KillChromiumRequested.cs diff --git a/Wino.Mail.ViewModels/ComposePageViewModel.cs b/Wino.Mail.ViewModels/ComposePageViewModel.cs index fb84b3ae..702ef338 100644 --- a/Wino.Mail.ViewModels/ComposePageViewModel.cs +++ b/Wino.Mail.ViewModels/ComposePageViewModel.cs @@ -214,7 +214,7 @@ namespace Wino.Mail.ViewModels IncludedAttachments.Add(viewModel); } - private async Task UpdateMimeChangesAsync() + public async Task UpdateMimeChangesAsync() { if (isUpdatingMimeBlocked || CurrentMimeMessage == null || ComposingAccount == null || CurrentMailDraftItem == null) return; @@ -338,13 +338,12 @@ namespace Wino.Mail.ViewModels } } - public override async void OnNavigatedFrom(NavigationMode mode, object parameters) + public override void OnNavigatedFrom(NavigationMode mode, object parameters) { base.OnNavigatedFrom(mode, parameters); - await UpdateMimeChangesAsync().ConfigureAwait(false); - - Messenger.Send(new KillChromiumRequested()); + /// Do not put any code here. + /// Make sure to use Page's OnNavigatedTo instead. } public override async void OnNavigatedTo(NavigationMode mode, object parameters) diff --git a/Wino.Mail/Views/ComposePage.xaml.cs b/Wino.Mail/Views/ComposePage.xaml.cs index 663cebf9..9e90ef15 100644 --- a/Wino.Mail/Views/ComposePage.xaml.cs +++ b/Wino.Mail/Views/ComposePage.xaml.cs @@ -39,8 +39,7 @@ namespace Wino.Views public sealed partial class ComposePage : ComposePageAbstract, IRecipient, IRecipient, - IRecipient, - IRecipient + IRecipient { public bool IsComposerDarkMode { @@ -415,7 +414,6 @@ namespace Wino.Views return await ExecuteScriptFunctionAsync("initializeJodit", fonts, composerFont, composerFontSize, readerFont, readerFontSize); } - private void DisposeWebView2() { if (Chromium == null) return; @@ -451,6 +449,7 @@ namespace Wino.Views Disposables.Add(GetSuggestionBoxDisposable(CCBox)); Disposables.Add(GetSuggestionBoxDisposable(BccBox)); + Chromium.Unloaded += Chromium_Unloaded; Chromium.CoreWebView2Initialized -= ChromiumInitialized; Chromium.CoreWebView2Initialized += ChromiumInitialized; @@ -468,6 +467,11 @@ namespace Wino.Views IsComposerDarkMode = underlyingThemeService.IsUnderlyingThemeDark(); } + private void Chromium_Unloaded(object sender, RoutedEventArgs e) + { + + } + private async void ChromiumInitialized(Microsoft.UI.Xaml.Controls.WebView2 sender, Microsoft.UI.Xaml.Controls.CoreWebView2InitializedEventArgs args) { var editorBundlePath = (await ViewModel.NativeAppService.GetEditorBundlePathAsync()).Replace("editor.html", string.Empty); @@ -692,8 +696,12 @@ namespace Wino.Views } } - public void Receive(KillChromiumRequested message) + protected override async void OnNavigatingFrom(NavigatingCancelEventArgs e) { + base.OnNavigatingFrom(e); + + await ViewModel.UpdateMimeChangesAsync(); + DisposeDisposables(); DisposeWebView2(); } diff --git a/Wino.Messages/Client/Mails/KillChromiumRequested.cs b/Wino.Messages/Client/Mails/KillChromiumRequested.cs deleted file mode 100644 index 659adee6..00000000 --- a/Wino.Messages/Client/Mails/KillChromiumRequested.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Wino.Messaging.Client.Mails -{ - /// - /// Terminates all chromum instances. - /// - public record KillChromiumRequested; -}