using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; namespace Ink_Canvas.Helpers.Plugins { /// /// 插件配置管理器,允许插件管理自己的配置 /// public class PluginConfigurationManager { private static readonly string PluginConfigDirectory = Path.Combine(App.RootPath, "PluginConfigs"); private static readonly Dictionary> _pluginConfigs = new Dictionary>(); private static readonly object _lockObject = new object(); static PluginConfigurationManager() { // 确保配置目录存在 if (!Directory.Exists(PluginConfigDirectory)) { Directory.CreateDirectory(PluginConfigDirectory); } } /// /// 获取插件配置值 /// /// 配置值类型 /// 插件名称 /// 配置键 /// 默认值 /// 配置值 public static T GetConfiguration(string pluginName, string key, T defaultValue = default(T)) { lock (_lockObject) { try { if (_pluginConfigs.TryGetValue(pluginName, out var pluginConfig)) { if (pluginConfig.TryGetValue(key, out var value)) { if (value is T typedValue) { return typedValue; } // 尝试类型转换 try { return (T)Convert.ChangeType(value, typeof(T)); } catch { return defaultValue; } } } } catch (Exception ex) { LogHelper.WriteLogToFile($"获取插件 {pluginName} 配置 {key} 时出错: {ex.Message}", LogHelper.LogType.Error); } return defaultValue; } } /// /// 设置插件配置值 /// /// 配置值类型 /// 插件名称 /// 配置键 /// 配置值 public static void SetConfiguration(string pluginName, string key, T value) { lock (_lockObject) { try { if (!_pluginConfigs.ContainsKey(pluginName)) { _pluginConfigs[pluginName] = new Dictionary(); } _pluginConfigs[pluginName][key] = value; // 异步保存配置 Task.Run(() => SavePluginConfiguration(pluginName)); } catch (Exception ex) { LogHelper.WriteLogToFile($"设置插件 {pluginName} 配置 {key} 时出错: {ex.Message}", LogHelper.LogType.Error); } } } /// /// 删除插件配置 /// /// 插件名称 /// 配置键 public static void RemoveConfiguration(string pluginName, string key) { lock (_lockObject) { try { if (_pluginConfigs.TryGetValue(pluginName, out var pluginConfig)) { if (pluginConfig.Remove(key)) { // 异步保存配置 Task.Run(() => SavePluginConfiguration(pluginName)); } } } catch (Exception ex) { LogHelper.WriteLogToFile($"删除插件 {pluginName} 配置 {key} 时出错: {ex.Message}", LogHelper.LogType.Error); } } } /// /// 获取插件的所有配置 /// /// 插件名称 /// 配置字典 public static Dictionary GetAllConfigurations(string pluginName) { lock (_lockObject) { if (_pluginConfigs.TryGetValue(pluginName, out var pluginConfig)) { return new Dictionary(pluginConfig); } return new Dictionary(); } } /// /// 清除插件的所有配置 /// /// 插件名称 public static void ClearAllConfigurations(string pluginName) { lock (_lockObject) { try { if (_pluginConfigs.Remove(pluginName)) { // 删除配置文件 string configFile = Path.Combine(PluginConfigDirectory, $"{pluginName}.json"); if (File.Exists(configFile)) { File.Delete(configFile); } } } catch (Exception ex) { LogHelper.WriteLogToFile($"清除插件 {pluginName} 所有配置时出错: {ex.Message}", LogHelper.LogType.Error); } } } /// /// 加载插件配置 /// /// 插件名称 public static void LoadPluginConfiguration(string pluginName) { try { string configFile = Path.Combine(PluginConfigDirectory, $"{pluginName}.json"); if (File.Exists(configFile)) { string json = File.ReadAllText(configFile); var config = JsonConvert.DeserializeObject>(json); lock (_lockObject) { _pluginConfigs[pluginName] = config ?? new Dictionary(); } LogHelper.WriteLogToFile($"已加载插件 {pluginName} 的配置"); } } catch (Exception ex) { LogHelper.WriteLogToFile($"加载插件 {pluginName} 配置时出错: {ex.Message}", LogHelper.LogType.Error); } } /// /// 保存插件配置 /// /// 插件名称 private static void SavePluginConfiguration(string pluginName) { try { Dictionary pluginConfig; lock (_lockObject) { if (!_pluginConfigs.TryGetValue(pluginName, out pluginConfig)) { return; } } string configFile = Path.Combine(PluginConfigDirectory, $"{pluginName}.json"); string json = JsonConvert.SerializeObject(pluginConfig, Formatting.Indented); File.WriteAllText(configFile, json); LogHelper.WriteLogToFile($"已保存插件 {pluginName} 的配置"); } catch (Exception ex) { LogHelper.WriteLogToFile($"保存插件 {pluginName} 配置时出错: {ex.Message}", LogHelper.LogType.Error); } } /// /// 加载所有插件的配置 /// public static void LoadAllPluginConfigurations() { try { if (Directory.Exists(PluginConfigDirectory)) { string[] configFiles = Directory.GetFiles(PluginConfigDirectory, "*.json"); foreach (string configFile in configFiles) { string pluginName = Path.GetFileNameWithoutExtension(configFile); LoadPluginConfiguration(pluginName); } } } catch (Exception ex) { LogHelper.WriteLogToFile($"加载所有插件配置时出错: {ex.Message}", LogHelper.LogType.Error); } } /// /// 保存所有插件的配置 /// public static void SaveAllPluginConfigurations() { try { lock (_lockObject) { foreach (string pluginName in _pluginConfigs.Keys) { SavePluginConfiguration(pluginName); } } } catch (Exception ex) { LogHelper.WriteLogToFile($"保存所有插件配置时出错: {ex.Message}", LogHelper.LogType.Error); } } } }