38 lines
1.2 KiB
C#
38 lines
1.2 KiB
C#
using AuthorBuddy.Web.Models;
|
|
|
|
namespace AuthorBuddy.Web.Services;
|
|
|
|
public class PluginManager : IPluginManager
|
|
{
|
|
private readonly List<IExportPlugin> _plugins = new();
|
|
private readonly ISettingsService _settings;
|
|
|
|
public PluginManager(ISettingsService settings, IEnumerable<IExportPlugin> plugins)
|
|
{
|
|
_settings = settings;
|
|
_plugins.AddRange(plugins);
|
|
}
|
|
|
|
public void Register(IExportPlugin plugin)
|
|
{
|
|
if (!_plugins.Any(p => p.Id == plugin.Id))
|
|
_plugins.Add(plugin);
|
|
}
|
|
|
|
public IReadOnlyList<IExportPlugin> GetPlugins() => _plugins.AsReadOnly();
|
|
|
|
public IExportPlugin? GetPlugin(string id) => _plugins.FirstOrDefault(p => p.Id == id);
|
|
|
|
public async Task<PluginConfig?> GetConfigAsync(string pluginId)
|
|
{
|
|
var json = await _settings.GetPluginConfigAsync(pluginId);
|
|
if (string.IsNullOrEmpty(json)) return null;
|
|
return System.Text.Json.JsonSerializer.Deserialize<PluginConfig>(json);
|
|
}
|
|
|
|
public async Task SaveConfigAsync(PluginConfig config)
|
|
{
|
|
var json = System.Text.Json.JsonSerializer.Serialize(config);
|
|
await _settings.SavePluginConfigAsync(config.PluginId, json);
|
|
}
|
|
}
|