From f15139e907f3052678f915793e9c4ce658de37c3 Mon Sep 17 00:00:00 2001 From: Brant Martin Date: Mon, 15 Jul 2019 11:10:10 -0400 Subject: [PATCH] Add -testplugin commandline switch --- Torch.API/ITorchConfig.cs | 1 + Torch.Server/TorchConfig.cs | 4 ++++ Torch/Plugins/PluginManager.cs | 42 +++++++++++++++++++++++++++++----- 3 files changed, 41 insertions(+), 6 deletions(-) diff --git a/Torch.API/ITorchConfig.cs b/Torch.API/ITorchConfig.cs index 70cc019..84d4121 100644 --- a/Torch.API/ITorchConfig.cs +++ b/Torch.API/ITorchConfig.cs @@ -22,6 +22,7 @@ namespace Torch string WaitForPID { get; set; } string ChatName { get; set; } string ChatColor { get; set; } + string TestPlugin { get; set; } bool Save(string path = null); } diff --git a/Torch.Server/TorchConfig.cs b/Torch.Server/TorchConfig.cs index 7c86e24..1172b9b 100644 --- a/Torch.Server/TorchConfig.cs +++ b/Torch.Server/TorchConfig.cs @@ -117,6 +117,10 @@ namespace Torch.Server [Arg("console", "Keeps a separate console window open after the main UI loads.")] public bool IndependentConsole { get; set; } = false; + [XmlIgnore] + [Arg("testplugin", "Path to a plugin to debug. For development use only.")] + public string TestPlugin { get; set; } + [XmlIgnore] private string _path; diff --git a/Torch/Plugins/PluginManager.cs b/Torch/Plugins/PluginManager.cs index b93db8d..28b017e 100644 --- a/Torch/Plugins/PluginManager.cs +++ b/Torch/Plugins/PluginManager.cs @@ -121,6 +121,25 @@ namespace Torch.Managers { _log.Info("Loading plugins..."); + if (!string.IsNullOrEmpty(Torch.Config.TestPlugin)) + { + _log.Info($"Loading plugin for debug at {Torch.Config.TestPlugin}"); + + foreach (var item in GetLocalPlugins(Torch.Config.TestPlugin, true)) + { + _log.Info(item.Path); + LoadPlugin(item); + } + + foreach (var plugin in _plugins.Values) + { + plugin.Init(Torch); + } + _log.Info($"Loaded {_plugins.Count} plugins."); + PluginsLoaded?.Invoke(_plugins.Values.AsReadOnly()); + return; + } + var pluginItems = GetLocalPlugins(PluginDir); var pluginsToLoad = new List(); foreach (var item in pluginItems) @@ -187,24 +206,35 @@ namespace Torch.Managers PluginsLoaded?.Invoke(_plugins.Values.AsReadOnly()); } - private List GetLocalPlugins(string pluginDir) + private List GetLocalPlugins(string pluginDir, bool debug = false) { var firstLoad = Torch.Config.Plugins.Count == 0; var pluginItems = Directory.EnumerateFiles(pluginDir, "*.zip") - .Union(Directory.EnumerateDirectories(PluginDir)); + .Union(Directory.EnumerateDirectories(pluginDir)); + if (debug) + pluginItems = pluginItems.Union(new List {pluginDir}); var results = new List(); foreach (var item in pluginItems) { - var path = Path.Combine(PluginDir, item); + var path = Path.Combine(pluginDir, item); var isZip = item.EndsWith(".zip", StringComparison.CurrentCultureIgnoreCase); var manifest = isZip ? GetManifestFromZip(path) : GetManifestFromDirectory(path); if (manifest == null) { - _log.Warn($"Item '{item}' is missing a manifest, skipping."); - continue; + if (!debug) + { + _log.Warn($"Item '{item}' is missing a manifest, skipping."); + continue; + } + manifest = new PluginManifest() + { + Guid = new Guid(), + Version = "0", + Name = "TEST" + }; } var duplicatePlugin = results.FirstOrDefault(r => r.Manifest.Guid == manifest.Guid); @@ -215,7 +245,7 @@ namespace Torch.Managers continue; } - if (!Torch.Config.LocalPlugins) + if (!Torch.Config.LocalPlugins && !debug) { if (isZip && !Torch.Config.Plugins.Contains(manifest.Guid)) {