From 1baaa1c365ac91939a1a2c5051254818851f6856 Mon Sep 17 00:00:00 2001 From: Coxxs <58-coxxs@users.noreply.git.ryujinx.app> Date: Wed, 12 Nov 2025 08:23:05 -0600 Subject: [PATCH] Preserve and rename the configuration file when it is deemed invalid (ryubing/ryujinx!216) See merge request ryubing/ryujinx!216 --- src/Ryujinx/Program.cs | 2 + .../Configuration/ConfigurationFileFormat.cs | 39 +++++++++++++++++++ .../ConfigurationState.Migration.cs | 2 + 3 files changed, 43 insertions(+) diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs index 7dcfdb838..abab3daca 100644 --- a/src/Ryujinx/Program.cs +++ b/src/Ryujinx/Program.cs @@ -233,6 +233,8 @@ namespace Ryujinx.Ava { Logger.Warning?.PrintMsg(LogClass.Application, $"Failed to load config! Loading the default config instead.\nFailed config location: {ConfigurationPath}"); + ConfigurationFileFormat.RenameInvalidConfigFile(ConfigurationPath); + ConfigurationState.Instance.LoadDefault(); } } diff --git a/src/Ryujinx/Systems/Configuration/ConfigurationFileFormat.cs b/src/Ryujinx/Systems/Configuration/ConfigurationFileFormat.cs index 98a8aba27..f0fafb4e0 100644 --- a/src/Ryujinx/Systems/Configuration/ConfigurationFileFormat.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationFileFormat.cs @@ -6,7 +6,9 @@ using Ryujinx.Common.Configuration.Multiplayer; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; using Ryujinx.HLE; +using System; using System.Collections.Generic; +using System.IO; namespace Ryujinx.Ava.Systems.Configuration { @@ -510,6 +512,43 @@ namespace Ryujinx.Ava.Systems.Configuration } } + /// + /// Renames the configuration file when it is deemed invalid + /// + /// The path to the invalid JSON configuration file + /// The path of the renamed invalid JSON configuration file, or null if the rename failed + public static string RenameInvalidConfigFile(string path) + { + if (string.IsNullOrWhiteSpace(path) || !File.Exists(path)) + { + return null; + } + + try + { + string directory = Path.GetDirectoryName(path) ?? string.Empty; + string originalFileName = Path.GetFileName(path); + if (string.IsNullOrWhiteSpace(originalFileName)) + { + return null; + } + string renamedFileName = $"{originalFileName}.{DateTime.Now:yyyy-MM-dd_HH-mm-ss}.invalid"; + string renamedPath = string.IsNullOrEmpty(directory) ? renamedFileName : Path.Combine(directory, renamedFileName); + + File.Move(path, renamedPath, overwrite: false); + + Logger.Warning?.PrintMsg(LogClass.Application, $"Invalid configuration renamed to: {renamedPath}"); + + return renamedPath; + } + catch (Exception ex) + { + Logger.Error?.PrintMsg(LogClass.Application, $"Failed to rename invalid configuration file \"{path}\": {ex}"); + + return null; + } + } + /// /// Save a configuration file to disk /// diff --git a/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs index a324ec5e6..163b7e98f 100644 --- a/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs @@ -28,6 +28,8 @@ namespace Ryujinx.Ava.Systems.Configuration { RyuLogger.Warning?.Print(LogClass.Application, $"Unsupported configuration version {cff.Version}, loading default."); + ConfigurationFileFormat.RenameInvalidConfigFile(configurationFilePath); + LoadDefault(); return; }