use a custom key install function with notifications instead of the normal one with dialogs

This commit is contained in:
GreemDev 2025-11-21 01:05:43 -06:00
parent 50c3dd0573
commit 4857fde4fe
4 changed files with 89 additions and 2 deletions

View file

@ -4,6 +4,7 @@ using Avalonia.Controls.Notifications;
using Avalonia.Threading; using Avalonia.Threading;
using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Common.Locale;
using Ryujinx.Common; using Ryujinx.Common;
using Ryujinx.UI.SetupWizard;
using System; using System;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Threading; using System.Threading;
@ -48,6 +49,8 @@ namespace Ryujinx.Ava.UI.Helpers
host.Closing += (sender, args) => host.Closing += (sender, args) =>
{ {
if (sender is RyujinxSetupWizardWindow) return;
if (maybeAsyncWorkQueue.IsValueCreated) if (maybeAsyncWorkQueue.IsValueCreated)
{ {
maybeAsyncWorkQueue.Value.Dispose(); maybeAsyncWorkQueue.Value.Dispose();

View file

@ -0,0 +1,76 @@
using DynamicData;
using Gommon;
using Ryujinx.Ava.Common.Locale;
using Ryujinx.Ava.UI.Helpers;
using Ryujinx.Common.Configuration;
using Ryujinx.Common.Logging;
using Ryujinx.HLE.FileSystem;
using System;
using System.IO;
using System.Threading;
namespace Ryujinx.Ava.UI.SetupWizard
{
public partial class RyujinxSetupWizard
{
private Result InstallKeys(string directory)
{
try
{
string systemDirectory = AppDataManager.KeysDirPath;
if (AppDataManager.Mode == AppDataManager.LaunchMode.UserProfile &&
Directory.Exists(AppDataManager.KeysDirPathUser))
{
systemDirectory = AppDataManager.KeysDirPathUser;
}
Logger.Info?.Print(LogClass.Application, $"Installing keys from {directory}");
Thread thread = new(() =>
{
try
{
ContentManager.InstallKeys(directory, systemDirectory);
NotificationHelper.ShowInformation(
title: LocaleManager.Instance[LocaleKeys.RyujinxInfo],
text: LocaleManager.Instance[LocaleKeys.DialogKeysInstallerKeysInstallSuccessMessage]);
}
catch (Exception ex)
{
string message = ex.Message;
if (ex is FormatException)
{
message = LocaleManager.Instance.UpdateAndGetDynamicValue(
LocaleKeys.DialogKeysInstallerKeysNotFoundErrorMessage, directory);
}
NotificationHelper.ShowError(message);
}
finally
{
mwvm.VirtualFileSystem.ReloadKeySet();
}
}) { Name = "GUI.KeysInstallerThread" };
thread.Start();
}
catch (MissingKeyException ex)
{
NotificationHelper.ShowError(ex.ToString());
return Result.Failure(NoKeysFoundInFolder.Shared);
}
catch (Exception ex)
{
return Result.Failure(new MessageError(ex.Message));
}
return Result.Success;
}
}
public struct NoKeysFoundInFolder : IErrorState
{
public static readonly NoKeysFoundInFolder Shared = new();
}
}

View file

@ -1,4 +1,5 @@
using Avalonia.Controls.Presenters; using Avalonia.Controls.Presenters;
using Gommon;
using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Common.Locale;
using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Ava.Systems.Configuration;
using Ryujinx.Ava.Systems.SetupWizard; using Ryujinx.Ava.Systems.SetupWizard;
@ -11,7 +12,7 @@ using System.Threading.Tasks;
namespace Ryujinx.Ava.UI.SetupWizard namespace Ryujinx.Ava.UI.SetupWizard
{ {
public class RyujinxSetupWizard(ContentPresenter presenter, MainWindowViewModel mwvm, Action onClose) : BaseSetupWizard(presenter) public partial class RyujinxSetupWizard(ContentPresenter presenter, MainWindowViewModel mwvm, Action onClose) : BaseSetupWizard(presenter)
{ {
private bool _configWasModified = false; private bool _configWasModified = false;
@ -39,7 +40,11 @@ namespace Ryujinx.Ava.UI.SetupWizard
if (!Directory.Exists(kpvm.KeysFolderPath)) if (!Directory.Exists(kpvm.KeysFolderPath))
goto Retry; goto Retry;
await mwvm.HandleKeysInstallation(kpvm.KeysFolderPath); Result installResult = InstallKeys(kpvm.KeysFolderPath);
if (!installResult.IsSuccess)
{
goto Retry;
}
} }
Firmware: Firmware:

View file

@ -1,6 +1,7 @@
using Ryujinx.Ava; using Ryujinx.Ava;
using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Ava.Systems.Configuration;
using Ryujinx.Ava.Systems.SetupWizard; using Ryujinx.Ava.Systems.SetupWizard;
using Ryujinx.Ava.UI.Helpers;
using Ryujinx.Ava.UI.SetupWizard; using Ryujinx.Ava.UI.SetupWizard;
using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.ViewModels;
using Ryujinx.Ava.UI.Windows; using Ryujinx.Ava.UI.Windows;
@ -30,11 +31,13 @@ namespace Ryujinx.UI.SetupWizard
RyujinxSetupWizardWindow window = new(); RyujinxSetupWizardWindow window = new();
window.DataContext = setupWizard = new RyujinxSetupWizard(window.WizardPresenter, mwvm, () => window.DataContext = setupWizard = new RyujinxSetupWizard(window.WizardPresenter, mwvm, () =>
{ {
NotificationHelper.SetNotificationManager(RyujinxApp.MainWindow);
window.Close(); window.Close();
IsUsingSetupWizard = false; IsUsingSetupWizard = false;
}); });
window.Height = 600; window.Height = 600;
window.Width = 750; window.Width = 750;
NotificationHelper.SetNotificationManager(window);
return window; return window;
} }