From 6d3695c29449752e096bedd44c200e41caee7d32 Mon Sep 17 00:00:00 2001 From: status102 <102887808+status102@users.noreply.github.com> Date: Mon, 19 Jan 2026 23:40:20 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=BB=98=E8=AE=A4=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Configuration/Factory/ConfigFactory.cs | 19 +++++++++++++++---- src/MaaWpfGui/Configuration/Root.cs | 14 +++----------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/MaaWpfGui/Configuration/Factory/ConfigFactory.cs b/src/MaaWpfGui/Configuration/Factory/ConfigFactory.cs index 39021e9caa..6f03b481b3 100644 --- a/src/MaaWpfGui/Configuration/Factory/ConfigFactory.cs +++ b/src/MaaWpfGui/Configuration/Factory/ConfigFactory.cs @@ -20,6 +20,7 @@ using System.IO; using System.Linq; using System.Text.Encodings.Web; using System.Text.Json; +using System.Text.Json.Nodes; using System.Text.Json.Serialization; using System.Text.Unicode; using System.Threading; @@ -167,9 +168,14 @@ public static class ConfigFactory _logger.Warning("{File} save failed", _configBakFile); } - if (ParseJsonFile(ConfigurationHelper.ConfigFile) is JObject oldConfigJson && oldConfigJson["Configurations"] is JObject configurationsObj) + if (ParseJsonFile(ConfigurationHelper.ConfigFile) is JsonObject oldConfigJson && oldConfigJson["Configurations"] is JsonObject configurationsObj) { - var configNames = configurationsObj.Properties().Select(i => i.Name); + if (oldConfigJson["Current"]?.GetValue() is string oldCurrent && parsed.Current != oldCurrent) + { + _logger.Warning("Current configuration in old configuration is {OldCurrent}, but in new configuration is {NewCurrent}, switching to old current", oldCurrent, parsed.Current); + parsed.Current = oldCurrent; + } + var configNames = configurationsObj.Select(i => i.Key); foreach (var name in parsed.Configurations.Select(i => i.Key).Except(configNames)) { parsed.Configurations.Remove(name); @@ -177,6 +183,11 @@ public static class ConfigFactory } } + if (parsed.Configurations.All(i => i.Key != parsed.Current)) + { + parsed.Configurations.Add(parsed.Current, new SpecificConfig()); + } + return parsed; void SpecificConfigBind(string name, SpecificConfig config) @@ -219,7 +230,7 @@ public static class ConfigFactory } } - JObject? ParseJsonFile(string filePath) + JsonObject? ParseJsonFile(string filePath) { if (File.Exists(filePath) is false) { @@ -229,7 +240,7 @@ public static class ConfigFactory var str = File.ReadAllText(filePath); try { - var obj = (JObject?)Newtonsoft.Json.JsonConvert.DeserializeObject(str); + var obj = JsonSerializer.Deserialize(str); return obj ?? throw new Exception("Failed to parse json file"); } catch (Exception ex) diff --git a/src/MaaWpfGui/Configuration/Root.cs b/src/MaaWpfGui/Configuration/Root.cs index fa213a3231..dc56a92400 100644 --- a/src/MaaWpfGui/Configuration/Root.cs +++ b/src/MaaWpfGui/Configuration/Root.cs @@ -35,6 +35,7 @@ public class Root : INotifyPropertyChanged public int ConfigVersion { get; set; } = 1; + [JsonInclude] public string Current { get; set; } = ConfigurationKeys.DefaultConfiguration; [JsonInclude] @@ -50,18 +51,9 @@ public class Root : INotifyPropertyChanged public SpecificConfig CurrentConfig { get { - if (Configurations.TryGetValue(Current, out var result)) - { - return result; - } - else - { - var defaultConfig = new SpecificConfig(); - Configurations[Current] = defaultConfig; - return defaultConfig; - } + Configurations.TryGetValue(Current, out var result); + return result!; } - set => Configurations[Current] = value; }