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 public PluginConfig(IConfigManager configManager) : base(configManager){} protected override BaseConfig ConstructWithDefaults(IConfigManager configManager){ return new PluginConfig(configManager); } // 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)); Save(); } } public bool IsEnabled(Plugin plugin){ return !disabled.Contains(plugin.Identifier); } } }