using System; using System.Collections.Generic; using TweetLib.Core.Features.Plugins; using TweetLib.Core.Features.Plugins.Config; using TweetLib.Core.Features.Plugins.Events; using TweetLib.Core.Systems.Configuration; namespace TweetDuck.Configuration { sealed class PluginConfig : BaseConfig, IPluginConfig { private static readonly string[] DefaultDisabled = { "official/clear-columns", "official/reply-account" }; // CONFIGURATION DATA private readonly HashSet<string> disabled = new HashSet<string>(DefaultDisabled); // EVENTS public event EventHandler<PluginChangedStateEventArgs> PluginChangedState; // END OF CONFIG protected override BaseConfig ConstructWithDefaults() { return new PluginConfig(); } // INTERFACE IMPLEMENTATION IEnumerable<string> IPluginConfig.DisabledPlugins => disabled; void IPluginConfig.Reset(IEnumerable<string> newDisabledPlugins) { disabled.Clear(); disabled.UnionWith(newDisabledPlugins); } public void SetEnabled(Plugin plugin, bool enabled) { if ((enabled && disabled.Remove(plugin.Identifier)) || (!enabled && disabled.Add(plugin.Identifier))) { PluginChangedState?.Invoke(this, new PluginChangedStateEventArgs(plugin, enabled)); this.Save(); } } public bool IsEnabled(Plugin plugin) { return !disabled.Contains(plugin.Identifier); } } }