Add -testplugin commandline switch

This commit is contained in:
Brant Martin
2019-07-15 11:10:10 -04:00
parent 983aff2091
commit f15139e907
3 changed files with 41 additions and 6 deletions

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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<PluginItem>();
foreach (var item in pluginItems)
@@ -187,24 +206,35 @@ namespace Torch.Managers
PluginsLoaded?.Invoke(_plugins.Values.AsReadOnly());
}
private List<PluginItem> GetLocalPlugins(string pluginDir)
private List<PluginItem> 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<string> {pluginDir});
var results = new List<PluginItem>();
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))
{