Merge pull request #3 from That-One-Nerd/shell-systems

Fixed Issue #2 and did some more stuff.
This commit is contained in:
That_One_Nerd 2023-03-16 13:31:58 -04:00 committed by GitHub
commit ef3d58f05a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 29 additions and 12 deletions

View File

@ -5,6 +5,7 @@ global using System;
global using System.Collections.Generic; global using System.Collections.Generic;
global using System.Diagnostics; global using System.Diagnostics;
global using System.IO; global using System.IO;
global using System.IO.Compression;
global using System.Linq; global using System.Linq;
global using System.Reflection; global using System.Reflection;
global using static SrcMod.Shell.Tools; global using static SrcMod.Shell.Tools;

View File

@ -1,7 +1,4 @@
using System.IO; namespace SrcMod.Shell.Modules;
using System.IO.Compression;
namespace SrcMod.Shell.Modules;
[Module("base", false)] [Module("base", false)]
public static class BaseModule public static class BaseModule

View File

@ -23,10 +23,10 @@ public static class TypeParsers
if (TryParse(msg, out char resChar)) return resChar; if (TryParse(msg, out char resChar)) return resChar;
if (TryParse(msg, out DateOnly dateOnly)) return dateOnly; if (TryParse(msg, out DateOnly dateOnly)) return dateOnly;
if (TryParse(msg, out DateTime dateTime)) return dateTime; if (TryParse(msg, out DateTime dateTime)) return dateTime;
if (TryParse(msg, out DateTime dateTimeOffset)) return dateTimeOffset; if (TryParse(msg, out DateTimeOffset dateTimeOffset)) return dateTimeOffset;
if (TryParse(msg, out Guid guid)) return guid; if (TryParse(msg, out Guid guid)) return guid;
if (TryParse(msg, out TimeOnly timeOnly)) return timeOnly; if (TryParse(msg, out TimeOnly timeOnly)) return timeOnly;
if (TryParse(msg, out TimeOnly timeSpan)) return timeSpan; if (TryParse(msg, out TimeSpan timeSpan)) return timeSpan;
return msg; return msg;
} }

View File

@ -44,10 +44,22 @@ public class Shell
WorkingDirectory = Directory.GetCurrentDirectory(); WorkingDirectory = Directory.GetCurrentDirectory();
// Load modules and commands. // Load modules and commands.
List<Assembly?> possibleAsms = new()
{
assembly,
Assembly.GetEntryAssembly(),
Assembly.GetCallingAssembly()
};
LoadedModules = new(); LoadedModules = new();
LoadedCommands = new(); LoadedCommands = new();
Type[] possibleModules = assembly.GetTypes(); List<Type> possibleModules = new();
foreach (Assembly? a in possibleAsms)
{
if (a is null) continue;
possibleModules.AddRange(a.GetTypes().Where(x => !possibleModules.Contains(x)));
}
foreach (Type t in possibleModules) foreach (Type t in possibleModules)
{ {
ModuleInfo? module = ModuleInfo.FromModule(t); ModuleInfo? module = ModuleInfo.FromModule(t);
@ -166,10 +178,12 @@ public class Shell
catch (TargetInvocationException ex) catch (TargetInvocationException ex)
{ {
Write($"[ERROR] {ex.InnerException!.Message}", ConsoleColor.Red); Write($"[ERROR] {ex.InnerException!.Message}", ConsoleColor.Red);
if (LoadingBarEnabled) LoadingBarEnd();
} }
catch (Exception ex) catch (Exception ex)
{ {
Write($"[ERROR] {ex.Message}", ConsoleColor.Red); Write($"[ERROR] {ex.Message}", ConsoleColor.Red);
if (LoadingBarEnabled) LoadingBarEnd();
} }
return; return;
} }

View File

@ -5,8 +5,10 @@ namespace SrcMod.Shell;
public static class Tools public static class Tools
{ {
private static int loadingPosition = -1; private static int loadingPosition = -1;
private static int lastBufferSize = 0; private static int lastLoadingBufferSize = 0;
private static int lastValue = -1; private static int lastLoadingValue = -1;
public static bool LoadingBarEnabled { get; private set; }
public static void DisplayWithPages(IEnumerable<string> lines, ConsoleColor? color = null) public static void DisplayWithPages(IEnumerable<string> lines, ConsoleColor? color = null)
{ {
@ -77,6 +79,7 @@ public static class Tools
Console.SetCursorPosition(oldPos.x, oldPos.y); Console.SetCursorPosition(oldPos.x, oldPos.y);
} }
loadingPosition = -1; loadingPosition = -1;
LoadingBarEnabled = false;
} }
public static void LoadingBarSet(float value, ConsoleColor? color = null) public static void LoadingBarSet(float value, ConsoleColor? color = null)
{ {
@ -85,17 +88,18 @@ public static class Tools
int barSize = Console.BufferWidth - left.Length - right.Length, int barSize = Console.BufferWidth - left.Length - right.Length,
filled = (int)(barSize * value); filled = (int)(barSize * value);
if (filled == lastValue) return; if (filled == lastLoadingValue) return;
lastLoadingValue = filled;
Int2 oldPos = (Console.CursorLeft, Console.CursorTop); Int2 oldPos = (Console.CursorLeft, Console.CursorTop);
// Erase last bar. // Erase last bar.
Console.SetCursorPosition(0, loadingPosition); Console.SetCursorPosition(0, loadingPosition);
Console.Write(new string(' ', lastBufferSize)); Console.Write(new string(' ', lastLoadingBufferSize));
Console.CursorLeft = 0; Console.CursorLeft = 0;
// Add new bar. // Add new bar.
lastBufferSize = Console.BufferWidth; lastLoadingBufferSize = Console.BufferWidth;
Write(left, newLine: false); Write(left, newLine: false);
ConsoleColor oldFore = Console.ForegroundColor; ConsoleColor oldFore = Console.ForegroundColor;
@ -114,6 +118,7 @@ public static class Tools
if (loadingPosition != -1) throw new("The loading bar has already been enabled."); if (loadingPosition != -1) throw new("The loading bar has already been enabled.");
loadingPosition = position ?? Console.CursorTop; loadingPosition = position ?? Console.CursorTop;
LoadingBarSet(value, color); LoadingBarSet(value, color);
LoadingBarEnabled = true;
} }
public static void Write(object? message, ConsoleColor? col = null, bool newLine = true) public static void Write(object? message, ConsoleColor? col = null, bool newLine = true)