From b5517e724ae8ce9b76efb5f99efd25b3f4dab674 Mon Sep 17 00:00:00 2001 From: That_One_Nerd Date: Wed, 19 Apr 2023 19:28:30 -0400 Subject: [PATCH] Added automatic config resetting capabilities. --- SrcMod/Shell/Modules/ConfigModule.cs | 34 ++++++++++++++++------------ SrcMod/Shell/ObjectModels/Config.cs | 6 +++-- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/SrcMod/Shell/Modules/ConfigModule.cs b/SrcMod/Shell/Modules/ConfigModule.cs index ffc5ca0..0977a3e 100644 --- a/SrcMod/Shell/Modules/ConfigModule.cs +++ b/SrcMod/Shell/Modules/ConfigModule.cs @@ -72,26 +72,17 @@ public static class ConfigModule [Command("reset")] public static void ResetConfig(string name = "all") { - Config config = Config.LoadedConfig; - switch (name.Trim().ToLower()) { - case "gamedirectories": - config.GameDirectories = Config.Defaults.GameDirectories; - break; - - case "rununsafecommands": - config.RunUnsafeCommands = Config.Defaults.RunUnsafeCommands; - break; - case "all": - config = Config.Defaults; + Config.LoadedConfig = Config.Defaults; + DisplayConfig("all"); break; - default: throw new($"Unknown config variable \"{name}\""); + default: + ResetConfigVar(name); + break; } - - Config.LoadedConfig = config; } [Command("set")] @@ -200,4 +191,19 @@ public static class ConfigModule string json = JsonConvert.SerializeObject(Config.LoadedConfig, Formatting.Indented); Write(json); } + + private static void ResetConfigVar(string name) + { + FieldInfo[] validFields = (from field in typeof(Config).GetFields() + let isPublic = field.IsPublic + let isStatic = field.IsStatic + where isPublic && !isStatic + select field).ToArray(); + + FieldInfo? chosenField = validFields.FirstOrDefault(x => x.Name.Trim().ToLower() == name.Trim().ToLower()); + if (chosenField is null) throw new($"No valid config variable named \"{name}\"."); + + chosenField.SetValue(Config.LoadedConfig, chosenField.GetValue(Config.Defaults)); + DisplayConfigItem(chosenField.GetValue(Config.LoadedConfig), name: chosenField.Name); + } } diff --git a/SrcMod/Shell/ObjectModels/Config.cs b/SrcMod/Shell/ObjectModels/Config.cs index 0c272f8..e3cba13 100644 --- a/SrcMod/Shell/ObjectModels/Config.cs +++ b/SrcMod/Shell/ObjectModels/Config.cs @@ -4,7 +4,7 @@ public class Config { public const string FilePath = "config.json"; - public static readonly Config Defaults; + public static Config Defaults => (Config)p_defaults.MemberwiseClone(); public static Config LoadedConfig { @@ -19,9 +19,11 @@ public class Config private static Config p_applied; private static ConfigChanges? p_changes; + private static readonly Config p_defaults; + static Config() { - Defaults = new() + p_defaults = new() { GameDirectories = Array.Empty(), RunUnsafeCommands = AskMode.Ask