From 49c70efdd5fb88281ab08bbcb48e4a2d96270764 Mon Sep 17 00:00:00 2001 From: GreemDev Date: Mon, 10 Nov 2025 19:14:19 -0600 Subject: [PATCH] UI: App Library: automatically remove nonexistent autoload/game dirs from the configuration upon load. --- .../ConfigurationState.Migration.cs | 47 +++++++++++++++++-- .../UI/ViewModels/SettingsViewModel.cs | 1 - 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs index f296629e4..a324ec5e6 100644 --- a/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs @@ -11,6 +11,7 @@ using Ryujinx.Common.Logging; using Ryujinx.HLE; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using RyuLogger = Ryujinx.Common.Logging.Logger; @@ -28,6 +29,7 @@ namespace Ryujinx.Ava.Systems.Configuration RyuLogger.Warning?.Print(LogClass.Application, $"Unsupported configuration version {cff.Version}, loading default."); LoadDefault(); + return; } foreach ((int newVersion, Action migratorFunction) @@ -167,14 +169,53 @@ namespace Ryujinx.Ava.Systems.Configuration DirtyHacks hacks = new(cff.DirtyHacks ?? []); Hacks.Xc2MenuSoftlockFix.Value = hacks.IsEnabled(DirtyHack.Xc2MenuSoftlockFix); - } - if (configurationFileUpdated) + List existingDirs = []; + bool didPathUpdate = false; + + { // Game dirs + foreach (var gameDir in UI.GameDirs.Value) + { + if (Directory.Exists(gameDir)) + { + existingDirs.Add(gameDir); + } + else + { + RyuLogger.Warning?.Print(LogClass.Configuration, $"Path '{gameDir}' seems to no longer exist. Removing it from game directory configuration."); + didPathUpdate = true; + } + } + + UI.GameDirs.Value = existingDirs.ToList(); + } + + existingDirs.Clear(); + + { // Autoload dirs + foreach (var autoloadDir in UI.AutoloadDirs.Value) + { + if (Directory.Exists(autoloadDir)) + { + existingDirs.Add(autoloadDir); + } + else + { + RyuLogger.Warning?.Print(LogClass.Configuration, $"Path '{autoloadDir}' seems to no longer exist. Removing it from auto load directory configuration."); + didPathUpdate = true; + } + } + + UI.AutoloadDirs.Value = existingDirs.ToList(); + } + + if (configurationFileUpdated || didPathUpdate) { ToFileFormat().SaveConfig(configurationFilePath); - RyuLogger.Notice.Print(LogClass.Application, $"Configuration file updated to version {ConfigurationFileFormat.CurrentVersion}"); + if (configurationFileUpdated) + RyuLogger.Notice.Print(LogClass.Application, $"Configuration file updated to version {ConfigurationFileFormat.CurrentVersion}"); } } diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index f0dddc027..c590e0cb0 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -481,7 +481,6 @@ namespace Ryujinx.Ava.UI.ViewModels if (Program.PreviewerDetached) { Task.Run(LoadTimeZones); - } }