using System; using System.Collections.Generic; using System.IO; using System.Text; namespace TweetDuck.Configuration.Instance{ class PluginConfigInstance : IConfigInstance<PluginConfig>{ public PluginConfig Instance { get; } private readonly string filename; public PluginConfigInstance(string filename, PluginConfig instance){ this.filename = filename; this.Instance = instance; } public void Load(){ try{ using(StreamReader reader = new StreamReader(new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read), Encoding.UTF8)){ string line = reader.ReadLine(); if (line == "#Disabled"){ HashSet<string> newDisabled = new HashSet<string>(); while((line = reader.ReadLine()) != null){ newDisabled.Add(line); } Instance.ReloadSilently(newDisabled); } } }catch(FileNotFoundException){ }catch(DirectoryNotFoundException){ }catch(Exception e){ Program.Reporter.HandleException("Plugin Configuration Error", "Could not read the plugin configuration file. If you continue, the list of disabled plugins will be reset to default.", true, e); } } public void Save(){ try{ using(StreamWriter writer = new StreamWriter(new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None), Encoding.UTF8)){ writer.WriteLine("#Disabled"); foreach(string identifier in Instance.DisabledPlugins){ writer.WriteLine(identifier); } } }catch(Exception e){ Program.Reporter.HandleException("Plugin Configuration Error", "Could not save the plugin configuration file.", true, e); } } public void Reload(){ Load(); } public void Reset(){ try{ File.Delete(filename); Instance.ReloadSilently(Instance.ConstructWithDefaults<PluginConfig>().DisabledPlugins); }catch(Exception e){ Program.Reporter.HandleException("Plugin Configuration Error", "Could not delete the plugin configuration file.", true, e); return; } Reload(); } } }