Quellcode durchsuchen

UI: `--install-firmware` startup flag.
Has the normal UI flow, this is just for systems where the file picker doesn't show up.

Evan Husted vor 1 Jahr
Ursprung
Commit
c2ed0fd5fd

+ 1 - 1
Directory.Packages.props

@@ -42,7 +42,7 @@
     <PackageVersion Include="Ryujinx.Graphics.Nvdec.Dependencies" Version="5.0.3-build14" />
     <PackageVersion Include="Ryujinx.Graphics.Vulkan.Dependencies.MoltenVK" Version="1.2.0" />
     <PackageVersion Include="Ryujinx.SDL2-CS" Version="2.30.0-build32" />
-    <PackageVersion Include="Gommon" Version="2.7.1" />
+    <PackageVersion Include="Gommon" Version="2.7.1.1" />
     <PackageVersion Include="securifybv.ShellLink" Version="0.1.0" />
     <PackageVersion Include="Sep" Version="0.6.0" />
     <PackageVersion Include="shaderc.net" Version="0.1.0" />

+ 1 - 1
src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs

@@ -793,7 +793,7 @@ namespace Ryujinx.Ava.UI.ViewModels
             return false;
         }
 
-        private async Task HandleFirmwareInstallation(string filename)
+        public async Task HandleFirmwareInstallation(string filename)
         {
             try
             {

+ 15 - 2
src/Ryujinx/UI/Windows/MainWindow.axaml.cs

@@ -139,8 +139,21 @@ namespace Ryujinx.Ava.UI.Windows
             base.OnApplyTemplate(e);
 
             NotificationHelper.SetNotificationManager(this);
-
-            Executor.ExecuteBackgroundAsync(ShowIntelMacWarningAsync);
+            
+            Executor.ExecuteBackgroundAsync(async () =>
+            {
+                await ShowIntelMacWarningAsync();
+                FilePath firmwarePath = CommandLineState.FirmwareToInstallPathArg;
+                if (firmwarePath is not null)
+                {
+                    if ((firmwarePath.ExistsAsFile && firmwarePath.Extension is "xci" or "zip") ||
+                        firmwarePath.ExistsAsDirectory)
+                        await Dispatcher.UIThread.InvokeAsync(() => 
+                            ViewModel.HandleFirmwareInstallation(firmwarePath));
+                    else
+                        Logger.Notice.Print(LogClass.UI, "Invalid firmware type provided. Path must be a directory, or a .zip or .xci file.");
+                }
+            });
         }
 
         private void OnScalingChanged(object sender, EventArgs e)

+ 15 - 0
src/Ryujinx/Utilities/CommandLineState.cs

@@ -1,3 +1,4 @@
+using Gommon;
 using Ryujinx.Common.Logging;
 using System.Collections.Generic;
 
@@ -13,6 +14,7 @@ namespace Ryujinx.Ava.Utilities
         public static string OverrideBackendThreading { get; private set; }
         public static string OverrideHideCursor { get; private set; }
         public static string BaseDirPathArg { get; private set; }
+        public static FilePath FirmwareToInstallPathArg { get; private set; }
         public static string Profile { get; private set; }
         public static string LaunchPathArg { get; private set; }
         public static string LaunchApplicationId { get; private set; }
@@ -41,6 +43,19 @@ namespace Ryujinx.Ava.Utilities
 
                         BaseDirPathArg = args[++i];
 
+                        arguments.Add(arg);
+                        arguments.Add(args[i]);
+                        break;
+                    case "--install-firmware":
+                        if (i + 1 >= args.Length)
+                        {
+                            Logger.Error?.Print(LogClass.Application, $"Invalid option '{arg}'");
+
+                            continue;
+                        }
+
+                        FirmwareToInstallPathArg = new FilePath(args[++i]);
+
                         arguments.Add(arg);
                         arguments.Add(args[i]);
                         break;