From 49574a99f51f52bdde482a11a718adcb3b1be227 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Mestre?= Date: Tue, 22 Oct 2024 20:48:59 -0300 Subject: [PATCH] Added a command line option (-c, --config) to load a configuration file through the command line parameters (#59) --- src/Ryujinx.Gtk3/Program.cs | 5 ++++ .../Helper/CommandLineState.cs | 25 +++++++++++++++++++ src/Ryujinx/Program.cs | 5 ++++ 3 files changed, 35 insertions(+) diff --git a/src/Ryujinx.Gtk3/Program.cs b/src/Ryujinx.Gtk3/Program.cs index 2d350374bf..f4c1a9d74b 100644 --- a/src/Ryujinx.Gtk3/Program.cs +++ b/src/Ryujinx.Gtk3/Program.cs @@ -165,6 +165,11 @@ static void Main(string[] args) ? appDataConfigurationPath : null; + if (!string.IsNullOrEmpty(CommandLineState.OverrideConfigFile) && File.Exists(CommandLineState.OverrideConfigFile)) + { + ConfigurationPath = CommandLineState.OverrideConfigFile; + } + if (ConfigurationPath == null) { // No configuration, we load the default values and save it to disk diff --git a/src/Ryujinx.UI.Common/Helper/CommandLineState.cs b/src/Ryujinx.UI.Common/Helper/CommandLineState.cs index ae0e4d904a..7f8854c361 100644 --- a/src/Ryujinx.UI.Common/Helper/CommandLineState.cs +++ b/src/Ryujinx.UI.Common/Helper/CommandLineState.cs @@ -1,5 +1,6 @@ using Ryujinx.Common.Logging; using System.Collections.Generic; +using System.IO; namespace Ryujinx.UI.Common.Helper { @@ -16,6 +17,7 @@ public static class CommandLineState public static string LaunchPathArg { get; private set; } public static string LaunchApplicationId { get; private set; } public static bool StartFullscreenArg { get; private set; } + public static string OverrideConfigFile { get; private set; } public static void ParseArguments(string[] args) { @@ -96,6 +98,29 @@ public static void ParseArguments(string[] args) case "--software-gui": OverrideHardwareAcceleration = false; break; + case "-c": + case "--config": + if (i + 1 >= args.Length) + { + Logger.Error?.Print(LogClass.Application, $"Invalid option '{arg}'"); + + continue; + } + + string configFile = args[++i]; + + if (Path.GetExtension(configFile).ToLower() != ".json") + { + Logger.Error?.Print(LogClass.Application, $"Invalid option '{arg}'"); + + continue; + } + + OverrideConfigFile = configFile; + + arguments.Add(arg); + arguments.Add(args[i]); + break; default: LaunchPathArg = arg; break; diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs index 6c83cedcf3..c1e5a4d42c 100644 --- a/src/Ryujinx/Program.cs +++ b/src/Ryujinx/Program.cs @@ -150,6 +150,11 @@ public static void ReloadConfig() ConfigurationPath = appDataConfigurationPath; } + if (!string.IsNullOrEmpty(CommandLineState.OverrideConfigFile) && File.Exists(CommandLineState.OverrideConfigFile)) + { + ConfigurationPath = CommandLineState.OverrideConfigFile; + } + if (ConfigurationPath == null) { // No configuration, we load the default values and save it to disk