From c4873ca06bc6b075ea9cb0367d9b91741dc48bbe Mon Sep 17 00:00:00 2001 From: GreemDev Date: Sat, 22 Nov 2025 20:33:28 -0600 Subject: [PATCH] move more of the setup wizard logic into the setup wizard itself instead of having some critical logic in a random lambda in MainWindow.axaml.cs --- .../Systems/SetupWizard/BaseSetupWizard.cs | 2 +- .../SetupWizard/RyujinxSetupWizard.Helpers.cs | 2 +- .../UI/SetupWizard/RyujinxSetupWizard.cs | 27 ++++++++++--------- .../RyujinxSetupWizardWindow.axaml.cs | 27 ++++++++++--------- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 6 +---- 5 files changed, 33 insertions(+), 31 deletions(-) diff --git a/src/Ryujinx/Systems/SetupWizard/BaseSetupWizard.cs b/src/Ryujinx/Systems/SetupWizard/BaseSetupWizard.cs index afaf97fad..7da662207 100644 --- a/src/Ryujinx/Systems/SetupWizard/BaseSetupWizard.cs +++ b/src/Ryujinx/Systems/SetupWizard/BaseSetupWizard.cs @@ -22,7 +22,7 @@ namespace Ryujinx.Ava.Systems.SetupWizard .Show(); } - protected SetupWizardPageBuilder NextPage() + protected SetupWizardPageBuilder NextPage() => new(presenter); } } diff --git a/src/Ryujinx/UI/SetupWizard/RyujinxSetupWizard.Helpers.cs b/src/Ryujinx/UI/SetupWizard/RyujinxSetupWizard.Helpers.cs index d0dfb846b..cdec13a4d 100644 --- a/src/Ryujinx/UI/SetupWizard/RyujinxSetupWizard.Helpers.cs +++ b/src/Ryujinx/UI/SetupWizard/RyujinxSetupWizard.Helpers.cs @@ -57,7 +57,7 @@ namespace Ryujinx.Ava.UI.SetupWizard } finally { - mwvm.VirtualFileSystem.ReloadKeySet(); + _mainWindow.VirtualFileSystem.ReloadKeySet(); } return Result.Success; diff --git a/src/Ryujinx/UI/SetupWizard/RyujinxSetupWizard.cs b/src/Ryujinx/UI/SetupWizard/RyujinxSetupWizard.cs index 35aec986a..663bcce87 100644 --- a/src/Ryujinx/UI/SetupWizard/RyujinxSetupWizard.cs +++ b/src/Ryujinx/UI/SetupWizard/RyujinxSetupWizard.cs @@ -1,11 +1,10 @@ -using Avalonia.Controls.Presenters; using Gommon; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Ava.Systems.SetupWizard; using Ryujinx.Ava.UI.Helpers; -using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.SetupWizard.Pages; +using Ryujinx.Ava.UI.Windows; using Ryujinx.Common.Configuration; using Ryujinx.HLE.FileSystem; using System; @@ -14,15 +13,18 @@ using System.Threading.Tasks; namespace Ryujinx.Ava.UI.SetupWizard { - public partial class RyujinxSetupWizard(ContentPresenter presenter, MainWindowViewModel mwvm, Action onClose) - : BaseSetupWizard(presenter) + public partial class RyujinxSetupWizard(RyujinxSetupWizardWindow wizardWindow) + : BaseSetupWizard(wizardWindow.WizardPresenter) { + private readonly MainWindow _mainWindow = RyujinxApp.MainWindow; + private bool _configWasModified = false; - public bool HasFirmware => mwvm.ContentManager.GetCurrentFirmwareVersion() != null; + public bool HasFirmware => _mainWindow.ContentManager.GetCurrentFirmwareVersion() != null; public override async Task Start() { + NotificationHelper.SetNotificationManager(wizardWindow); RyujinxSetupWizardWindow.IsUsingSetupWizard = true; Start: await FirstPage(); @@ -35,9 +37,10 @@ namespace Ryujinx.Ava.UI.SetupWizard if (!await SetupFirmware()) goto Keys; - Return: - onClose(); + NotificationHelper.SetNotificationManager(_mainWindow); + wizardWindow.Close(); + RyujinxSetupWizardWindow.IsUsingSetupWizard = false; if (_configWasModified) ConfigurationState.Instance.ToFileFormat().SaveConfig(Program.GlobalConfigurationPath); @@ -45,7 +48,7 @@ namespace Ryujinx.Ava.UI.SetupWizard private async ValueTask SetupKeys() { - if (!mwvm.VirtualFileSystem.HasKeySet) + if (!_mainWindow.VirtualFileSystem.HasKeySet) { Retry: bool result = await NextPage() @@ -73,7 +76,7 @@ namespace Ryujinx.Ava.UI.SetupWizard { if (!HasFirmware) { - if (!mwvm.VirtualFileSystem.HasKeySet) + if (!_mainWindow.VirtualFileSystem.HasKeySet) { NotificationHelper.ShowError("Keys still seem to not be installed. Please try again."); return false; @@ -93,8 +96,8 @@ namespace Ryujinx.Ava.UI.SetupWizard try { - mwvm.ContentManager.InstallFirmware(fwvm.FirmwareSourcePath); - SystemVersion installedFwVer = mwvm.ContentManager.GetCurrentFirmwareVersion(); + _mainWindow.ContentManager.InstallFirmware(fwvm.FirmwareSourcePath); + SystemVersion installedFwVer = _mainWindow.ContentManager.GetCurrentFirmwareVersion(); if (installedFwVer != null) { NotificationHelper.ShowInformation( @@ -110,7 +113,7 @@ namespace Ryujinx.Ava.UI.SetupWizard "\nPlease check the log or try again." ); } - mwvm.RefreshFirmwareStatus(installedFwVer, allowNullVersion: true); + _mainWindow.ViewModel.RefreshFirmwareStatus(installedFwVer, allowNullVersion: true); // Purge Applet Cache. diff --git a/src/Ryujinx/UI/SetupWizard/RyujinxSetupWizardWindow.axaml.cs b/src/Ryujinx/UI/SetupWizard/RyujinxSetupWizardWindow.axaml.cs index 27fdcd26a..de72e9ab2 100644 --- a/src/Ryujinx/UI/SetupWizard/RyujinxSetupWizardWindow.axaml.cs +++ b/src/Ryujinx/UI/SetupWizard/RyujinxSetupWizardWindow.axaml.cs @@ -1,19 +1,19 @@ +using Avalonia.Controls; using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Ava.Systems.SetupWizard; -using Ryujinx.Ava.UI.Helpers; -using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.Windows; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using System; using System.IO; +using System.Threading.Tasks; namespace Ryujinx.Ava.UI.SetupWizard { public partial class RyujinxSetupWizardWindow : StyleableAppWindow { public static bool IsUsingSetupWizard { get; set; } - + public RyujinxSetupWizardWindow() : base(useCustomTitleBar: true) { InitializeComponent(); @@ -24,18 +24,22 @@ namespace Ryujinx.Ava.UI.SetupWizard } } - public static RyujinxSetupWizardWindow CreateWindow(MainWindowViewModel mwvm, out BaseSetupWizard setupWizard) + public static Task ShowAsync(Window owner = null) + { + Task windowTask = ShowAsync( + CreateWindow(out BaseSetupWizard wiz), + owner ?? RyujinxApp.MainWindow + ); + _ = wiz.Start(); + return windowTask; + } + + public static RyujinxSetupWizardWindow CreateWindow(out BaseSetupWizard setupWizard) { RyujinxSetupWizardWindow window = new(); - window.DataContext = setupWizard = new RyujinxSetupWizard(window.WizardPresenter, mwvm, () => - { - NotificationHelper.SetNotificationManager(RyujinxApp.MainWindow); - window.Close(); - IsUsingSetupWizard = false; - }); + window.DataContext = setupWizard = new RyujinxSetupWizard(window); window.Height = 600; window.Width = 750; - NotificationHelper.SetNotificationManager(window); return window; } @@ -82,4 +86,3 @@ namespace Ryujinx.Ava.UI.SetupWizard } } } - diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index a73b69a74..bef4452c2 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -146,11 +146,7 @@ namespace Ryujinx.Ava.UI.Windows if (Program.IsFirstStart && RyujinxSetupWizardWindow.CanShowSetupWizard) { - Task windowTask = ShowAsync( - RyujinxSetupWizardWindow.CreateWindow(ViewModel, out BaseSetupWizard wiz), - this); - _ = wiz.Start(); - await windowTask; + await RyujinxSetupWizardWindow.ShowAsync(this); } });