From 6529b3429fecaf0f1298bb87ea584b4ce2db4d5c Mon Sep 17 00:00:00 2001 From: goat Date: Tue, 3 Mar 2020 22:45:16 +0900 Subject: [PATCH] fix: save plugin configs with type, in external directory --- Dalamud.Injector/Dalamud.Injector.csproj | 6 +-- Dalamud.Injector/Program.cs | 4 +- Dalamud/Configuration/DalamudConfiguration.cs | 4 +- Dalamud/Configuration/PluginConfigurations.cs | 43 +++++++++++++++++++ Dalamud/Dalamud.csproj | 9 ++-- Dalamud/Game/Internal/AntiDebug.cs | 2 +- Dalamud/Plugin/DalamudPluginInterface.cs | 29 +++---------- Dalamud/Plugin/PluginManager.cs | 7 ++- 8 files changed, 64 insertions(+), 40 deletions(-) create mode 100644 Dalamud/Configuration/PluginConfigurations.cs diff --git a/Dalamud.Injector/Dalamud.Injector.csproj b/Dalamud.Injector/Dalamud.Injector.csproj index 680191ef5..4f798b2e7 100644 --- a/Dalamud.Injector/Dalamud.Injector.csproj +++ b/Dalamud.Injector/Dalamud.Injector.csproj @@ -14,10 +14,10 @@ true - 4.7.11.0 - 4.7.11.0 + 4.7.12.0 + 4.7.12.0 XIVLauncher addon injection - 4.7.11.0 + 4.7.12.0 diff --git a/Dalamud.Injector/Program.cs b/Dalamud.Injector/Program.cs index 3993295b6..d0fbe5a2a 100644 --- a/Dalamud.Injector/Program.cs +++ b/Dalamud.Injector/Program.cs @@ -83,9 +83,9 @@ namespace Dalamud.Injector { ConfigurationPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\XIVLauncher\dalamudConfig.json", PluginDirectory = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + - @"\XIVLauncher\installedPluginsI", + @"\XIVLauncher\installedPlugins", DefaultPluginDirectory = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + - @"\XIVLauncher\devPluginsI", + @"\XIVLauncher\devPlugins", GameVersion = "2020.02.11.0000.0000", Language = ClientLanguage.English diff --git a/Dalamud/Configuration/DalamudConfiguration.cs b/Dalamud/Configuration/DalamudConfiguration.cs index 486948b11..6953ac76b 100644 --- a/Dalamud/Configuration/DalamudConfiguration.cs +++ b/Dalamud/Configuration/DalamudConfiguration.cs @@ -29,14 +29,12 @@ namespace Dalamud public string LastVersion { get; set; } - public Dictionary PluginConfigurations { get; set; } - public static DalamudConfiguration Load(string path) { return JsonConvert.DeserializeObject(File.ReadAllText(path)); } public void Save(string path) { - File.WriteAllText(path, JsonConvert.SerializeObject(this)); + File.WriteAllText(path, JsonConvert.SerializeObject(this, Formatting.Indented)); } } } diff --git a/Dalamud/Configuration/PluginConfigurations.cs b/Dalamud/Configuration/PluginConfigurations.cs new file mode 100644 index 000000000..74404abe7 --- /dev/null +++ b/Dalamud/Configuration/PluginConfigurations.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Newtonsoft.Json; + +namespace Dalamud.Configuration +{ + public class PluginConfigurations { + private DirectoryInfo configDirectory; + + public PluginConfigurations(string storageFolder) { + this.configDirectory = new DirectoryInfo(storageFolder); + this.configDirectory.Create(); + } + + public void Save(IPluginConfiguration config, string pluginName) { + File.WriteAllText(GetPath(pluginName).FullName, JsonConvert.SerializeObject(config, Formatting.Indented, new JsonSerializerSettings + { + TypeNameAssemblyFormatHandling = TypeNameAssemblyFormatHandling.Simple, + TypeNameHandling = TypeNameHandling.Objects + })); + } + + public IPluginConfiguration Load(string pluginName) { + var path = GetPath(pluginName); + + if (!path.Exists) + return null; + + return JsonConvert.DeserializeObject(File.ReadAllText(path.FullName), + new JsonSerializerSettings { + TypeNameAssemblyFormatHandling = + TypeNameAssemblyFormatHandling.Simple, + TypeNameHandling = TypeNameHandling.Objects + }); + } + + private FileInfo GetPath(string pluginName) => new FileInfo(Path.Combine(this.configDirectory.FullName, $"{pluginName}.json")); + } +} diff --git a/Dalamud/Dalamud.csproj b/Dalamud/Dalamud.csproj index 933093241..9afb1437d 100644 --- a/Dalamud/Dalamud.csproj +++ b/Dalamud/Dalamud.csproj @@ -14,9 +14,9 @@ true - 4.7.11.0 - 4.7.11.0 - 4.7.11.0 + 4.7.12.0 + 4.7.12.0 + 4.7.12.0 @@ -65,9 +65,6 @@ Resources.Designer.cs - - - diff --git a/Dalamud/Game/Internal/AntiDebug.cs b/Dalamud/Game/Internal/AntiDebug.cs index 6ce25488b..54ec19da2 100644 --- a/Dalamud/Game/Internal/AntiDebug.cs +++ b/Dalamud/Game/Internal/AntiDebug.cs @@ -25,7 +25,7 @@ namespace Dalamud.Game.Internal } public void Enable() { - this.debuggerPresentHook.Enable(); + //this.debuggerPresentHook.Enable(); } public void Dispose() { diff --git a/Dalamud/Plugin/DalamudPluginInterface.cs b/Dalamud/Plugin/DalamudPluginInterface.cs index 70581119f..8c0797e30 100644 --- a/Dalamud/Plugin/DalamudPluginInterface.cs +++ b/Dalamud/Plugin/DalamudPluginInterface.cs @@ -52,12 +52,13 @@ namespace Dalamud.Plugin private readonly Dalamud dalamud; private readonly string pluginName; + private readonly PluginConfigurations configs; /// /// Set up the interface and populate all fields needed. /// /// - public DalamudPluginInterface(Dalamud dalamud, string pluginName) { + public DalamudPluginInterface(Dalamud dalamud, string pluginName, PluginConfigurations configs) { this.CommandManager = dalamud.CommandManager; this.Framework = dalamud.Framework; this.ClientState = dalamud.ClientState; @@ -67,6 +68,7 @@ namespace Dalamud.Plugin this.dalamud = dalamud; this.pluginName = pluginName; + this.configs = configs; } /// @@ -81,20 +83,10 @@ namespace Dalamud.Plugin /// /// The current configuration. public void SavePluginConfig(IPluginConfiguration currentConfig) { - if (this.dalamud.Configuration.PluginConfigurations == null) - this.dalamud.Configuration.PluginConfigurations = new Dictionary(); - if (currentConfig == null) return; - if (this.dalamud.Configuration.PluginConfigurations.ContainsKey(this.pluginName)) { - this.dalamud.Configuration.PluginConfigurations[this.pluginName] = currentConfig; - this.dalamud.Configuration.Save(this.dalamud.StartInfo.ConfigurationPath); - return; - } - - this.dalamud.Configuration.PluginConfigurations.Add(this.pluginName, currentConfig); - this.dalamud.Configuration.Save(this.dalamud.StartInfo.ConfigurationPath); + this.configs.Save(currentConfig, this.pluginName); } /// @@ -102,18 +94,7 @@ namespace Dalamud.Plugin /// /// 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; - - if (!(this.dalamud.Configuration.PluginConfigurations[this.pluginName] is IPluginConfiguration config)) - return null; - - Serilog.Log.Information("Found plugin config for {0} v{1}", this.pluginName, config.Version); - - return config; + return this.configs.Load(this.pluginName); } #region Logging diff --git a/Dalamud/Plugin/PluginManager.cs b/Dalamud/Plugin/PluginManager.cs index f2a748f53..a7c9574ba 100644 --- a/Dalamud/Plugin/PluginManager.cs +++ b/Dalamud/Plugin/PluginManager.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; +using Dalamud.Configuration; using Dalamud.Interface; using Dalamud.Plugin.Features; using ImGuiNET; @@ -18,6 +19,8 @@ namespace Dalamud.Plugin private readonly string pluginDirectory; private readonly string devPluginDirectory; + private readonly PluginConfigurations pluginConfigs; + private readonly Type interfaceType = typeof(IDalamudPlugin); public readonly List<(IDalamudPlugin Plugin, PluginDefinition Definition, DalamudPluginInterface PluginInterface)> Plugins = new List<(IDalamudPlugin plugin, PluginDefinition def, DalamudPluginInterface PluginInterface)>(); @@ -27,6 +30,8 @@ namespace Dalamud.Plugin this.pluginDirectory = pluginDirectory; this.devPluginDirectory = devPluginDirectory; + this.pluginConfigs = new PluginConfigurations(Path.Combine(Path.GetDirectoryName(dalamud.StartInfo.ConfigurationPath), "pluginConfigs")); + this.dalamud.InterfaceManager.OnDraw += InterfaceManagerOnOnDraw; } @@ -117,7 +122,7 @@ namespace Dalamud.Plugin var plugin = (IDalamudPlugin)Activator.CreateInstance(type); - var dalamudInterface = new DalamudPluginInterface(this.dalamud, type.Assembly.GetName().Name); + var dalamudInterface = new DalamudPluginInterface(this.dalamud, type.Assembly.GetName().Name, this.pluginConfigs); plugin.Initialize(dalamudInterface); Log.Information("Loaded plugin: {0}", plugin.Name); this.Plugins.Add((plugin, pluginDef, dalamudInterface));