From 3742b4a230f68918d706dba06bfc3578f4e5eb7d Mon Sep 17 00:00:00 2001 From: That_One_Nerd Date: Mon, 17 Apr 2023 17:58:28 -0400 Subject: [PATCH] Some config display changes. WIP --- SrcMod/Shell/Modules/ConfigModule.cs | 63 +++++++++++++++++++++++++++- SrcMod/Shell/ObjectModels/Config.cs | 19 +++++++-- SrcMod/Shell/Tools.cs | 24 ----------- 3 files changed, 76 insertions(+), 30 deletions(-) diff --git a/SrcMod/Shell/Modules/ConfigModule.cs b/SrcMod/Shell/Modules/ConfigModule.cs index 4399b6e..426fb77 100644 --- a/SrcMod/Shell/Modules/ConfigModule.cs +++ b/SrcMod/Shell/Modules/ConfigModule.cs @@ -4,8 +4,67 @@ public static class ConfigModule { [Command("display")] - public static void DisplayConfig() + public static void DisplayConfig(ConfigDisplayMode mode = ConfigDisplayMode.Color) { - // TODO + switch (mode) + { + case ConfigDisplayMode.Raw: + DisplayConfigRaw(); + break; + + case ConfigDisplayMode.Color: + DisplayConfigColor(); + break; + } + } + + private static void DisplayConfigColor() + { + Config config = Config.LoadedConfig; + List dirs = config.GameDirectories is null ? new() : new(config.GameDirectories); + dirs.Add("config"); + config.GameDirectories = dirs.ToArray(); + Config.LoadedConfig = config; + + Write("Steam Game Directories: ", null, false); + if (config.GameDirectories is null || config.GameDirectories.Length <= 0) Write("None", ConsoleColor.DarkGray); + else + { + Write("[", ConsoleColor.DarkGray); + for (int i = 0; i < config.GameDirectories.Length; i++) + { + Write(" \"", ConsoleColor.DarkGray, false); + Write(config.GameDirectories[i], ConsoleColor.White, false); + if (i < config.GameDirectories.Length - 1) Write("\",", ConsoleColor.DarkGray); + else Write("\"", ConsoleColor.DarkGray); + } + Write("]", ConsoleColor.DarkGray); + } + } + private static void DisplayConfigRaw() + { + MemoryStream ms = new(); + StreamWriter writer = new(ms, leaveOpen: true); + JsonTextWriter jsonWriter = new(writer); + + Serializer.Serialize(jsonWriter, Config.LoadedConfig); + + jsonWriter.Close(); + writer.Close(); + ms.Position = 0; + + StreamReader reader = new(ms); + string msg = reader.ReadToEnd(); + + Write(msg); + + reader.Close(); + ms.Close(); + } + + public enum ConfigDisplayMode + { + Raw, + Color } } diff --git a/SrcMod/Shell/ObjectModels/Config.cs b/SrcMod/Shell/ObjectModels/Config.cs index 5a8ad60..e76ce48 100644 --- a/SrcMod/Shell/ObjectModels/Config.cs +++ b/SrcMod/Shell/ObjectModels/Config.cs @@ -21,7 +21,15 @@ public struct Config static Config() { - Defaults = new(); + Defaults = new() + { + GameDirectories = new[] + { + "testing 1", + "testing 2" + }, + RunUnsafeCommands = AskMode.Ask + }; } public string[] GameDirectories; @@ -29,17 +37,20 @@ public struct Config public Config ApplyChanges(ConfigChanges changes) => this with { - GameDirectories = changes.GameDirectories ?? GameDirectories, + GameDirectories = GameDirectories.Union(changes.GameDirectories ?? Array.Empty()).ToArray(), RunUnsafeCommands = changes.RunUnsafeCommands ?? RunUnsafeCommands }; public ConfigChanges GetChanges(Config? baseConfig = null) { Config reference = baseConfig ?? Defaults; - return new() + ConfigChanges changes = new() { - GameDirectories = reference.GameDirectories == GameDirectories ? null : GameDirectories, + GameDirectories = reference.GameDirectories == GameDirectories ? null : + GameDirectories.Where(x => !reference.GameDirectories.Contains(x)).ToArray(), RunUnsafeCommands = reference.RunUnsafeCommands == RunUnsafeCommands ? null : RunUnsafeCommands }; + + return changes; } public static void LoadConfig(string basePath) diff --git a/SrcMod/Shell/Tools.cs b/SrcMod/Shell/Tools.cs index 8772ef8..713ffea 100644 --- a/SrcMod/Shell/Tools.cs +++ b/SrcMod/Shell/Tools.cs @@ -168,30 +168,6 @@ public static class Tools } } - public static void WriteAutoColor(object? message, bool newLine = true) - { - ConsoleColor? col = null; - if (message is null) col = ConsoleColor.DarkGray; - else if (message is bool typeBool) - { - if (typeBool) col = ConsoleColor.Green; - else col = ConsoleColor.Red; - } - else if (message is sbyte || message is byte || message is short || message is ushort || - message is int || message is uint || message is long || message is ulong || - message is float || message is double || message is decimal) col = ConsoleColor.DarkGreen; - else if (message is char) col = ConsoleColor.DarkYellow; - else if (message is AskMode typeAskMode) col = typeAskMode switch - { - AskMode.Never => ConsoleColor.Red, - AskMode.Ask => ConsoleColor.DarkGray, - AskMode.Always => ConsoleColor.Green, - _ => null - }; - - Write(message, col, newLine); - } - public static bool ValidateUnsafe() { Write("You are about to execute an unsafe command.\nProceed? > ", ConsoleColor.DarkYellow, false);