From f98adef9e9194ddd45a0dab186fbae9a765967ac Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Mon, 3 Nov 2025 09:26:04 -0700 Subject: [PATCH 01/18] Update Dependencies - Remove package references that are already included transitively - Change Avalonia.ReactiveUI to ReactiveUI.Avalonia --- Source/AppScaffolding/AppScaffolding.csproj | 2 +- .../ApplicationServices/ApplicationServices.csproj | 2 +- Source/AudibleUtilities/AudibleUtilities.csproj | 2 +- Source/DataLayer.Postgres/DataLayer.Postgres.csproj | 4 ++-- Source/DataLayer.Sqlite/DataLayer.Sqlite.csproj | 6 +++--- Source/DataLayer/DataLayer.csproj | 6 +++--- Source/FileManager/FileManager.csproj | 2 +- Source/HangoverAvalonia/HangoverAvalonia.csproj | 10 ++++------ Source/HangoverAvalonia/Program.cs | 2 +- Source/LibationAvalonia/LibationAvalonia.csproj | 13 ++++++------- Source/LibationAvalonia/Program.cs | 2 +- Source/LibationAvalonia/Views/MainWindow.axaml.cs | 2 +- .../LibationFileManager/LibationFileManager.csproj | 2 +- Source/LibationUiBase/LibationUiBase.csproj | 4 ---- Source/LoadByOS/MacOSConfigApp/fileicon | 4 ++-- .../WindowsConfigApp/WindowsConfigApp.csproj | 2 +- .../_Tests/AssertionHelper/AssertionHelper.csproj | 4 ++-- .../AudibleUtilities.Tests.csproj | 2 +- .../FileLiberator.Tests/FileLiberator.Tests.csproj | 2 +- .../FileManager.Tests/FileManager.Tests.csproj | 2 +- .../LibationFileManager.Tests.csproj | 2 +- .../LibationSearchEngine.Tests.csproj | 2 +- 22 files changed, 36 insertions(+), 43 deletions(-) diff --git a/Source/AppScaffolding/AppScaffolding.csproj b/Source/AppScaffolding/AppScaffolding.csproj index 046a0e54..25cff2d7 100644 --- a/Source/AppScaffolding/AppScaffolding.csproj +++ b/Source/AppScaffolding/AppScaffolding.csproj @@ -8,7 +8,7 @@ - + diff --git a/Source/ApplicationServices/ApplicationServices.csproj b/Source/ApplicationServices/ApplicationServices.csproj index 8bd2a9c7..c1453c2c 100644 --- a/Source/ApplicationServices/ApplicationServices.csproj +++ b/Source/ApplicationServices/ApplicationServices.csproj @@ -6,7 +6,7 @@ - + diff --git a/Source/AudibleUtilities/AudibleUtilities.csproj b/Source/AudibleUtilities/AudibleUtilities.csproj index 506a45d6..d1ba96fe 100644 --- a/Source/AudibleUtilities/AudibleUtilities.csproj +++ b/Source/AudibleUtilities/AudibleUtilities.csproj @@ -6,7 +6,7 @@ - + diff --git a/Source/DataLayer.Postgres/DataLayer.Postgres.csproj b/Source/DataLayer.Postgres/DataLayer.Postgres.csproj index d23ec26b..4ee33922 100644 --- a/Source/DataLayer.Postgres/DataLayer.Postgres.csproj +++ b/Source/DataLayer.Postgres/DataLayer.Postgres.csproj @@ -12,12 +12,12 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Source/DataLayer.Sqlite/DataLayer.Sqlite.csproj b/Source/DataLayer.Sqlite/DataLayer.Sqlite.csproj index f1546adc..e1128635 100644 --- a/Source/DataLayer.Sqlite/DataLayer.Sqlite.csproj +++ b/Source/DataLayer.Sqlite/DataLayer.Sqlite.csproj @@ -12,12 +12,12 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Source/DataLayer/DataLayer.csproj b/Source/DataLayer/DataLayer.csproj index 916c545e..e2c3699a 100644 --- a/Source/DataLayer/DataLayer.csproj +++ b/Source/DataLayer/DataLayer.csproj @@ -13,12 +13,12 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Source/FileManager/FileManager.csproj b/Source/FileManager/FileManager.csproj index 8077a239..03d96351 100644 --- a/Source/FileManager/FileManager.csproj +++ b/Source/FileManager/FileManager.csproj @@ -6,7 +6,7 @@ - + diff --git a/Source/HangoverAvalonia/HangoverAvalonia.csproj b/Source/HangoverAvalonia/HangoverAvalonia.csproj index da86862c..fdff7595 100644 --- a/Source/HangoverAvalonia/HangoverAvalonia.csproj +++ b/Source/HangoverAvalonia/HangoverAvalonia.csproj @@ -70,13 +70,11 @@ - - - + - - - + + + diff --git a/Source/HangoverAvalonia/Program.cs b/Source/HangoverAvalonia/Program.cs index 037d6c57..fc42d4e9 100644 --- a/Source/HangoverAvalonia/Program.cs +++ b/Source/HangoverAvalonia/Program.cs @@ -1,5 +1,5 @@ using Avalonia; -using Avalonia.ReactiveUI; +using ReactiveUI.Avalonia; using System; namespace HangoverAvalonia diff --git a/Source/LibationAvalonia/LibationAvalonia.csproj b/Source/LibationAvalonia/LibationAvalonia.csproj index 1e5e0f7d..e49689cd 100644 --- a/Source/LibationAvalonia/LibationAvalonia.csproj +++ b/Source/LibationAvalonia/LibationAvalonia.csproj @@ -73,13 +73,12 @@ - - - - - - - + + + + + + diff --git a/Source/LibationAvalonia/Program.cs b/Source/LibationAvalonia/Program.cs index ef5d6c61..da21f786 100644 --- a/Source/LibationAvalonia/Program.cs +++ b/Source/LibationAvalonia/Program.cs @@ -5,7 +5,7 @@ using System.Threading.Tasks; using ApplicationServices; using AppScaffolding; using Avalonia; -using Avalonia.ReactiveUI; +using ReactiveUI.Avalonia; using LibationFileManager; #nullable enable diff --git a/Source/LibationAvalonia/Views/MainWindow.axaml.cs b/Source/LibationAvalonia/Views/MainWindow.axaml.cs index d2347fa9..9541683f 100644 --- a/Source/LibationAvalonia/Views/MainWindow.axaml.cs +++ b/Source/LibationAvalonia/Views/MainWindow.axaml.cs @@ -1,7 +1,7 @@ using AudibleUtilities; using Avalonia.Controls; using Avalonia.Input; -using Avalonia.ReactiveUI; +using ReactiveUI.Avalonia; using Avalonia.Threading; using DataLayer; using FileManager; diff --git a/Source/LibationFileManager/LibationFileManager.csproj b/Source/LibationFileManager/LibationFileManager.csproj index 46f16f48..2fee3460 100644 --- a/Source/LibationFileManager/LibationFileManager.csproj +++ b/Source/LibationFileManager/LibationFileManager.csproj @@ -5,7 +5,7 @@ - + diff --git a/Source/LibationUiBase/LibationUiBase.csproj b/Source/LibationUiBase/LibationUiBase.csproj index 941d23d7..d77c954c 100644 --- a/Source/LibationUiBase/LibationUiBase.csproj +++ b/Source/LibationUiBase/LibationUiBase.csproj @@ -8,10 +8,6 @@ false - - - - diff --git a/Source/LoadByOS/MacOSConfigApp/fileicon b/Source/LoadByOS/MacOSConfigApp/fileicon index 813945aa..c390e1e8 100644 --- a/Source/LoadByOS/MacOSConfigApp/fileicon +++ b/Source/LoadByOS/MacOSConfigApp/fileicon @@ -12,7 +12,7 @@ kTHIS_NAME=${BASH_SOURCE##*/} kTHIS_HOMEPAGE='https://github.com/mklement0/fileicon' -kTHIS_VERSION='v0.3.3' # NOTE: This assignment is automatically updated by `make version VER=` - DO keep the 'v' prefix. +kTHIS_VERSION='v0.3.4' # NOTE: This assignment is automatically updated by `make version VER=` - DO keep the 'v' prefix. unset CDPATH # To prevent unpredictable `cd` behavior. @@ -85,7 +85,7 @@ printUsage() { case $1 in --version) # Output version number and exit, if requested. - ver="v0.3.3"; echo "$kTHIS_NAME $kTHIS_VERSION"$'\nFor license information and more, visit '"$kTHIS_HOMEPAGE"; exit 0 + ver="v0.3.4"; echo "$kTHIS_NAME $kTHIS_VERSION"$'\nFor license information and more, visit '"$kTHIS_HOMEPAGE"; exit 0 ;; -h|--help) # Print usage information and exit. diff --git a/Source/LoadByOS/WindowsConfigApp/WindowsConfigApp.csproj b/Source/LoadByOS/WindowsConfigApp/WindowsConfigApp.csproj index 5380de98..80d4acd4 100644 --- a/Source/LoadByOS/WindowsConfigApp/WindowsConfigApp.csproj +++ b/Source/LoadByOS/WindowsConfigApp/WindowsConfigApp.csproj @@ -26,7 +26,7 @@ - + diff --git a/Source/_Tests/AssertionHelper/AssertionHelper.csproj b/Source/_Tests/AssertionHelper/AssertionHelper.csproj index 7f3ad5da..b3f660e6 100644 --- a/Source/_Tests/AssertionHelper/AssertionHelper.csproj +++ b/Source/_Tests/AssertionHelper/AssertionHelper.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/Source/_Tests/AudibleUtilities.Tests/AudibleUtilities.Tests.csproj b/Source/_Tests/AudibleUtilities.Tests/AudibleUtilities.Tests.csproj index 76ac21e6..1ad37171 100644 --- a/Source/_Tests/AudibleUtilities.Tests/AudibleUtilities.Tests.csproj +++ b/Source/_Tests/AudibleUtilities.Tests/AudibleUtilities.Tests.csproj @@ -6,7 +6,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Source/_Tests/FileLiberator.Tests/FileLiberator.Tests.csproj b/Source/_Tests/FileLiberator.Tests/FileLiberator.Tests.csproj index 8f0982e2..732623e1 100644 --- a/Source/_Tests/FileLiberator.Tests/FileLiberator.Tests.csproj +++ b/Source/_Tests/FileLiberator.Tests/FileLiberator.Tests.csproj @@ -6,7 +6,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Source/_Tests/FileManager.Tests/FileManager.Tests.csproj b/Source/_Tests/FileManager.Tests/FileManager.Tests.csproj index b2973d87..da7e0dc9 100644 --- a/Source/_Tests/FileManager.Tests/FileManager.Tests.csproj +++ b/Source/_Tests/FileManager.Tests/FileManager.Tests.csproj @@ -7,7 +7,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Source/_Tests/LibationFileManager.Tests/LibationFileManager.Tests.csproj b/Source/_Tests/LibationFileManager.Tests/LibationFileManager.Tests.csproj index 2e9c8b73..b7fbad79 100644 --- a/Source/_Tests/LibationFileManager.Tests/LibationFileManager.Tests.csproj +++ b/Source/_Tests/LibationFileManager.Tests/LibationFileManager.Tests.csproj @@ -7,7 +7,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Source/_Tests/LibationSearchEngine.Tests/LibationSearchEngine.Tests.csproj b/Source/_Tests/LibationSearchEngine.Tests/LibationSearchEngine.Tests.csproj index 28b5897c..e44097f0 100644 --- a/Source/_Tests/LibationSearchEngine.Tests/LibationSearchEngine.Tests.csproj +++ b/Source/_Tests/LibationSearchEngine.Tests/LibationSearchEngine.Tests.csproj @@ -7,7 +7,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From fa238a09150d17f6da5b4850f44690d15859e79e Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Mon, 3 Nov 2025 09:35:12 -0700 Subject: [PATCH 02/18] Use xplat webview control for Audible login - Use Avalonia-based webview control for Audible login with Chardonnay - Remove webview interfaces from IInteropFunctions - Remove Microsoft.Web.WebView2 package from WindowsConfigApp - Add Microsoft.Web.WebView2 to LibationWinForms - Remove all other login forms except the external login dialog (fallback in case webview doesn't work). The AudibleApi login with username/password doesn't work anymore. Need to use external browser login method. --- Scripts/Bundle_Debian.sh | 1 + Scripts/Bundle_Redhat.sh | 2 +- Source/LibationAvalonia/AvaloniaUtils.cs | 5 - .../Controls/NativeWebView.cs | 176 ------------------ .../Dialogs/Login/ApprovalNeededDialog.axaml | 34 ---- .../Login/ApprovalNeededDialog.axaml.cs | 22 --- .../Dialogs/Login/AvaloniaLoginCallback.cs | 60 +----- .../Dialogs/Login/AvaloniaLoginChoiceEager.cs | 101 +++++++--- .../Dialogs/Login/CaptchaDialog.axaml | 72 ------- .../Dialogs/Login/CaptchaDialog.axaml.cs | 120 ------------ .../Dialogs/Login/LoginCallbackDialog.axaml | 38 ---- .../Login/LoginCallbackDialog.axaml.cs | 42 ----- .../Login/LoginChoiceEagerDialog.axaml | 70 ------- .../Login/LoginChoiceEagerDialog.axaml.cs | 50 ----- .../Dialogs/Login/MfaDialog.axaml | 19 -- .../Dialogs/Login/MfaDialog.axaml.cs | 137 -------------- .../Dialogs/Login/WebLoginDialog.axaml | 12 -- .../Dialogs/Login/WebLoginDialog.axaml.cs | 55 ------ .../Dialogs/Login/_2faCodeDialog.axaml | 44 ----- .../Dialogs/Login/_2faCodeDialog.axaml.cs | 35 ---- .../LibationAvalonia/LibationAvalonia.csproj | 4 +- .../LibationFileManager/IInteropFunctions.cs | 39 ---- .../NullInteropFunctions.cs | 1 - .../Login/ApprovalNeededDialog.Designer.cs | 83 --------- .../Dialogs/Login/ApprovalNeededDialog.cs | 21 --- .../Dialogs/Login/ApprovalNeededDialog.resx | 61 ------ .../Dialogs/Login/CaptchaDialog.Designer.cs | 131 ------------- .../Dialogs/Login/CaptchaDialog.cs | 48 ----- .../Dialogs/Login/CaptchaDialog.resx | 61 ------ .../Login/LoginCallbackDialog.Designer.cs | 121 ------------ .../Dialogs/Login/LoginCallbackDialog.cs | 37 ---- .../Dialogs/Login/LoginCallbackDialog.resx | 60 ------ .../Login/LoginChoiceEagerDialog.Designer.cs | 158 ---------------- .../Dialogs/Login/LoginChoiceEagerDialog.cs | 53 ------ .../Dialogs/Login/LoginChoiceEagerDialog.resx | 60 ------ .../Dialogs/Login/MfaDialog.Designer.cs | 113 ----------- .../Dialogs/Login/MfaDialog.cs | 92 --------- .../Dialogs/Login/MfaDialog.resx | 61 ------ .../Dialogs/Login/WebLoginDialog.cs | 48 ++--- .../Dialogs/Login/WinformLoginBase.cs | 23 --- .../Dialogs/Login/WinformLoginCallback.cs | 54 +----- .../Dialogs/Login/WinformLoginChoiceEager.cs | 44 ++--- .../Dialogs/Login/_2faCodeDialog.Designer.cs | 104 ----------- .../Dialogs/Login/_2faCodeDialog.cs | 26 --- .../Dialogs/Login/_2faCodeDialog.resx | 61 ------ .../LibationWinForms/LibationWinForms.csproj | 3 +- .../LoadByOS/LinuxConfigApp/Libation.desktop | 2 +- .../LoadByOS/LinuxConfigApp/LinuxInterop.cs | 1 - .../LoadByOS/MacOSConfigApp/MacOSInterop.cs | 1 - .../MacOSConfigApp/MacWebViewAdapter.cs | 134 ------------- .../LoadByOS/WindowsConfigApp/WinInterop.cs | 4 - .../WindowsConfigApp/WindowsConfigApp.csproj | 5 - .../WindowsWebView2Adapter.cs | 114 ------------ 53 files changed, 137 insertions(+), 2786 deletions(-) delete mode 100644 Source/LibationAvalonia/Controls/NativeWebView.cs delete mode 100644 Source/LibationAvalonia/Dialogs/Login/ApprovalNeededDialog.axaml delete mode 100644 Source/LibationAvalonia/Dialogs/Login/ApprovalNeededDialog.axaml.cs delete mode 100644 Source/LibationAvalonia/Dialogs/Login/CaptchaDialog.axaml delete mode 100644 Source/LibationAvalonia/Dialogs/Login/CaptchaDialog.axaml.cs delete mode 100644 Source/LibationAvalonia/Dialogs/Login/LoginCallbackDialog.axaml delete mode 100644 Source/LibationAvalonia/Dialogs/Login/LoginCallbackDialog.axaml.cs delete mode 100644 Source/LibationAvalonia/Dialogs/Login/LoginChoiceEagerDialog.axaml delete mode 100644 Source/LibationAvalonia/Dialogs/Login/LoginChoiceEagerDialog.axaml.cs delete mode 100644 Source/LibationAvalonia/Dialogs/Login/MfaDialog.axaml delete mode 100644 Source/LibationAvalonia/Dialogs/Login/MfaDialog.axaml.cs delete mode 100644 Source/LibationAvalonia/Dialogs/Login/WebLoginDialog.axaml delete mode 100644 Source/LibationAvalonia/Dialogs/Login/WebLoginDialog.axaml.cs delete mode 100644 Source/LibationAvalonia/Dialogs/Login/_2faCodeDialog.axaml delete mode 100644 Source/LibationAvalonia/Dialogs/Login/_2faCodeDialog.axaml.cs delete mode 100644 Source/LibationWinForms/Dialogs/Login/ApprovalNeededDialog.Designer.cs delete mode 100644 Source/LibationWinForms/Dialogs/Login/ApprovalNeededDialog.cs delete mode 100644 Source/LibationWinForms/Dialogs/Login/ApprovalNeededDialog.resx delete mode 100644 Source/LibationWinForms/Dialogs/Login/CaptchaDialog.Designer.cs delete mode 100644 Source/LibationWinForms/Dialogs/Login/CaptchaDialog.cs delete mode 100644 Source/LibationWinForms/Dialogs/Login/CaptchaDialog.resx delete mode 100644 Source/LibationWinForms/Dialogs/Login/LoginCallbackDialog.Designer.cs delete mode 100644 Source/LibationWinForms/Dialogs/Login/LoginCallbackDialog.cs delete mode 100644 Source/LibationWinForms/Dialogs/Login/LoginCallbackDialog.resx delete mode 100644 Source/LibationWinForms/Dialogs/Login/LoginChoiceEagerDialog.Designer.cs delete mode 100644 Source/LibationWinForms/Dialogs/Login/LoginChoiceEagerDialog.cs delete mode 100644 Source/LibationWinForms/Dialogs/Login/LoginChoiceEagerDialog.resx delete mode 100644 Source/LibationWinForms/Dialogs/Login/MfaDialog.Designer.cs delete mode 100644 Source/LibationWinForms/Dialogs/Login/MfaDialog.cs delete mode 100644 Source/LibationWinForms/Dialogs/Login/MfaDialog.resx delete mode 100644 Source/LibationWinForms/Dialogs/Login/WinformLoginBase.cs delete mode 100644 Source/LibationWinForms/Dialogs/Login/_2faCodeDialog.Designer.cs delete mode 100644 Source/LibationWinForms/Dialogs/Login/_2faCodeDialog.cs delete mode 100644 Source/LibationWinForms/Dialogs/Login/_2faCodeDialog.resx delete mode 100644 Source/LoadByOS/MacOSConfigApp/MacWebViewAdapter.cs delete mode 100644 Source/LoadByOS/WindowsConfigApp/WindowsWebView2Adapter.cs diff --git a/Scripts/Bundle_Debian.sh b/Scripts/Bundle_Debian.sh index 3ca7ef13..b69eb76f 100644 --- a/Scripts/Bundle_Debian.sh +++ b/Scripts/Bundle_Debian.sh @@ -113,6 +113,7 @@ Essential: no Priority: optional Maintainer: github.com/rmcrackan Description: liberate your audiobooks +Recommends: libgtk-3-0, libwebkit2gtk-4.1-0 " >> $FOLDER_DEBIAN/control echo "Changing permissions for pre- and post-install files..." diff --git a/Scripts/Bundle_Redhat.sh b/Scripts/Bundle_Redhat.sh index 1b18f1d1..05d27ac6 100644 --- a/Scripts/Bundle_Redhat.sh +++ b/Scripts/Bundle_Redhat.sh @@ -62,7 +62,7 @@ License: GPLv3+ URL: https://github.com/rmcrackan/Libation Source0: https://github.com/rmcrackan/Libation -Requires: bash +Requires: bash gtk3 webkit2gtk4.1 %define __os_install_post %{nil} diff --git a/Source/LibationAvalonia/AvaloniaUtils.cs b/Source/LibationAvalonia/AvaloniaUtils.cs index 4bfc1aa7..82a360ba 100644 --- a/Source/LibationAvalonia/AvaloniaUtils.cs +++ b/Source/LibationAvalonia/AvaloniaUtils.cs @@ -23,11 +23,6 @@ namespace LibationAvalonia ? dialogWindow.ShowDialog(window) : Task.FromResult(DialogResult.None); - public static Task ShowDialogAsync(this Dialogs.Login.WebLoginDialog dialogWindow, Window? owner = null) - => ((owner ?? App.MainWindow) is Window window) - ? dialogWindow.ShowDialog(window) - : Task.FromResult(DialogResult.None); - public static Window? GetParentWindow(this Control control) => control.GetVisualRoot() as Window; diff --git a/Source/LibationAvalonia/Controls/NativeWebView.cs b/Source/LibationAvalonia/Controls/NativeWebView.cs deleted file mode 100644 index 0aad165d..00000000 --- a/Source/LibationAvalonia/Controls/NativeWebView.cs +++ /dev/null @@ -1,176 +0,0 @@ -using Avalonia.Controls; -using Avalonia.Input; -using Avalonia.Platform; -using Avalonia; -using LibationFileManager; -using System; -using System.Threading.Tasks; - -namespace LibationAvalonia.Controls; - -#nullable enable -public class NativeWebView : NativeControlHost, IWebView -{ - private IWebViewAdapter? _webViewAdapter; - private Uri? _delayedSource; - private TaskCompletionSource _webViewReadyCompletion = new(); - - public event EventHandler? NavigationCompleted; - - public event EventHandler? NavigationStarted; - public event EventHandler? DOMContentLoaded; - - public bool CanGoBack => _webViewAdapter?.CanGoBack ?? false; - - public bool CanGoForward => _webViewAdapter?.CanGoForward ?? false; - - public Uri? Source - { - get => _webViewAdapter?.Source ?? throw new InvalidOperationException("Control was not initialized"); - set - { - if (_webViewAdapter is null) - { - _delayedSource = value; - return; - } - _webViewAdapter.Source = value; - } - } - - - public bool GoBack() - { - return _webViewAdapter?.GoBack() ?? throw new InvalidOperationException("Control was not initialized"); - } - - public bool GoForward() - { - return _webViewAdapter?.GoForward() ?? throw new InvalidOperationException("Control was not initialized"); - } - - public Task InvokeScriptAsync(string scriptName) - { - return _webViewAdapter is null - ? throw new InvalidOperationException("Control was not initialized") - : _webViewAdapter.InvokeScriptAsync(scriptName); - } - - public void Navigate(Uri url) - { - (_webViewAdapter ?? throw new InvalidOperationException("Control was not initialized")) - .Navigate(url); - } - - public Task NavigateToString(string text) - { - return (_webViewAdapter ?? throw new InvalidOperationException("Control was not initialized")) - .NavigateToString(text); - } - - public void Refresh() - { - (_webViewAdapter ?? throw new InvalidOperationException("Control was not initialized")) - .Refresh(); - } - - public void Stop() - { - (_webViewAdapter ?? throw new InvalidOperationException("Control was not initialized")) - .Stop(); - } - - public Task WaitForNativeHost() - { - return _webViewReadyCompletion.Task; - } - - private class PlatformHandle : IPlatformHandle - { - public nint Handle { get; init; } - - public string? HandleDescriptor { get; init; } - } - - protected override IPlatformHandle CreateNativeControlCore(IPlatformHandle parent) - { - _webViewAdapter = InteropFactory.Create().CreateWebViewAdapter(); - - if (_webViewAdapter is null) - return base.CreateNativeControlCore(parent); - else - { - SubscribeOnEvents(); - var handle = new PlatformHandle - { - Handle = _webViewAdapter.PlatformHandle.Handle, - HandleDescriptor = _webViewAdapter.PlatformHandle.HandleDescriptor - }; - - if (_delayedSource is not null) - { - _webViewAdapter.Source = _delayedSource; - } - - _webViewReadyCompletion.TrySetResult(); - - return handle; - } - } - - private void SubscribeOnEvents() - { - if (_webViewAdapter is not null) - { - _webViewAdapter.NavigationStarted += WebViewAdapterOnNavigationStarted; - _webViewAdapter.NavigationCompleted += WebViewAdapterOnNavigationCompleted; - _webViewAdapter.DOMContentLoaded += _webViewAdapter_DOMContentLoaded; - } - } - - private void _webViewAdapter_DOMContentLoaded(object? sender, EventArgs e) - { - DOMContentLoaded?.Invoke(this, e); - } - - private void WebViewAdapterOnNavigationStarted(object? sender, WebViewNavigationEventArgs e) - { - NavigationStarted?.Invoke(this, e); - } - - private void WebViewAdapterOnNavigationCompleted(object? sender, WebViewNavigationEventArgs e) - { - NavigationCompleted?.Invoke(this, e); - } - - protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) - { - base.OnPropertyChanged(change); - if (change.Property == BoundsProperty && change.NewValue is Rect rect) - { - var scaling = (float)(VisualRoot?.RenderScaling ?? 1.0f); - _webViewAdapter?.HandleResize((int)(rect.Width * scaling), (int)(rect.Height * scaling), scaling); - } - } - - protected override void OnKeyDown(KeyEventArgs e) - { - if (_webViewAdapter != null) - { - e.Handled = _webViewAdapter.HandleKeyDown((uint)e.Key, (uint)e.KeyModifiers); - } - - base.OnKeyDown(e); - } - - protected override void DestroyNativeControlCore(IPlatformHandle control) - { - if (_webViewAdapter is not null) - { - _webViewReadyCompletion = new TaskCompletionSource(); - _webViewAdapter.NavigationStarted -= WebViewAdapterOnNavigationStarted; - _webViewAdapter.NavigationCompleted -= WebViewAdapterOnNavigationCompleted; - (_webViewAdapter as IDisposable)?.Dispose(); - } - } -} diff --git a/Source/LibationAvalonia/Dialogs/Login/ApprovalNeededDialog.axaml b/Source/LibationAvalonia/Dialogs/Login/ApprovalNeededDialog.axaml deleted file mode 100644 index 8d52c43c..00000000 --- a/Source/LibationAvalonia/Dialogs/Login/ApprovalNeededDialog.axaml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - -