before candybox editor update
This commit is contained in:
@@ -9,14 +9,9 @@ namespace VisionBuilder.UI.Common.Plugins;
|
||||
[ModulePriority(1000)]
|
||||
public class PluginLoader:IVisionBuilderModule
|
||||
{
|
||||
private readonly PluginSettings _settings;
|
||||
|
||||
|
||||
|
||||
const string PLUGINS_DIRECTORY = "Plugins";
|
||||
public PluginLoader(PluginSettings settings)
|
||||
{
|
||||
_settings = settings;
|
||||
}
|
||||
|
||||
public List<IPlugin> Plugins { get; } = new List<IPlugin>();
|
||||
|
||||
@@ -31,6 +26,15 @@ public class PluginLoader:IVisionBuilderModule
|
||||
_isInitialized = true;
|
||||
Log.Information("Loading plugins...");
|
||||
var pluginsPath = Path.Combine("..", "Data", PLUGINS_DIRECTORY);
|
||||
|
||||
var enabledPluginsPath = Path.Combine(pluginsPath, "enabled_plugins.txt");
|
||||
if (!File.Exists(enabledPluginsPath))
|
||||
{
|
||||
Log.Warning("Enabled plugins file not found: {EnabledPluginsPath}. All discovered plugins will be disabled by default.", enabledPluginsPath);
|
||||
File.WriteAllText(enabledPluginsPath, "");
|
||||
}
|
||||
|
||||
List<string> enabledPlugins = File.ReadAllLines(enabledPluginsPath).ToList();
|
||||
Directory.CreateDirectory(pluginsPath);
|
||||
var pluginFolders = Directory.GetDirectories(pluginsPath);
|
||||
|
||||
@@ -38,13 +42,8 @@ public class PluginLoader:IVisionBuilderModule
|
||||
{
|
||||
var pluginName = Path.GetFileNameWithoutExtension(folder);
|
||||
|
||||
if (_settings.Plugins.All(p => p.Name != pluginName))
|
||||
{
|
||||
Log.Warning("Discovered new plugin:{PluginName}. Adding to settings.", pluginName);
|
||||
_settings.AddPlugin(new PluginSettings.PluginFlag { Name = pluginName, Enabled = false });
|
||||
}
|
||||
|
||||
if (_settings.Plugins.Where(p => p.Name == pluginName).All(x=>!x.Enabled))
|
||||
if (!enabledPlugins.Contains(pluginName))
|
||||
{
|
||||
Log.Information("Skipping plugin {PluginName} as it is not enabled in settings.", pluginName);
|
||||
continue;
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
using System.ComponentModel;
|
||||
using System.Globalization;
|
||||
using Inspectron.Settings;
|
||||
using VisionBuilder.UI.Common.Utils;
|
||||
|
||||
namespace VisionBuilder.UI.Common.Plugins;
|
||||
|
||||
public class PluginSettings:ISettings
|
||||
{
|
||||
private List<PluginFlag> _plugins = new List<PluginFlag>();
|
||||
|
||||
public class PluginFlag
|
||||
{
|
||||
public bool Enabled { get; set; }
|
||||
public string Name { get; set; }
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"{(Enabled ? "" : "(Disabled)")}{Name}";
|
||||
}
|
||||
}
|
||||
|
||||
public void AddPlugin(PluginFlag plugin)
|
||||
{
|
||||
if (_plugins.All(p => p.Name != plugin.Name))
|
||||
{
|
||||
_plugins.Add(plugin);
|
||||
}
|
||||
}
|
||||
|
||||
public List<PluginFlag> Plugins
|
||||
{
|
||||
get => _plugins;
|
||||
set
|
||||
{
|
||||
// add unique only
|
||||
foreach (var plugin in value)
|
||||
{
|
||||
AddPlugin(plugin);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void RegisterSettings(InspectronSettings settings)
|
||||
{
|
||||
settings.RegisterSimple(this, () => this.Plugins,"Plugins",nameof(Plugins));
|
||||
}
|
||||
}
|
||||
|
||||
public class PluginFlagConverter : GeneralListTypeConverter<PluginSettings.PluginFlag>
|
||||
{
|
||||
protected override PluginSettings.PluginFlag ConvertFromString(ITypeDescriptorContext context, CultureInfo culture, string stringValue)
|
||||
{
|
||||
if (string.IsNullOrEmpty(stringValue))
|
||||
return null;
|
||||
var parts = stringValue.Split(',');
|
||||
if (parts.Length == 2)
|
||||
{
|
||||
return new PluginSettings.PluginFlag
|
||||
{
|
||||
Name = parts[0].Trim(),
|
||||
Enabled = bool.Parse(parts[1].Trim())
|
||||
};
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
protected override string ConvertToString(ITypeDescriptorContext context, CultureInfo culture, PluginSettings.PluginFlag errorShortName)
|
||||
{
|
||||
return $"{errorShortName.Name}, {errorShortName.Enabled}";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user