diff --git a/Dalamud/Configuration/DalamudConfiguration.cs b/Dalamud/Configuration/DalamudConfiguration.cs index 6bbce4d8a..ceb3fd84e 100644 --- a/Dalamud/Configuration/DalamudConfiguration.cs +++ b/Dalamud/Configuration/DalamudConfiguration.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using Dalamud.Configuration; using Dalamud.DiscordBot; using Newtonsoft.Json; using XIVLauncher.Dalamud; @@ -31,6 +32,8 @@ namespace Dalamud public string LastVersion { get; set; } + public Dictionary PluginConfigurations { get; set; } + public static DalamudConfiguration Load(string path) { return JsonConvert.DeserializeObject(File.ReadAllText(path)); } diff --git a/Dalamud/Configuration/IPluginConfiguration.cs b/Dalamud/Configuration/IPluginConfiguration.cs new file mode 100644 index 000000000..f2a782960 --- /dev/null +++ b/Dalamud/Configuration/IPluginConfiguration.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dalamud.Configuration +{ + public interface IPluginConfiguration + { + int Version { get; set; } + } +} diff --git a/Dalamud/Dalamud.csproj b/Dalamud/Dalamud.csproj index e8ded9f63..7d65ccb68 100644 --- a/Dalamud/Dalamud.csproj +++ b/Dalamud/Dalamud.csproj @@ -1,4 +1,4 @@ - + AnyCPU net471 @@ -65,7 +65,4 @@ Resources.Designer.cs - - - diff --git a/Dalamud/Plugin/DalamudPluginInterface.cs b/Dalamud/Plugin/DalamudPluginInterface.cs index 8c2cb38eb..38be7d39c 100644 --- a/Dalamud/Plugin/DalamudPluginInterface.cs +++ b/Dalamud/Plugin/DalamudPluginInterface.cs @@ -1,8 +1,11 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Reflection; +using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; +using Dalamud.Configuration; using Dalamud.Game.ClientState; using Dalamud.Game.Command; using Dalamud.Game.Internal; @@ -29,14 +32,51 @@ namespace Dalamud.Plugin /// public readonly Framework Framework; + private readonly Dalamud dalamud; + private readonly string pluginName; + /// /// Set up the interface and populate all fields needed. /// /// - public DalamudPluginInterface(Dalamud dalamud) { + public DalamudPluginInterface(Dalamud dalamud, string pluginName) { this.CommandManager = dalamud.CommandManager; this.Framework = dalamud.Framework; this.ClientState = dalamud.ClientState; + + this.dalamud = dalamud; + this.pluginName = pluginName; + } + + /// + /// Save a plugin configuration(inheriting IPluginConfiguration). + /// + /// The current configuration. + public void SavePluginConfig(IPluginConfiguration currentConfig) { + if (this.dalamud.Configuration.PluginConfigurations == null) + this.dalamud.Configuration.PluginConfigurations = new Dictionary(); + + if (this.dalamud.Configuration.PluginConfigurations.ContainsKey(this.pluginName)) { + this.dalamud.Configuration.PluginConfigurations[this.pluginName] = currentConfig; + return; + } + + this.dalamud.Configuration.PluginConfigurations.Add(this.pluginName, currentConfig); + this.dalamud.Configuration.Save(this.dalamud.StartInfo.ConfigurationPath); + } + + /// + /// Get a previously saved plugin configuration or null if none was saved before. + /// + /// A previously saved config or null if none was saved before. + public IPluginConfiguration GetPluginConfig() { + if (this.dalamud.Configuration.PluginConfigurations == null) + this.dalamud.Configuration.PluginConfigurations = new Dictionary(); + + if (!this.dalamud.Configuration.PluginConfigurations.ContainsKey(this.pluginName)) + return null; + + return this.dalamud.Configuration.PluginConfigurations[this.pluginName]; } } } diff --git a/Dalamud/Plugin/PluginManager.cs b/Dalamud/Plugin/PluginManager.cs index 370bbae54..204931dfe 100644 --- a/Dalamud/Plugin/PluginManager.cs +++ b/Dalamud/Plugin/PluginManager.cs @@ -14,16 +14,12 @@ namespace Dalamud.Plugin private readonly string pluginDirectory; private readonly string defaultPluginDirectory; - private readonly DalamudPluginInterface dalamudInterface; - private List plugins; public PluginManager(Dalamud dalamud, string pluginDirectory, string defaultPluginDirectory) { this.dalamud = dalamud; this.pluginDirectory = pluginDirectory; this.defaultPluginDirectory = defaultPluginDirectory; - - this.dalamudInterface = new DalamudPluginInterface(dalamud); } public void UnloadPlugins() { @@ -79,7 +75,10 @@ namespace Dalamud.Plugin foreach (var pluginType in foundImplementations) { var plugin = (IDalamudPlugin)Activator.CreateInstance(pluginType); - plugin.Initialize(this.dalamudInterface); + + var dalamudInterface = new DalamudPluginInterface(this.dalamud, pluginType.Assembly.GetName().Name); + + plugin.Initialize(dalamudInterface); Log.Information("Loaded plugin: {0}", plugin.Name); this.plugins.Add(plugin); }