优化代码

This commit is contained in:
2025-07-28 14:40:44 +08:00
parent f38313ff2c
commit f03733da04
66 changed files with 1333 additions and 1294 deletions
@@ -36,7 +36,7 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher
try
{
_plugin = plugin;
LogHelper.WriteLogToFile("开始创建启动台按钮", LogHelper.LogType.Info);
LogHelper.WriteLogToFile("开始创建启动台按钮");
// 创建SimpleStackPanel
_panel = new SimpleStackPanel
@@ -49,7 +49,7 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher
Background = Brushes.Transparent
};
LogHelper.WriteLogToFile("创建SimpleStackPanel完成", LogHelper.LogType.Info);
LogHelper.WriteLogToFile("创建SimpleStackPanel完成");
// 添加图标
var image = CreateIconImage();
@@ -77,7 +77,7 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher
// 设置工具提示
_panel.ToolTip = "启动台";
LogHelper.WriteLogToFile("启动台按钮创建完成", LogHelper.LogType.Info);
LogHelper.WriteLogToFile("启动台按钮创建完成");
}
catch (Exception ex)
{
@@ -112,8 +112,7 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher
// 保存配置
_plugin.SaveConfig();
LogHelper.WriteLogToFile($"通过右键菜单切换启动台按钮位置为: {_plugin.Config.ButtonPosition}",
LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"通过右键菜单切换启动台按钮位置为: {_plugin.Config.ButtonPosition}");
};
menu.Items.Add(positionMenuItem);
@@ -133,7 +132,7 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher
if (method != null)
{
method.Invoke(mainWindow, null);
LogHelper.WriteLogToFile("已打开插件设置窗口", LogHelper.LogType.Info);
LogHelper.WriteLogToFile("已打开插件设置窗口");
}
}
catch (Exception ex)
@@ -218,7 +217,7 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher
{
// 提供反馈
_panel.Background = new SolidColorBrush(Color.FromArgb(40, 0, 0, 0));
LogHelper.WriteLogToFile("启动台按钮鼠标按下", LogHelper.LogType.Info);
LogHelper.WriteLogToFile("启动台按钮鼠标按下");
}
catch (Exception ex)
{
@@ -241,7 +240,7 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher
// 恢复背景
_panel.Background = Brushes.Transparent;
LogHelper.WriteLogToFile("启动台按钮鼠标抬起,准备显示启动台窗口", LogHelper.LogType.Info);
LogHelper.WriteLogToFile("启动台按钮鼠标抬起,准备显示启动台窗口");
// 获取按钮在屏幕上的位置
Point buttonPosition = _panel.PointToScreen(new Point(_panel.ActualWidth / 2, 0));
@@ -1,12 +1,15 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Interop;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using Microsoft.Win32;
using Newtonsoft.Json;
namespace Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher
{
@@ -75,13 +78,13 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher
/// <summary>
/// 图标缓存
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[JsonIgnore]
private ImageSource _iconCache;
/// <summary>
/// 获取应用程序图标
/// </summary>
[Newtonsoft.Json.JsonIgnore]
[JsonIgnore]
public ImageSource Icon
{
get
@@ -241,28 +244,28 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher
}
// 检查文件是否存在
if (!System.IO.File.Exists(Path) && !Path.Contains(":\\"))
if (!File.Exists(Path) && !Path.Contains(":\\"))
{
// 可能是系统命令,如explorer.exe
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo
ProcessStartInfo psi = new ProcessStartInfo
{
FileName = Path,
UseShellExecute = true
};
System.Diagnostics.Process.Start(psi);
Process.Start(psi);
}
else
{
// 使用Process.Start启动应用程序
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo
ProcessStartInfo psi = new ProcessStartInfo
{
FileName = Path,
UseShellExecute = true
};
System.Diagnostics.Process.Start(psi);
Process.Start(psi);
}
LogHelper.WriteLogToFile($"已启动应用程序: {Path}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"已启动应用程序: {Path}");
}
catch (Exception ex)
{
@@ -315,15 +318,15 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher
}
}
[System.Runtime.InteropServices.DllImport("Shell32.dll", EntryPoint = "ExtractIconEx")]
[DllImport("Shell32.dll", EntryPoint = "ExtractIconEx")]
private static extern int ExtractIconEx(
[System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPStr)] string lpszFile,
[MarshalAs(UnmanagedType.LPStr)] string lpszFile,
int nIconIndex,
out IntPtr phiconLarge,
out IntPtr phiconSmall,
int nIcons);
[System.Runtime.InteropServices.DllImport("User32.dll")]
[DllImport("User32.dll")]
private static extern int DestroyIcon(IntPtr hIcon);
}
}
@@ -1,9 +1,10 @@
using Microsoft.Win32;
using System;
using System.ComponentModel;
using System.IO;
using System.Windows;
using System.Windows.Controls;
using Ink_Canvas.Windows;
using Microsoft.Win32;
namespace Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher
{
@@ -77,7 +78,7 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher
// 保存配置
_plugin.SaveConfig();
LogHelper.WriteLogToFile($"启动台按钮位置已更改为: {_plugin.Config.ButtonPosition}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"启动台按钮位置已更改为: {_plugin.Config.ButtonPosition}");
}
catch (Exception ex)
{
@@ -283,9 +284,9 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher
pathTextBox.Text = dialog.FileName;
// 如果选择的是.exe文件,自动获取文件名填入名称字段
if (System.IO.Path.GetExtension(dialog.FileName).ToLower() == ".exe")
if (Path.GetExtension(dialog.FileName).ToLower() == ".exe")
{
string fileName = System.IO.Path.GetFileNameWithoutExtension(dialog.FileName);
string fileName = Path.GetFileNameWithoutExtension(dialog.FileName);
// 只有在名称字段为空或者是新建项目时才自动填入
if (string.IsNullOrWhiteSpace(nameTextBox.Text) || isNew)
{
@@ -1,10 +1,16 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Threading;
namespace Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher
{
@@ -21,7 +27,7 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher
/// <summary>
/// 是否处于固定模式
/// </summary>
private bool _isFixMode = false;
private bool _isFixMode;
/// <summary>
/// 应用项按钮列表
@@ -51,11 +57,11 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher
LoadLauncherItems();
// 添加鼠标按下事件(用于拖动窗口)
this.MouseDown += (s, e) =>
MouseDown += (s, e) =>
{
if (e.ChangedButton == MouseButton.Left && e.ButtonState == MouseButtonState.Pressed)
{
this.DragMove();
DragMove();
}
};
@@ -145,18 +151,18 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher
string appPath = item.Path;
string appName = item.Name;
LogHelper.WriteLogToFile($"点击启动应用: {appName}, 路径: {appPath}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"点击启动应用: {appName}, 路径: {appPath}");
// 首先标记窗口正在关闭
IsClosing = true;
// 创建一个应用启动任务
var launchTask = new System.Threading.Tasks.Task(() =>
var launchTask = new Task(() =>
{
try
{
// 等待一段时间,确保窗口关闭流程已经开始
System.Threading.Thread.Sleep(200);
Thread.Sleep(200);
// 使用UI线程启动应用
Application.Current.Dispatcher.Invoke(() =>
@@ -164,18 +170,18 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher
try
{
// 检查应用路径是否存在
if (System.IO.File.Exists(appPath) || !appPath.Contains(":\\"))
if (File.Exists(appPath) || !appPath.Contains(":\\"))
{
// 创建进程启动信息
var psi = new System.Diagnostics.ProcessStartInfo
var psi = new ProcessStartInfo
{
FileName = appPath,
UseShellExecute = true,
};
// 启动应用程序
var process = System.Diagnostics.Process.Start(psi);
LogHelper.WriteLogToFile($"应用程序 {appName} 已启动", LogHelper.LogType.Info);
var process = Process.Start(psi);
LogHelper.WriteLogToFile($"应用程序 {appName} 已启动");
}
else
{
@@ -205,7 +211,7 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher
// 启动应用程序任务
launchTask.Start();
}), System.Windows.Threading.DispatcherPriority.Background);
}), DispatcherPriority.Background);
}
catch (Exception ex)
{
@@ -406,7 +412,7 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher
{
LogHelper.WriteLogToFile($"延迟关闭窗口时出错: {ex.Message}", LogHelper.LogType.Error);
}
}), System.Windows.Threading.DispatcherPriority.Background);
}), DispatcherPriority.Background);
}
}
catch (Exception ex)
@@ -418,12 +424,12 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher
/// <summary>
/// 窗口是否正在关闭
/// </summary>
private bool IsClosing { get; set; } = false;
private bool IsClosing { get; set; }
/// <summary>
/// 重写OnClosing方法,标记窗口正在关闭
/// </summary>
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
protected override void OnClosing(CancelEventArgs e)
{
IsClosing = true;
base.OnClosing(e);
@@ -1,5 +1,3 @@
using Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
@@ -7,6 +5,8 @@ using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using Ink_Canvas.Helpers.Plugins.BuiltIn.SuperLauncher;
using Newtonsoft.Json;
namespace Ink_Canvas.Helpers.Plugins.BuiltIn
{
@@ -59,7 +59,7 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn
/// <summary>
/// 标记是否已添加到浮动栏
/// </summary>
private bool _isAddedToFloatingBar = false;
private bool _isAddedToFloatingBar;
#endregion
@@ -81,7 +81,7 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn
// 加载配置
LoadConfig();
LogHelper.WriteLogToFile("超级启动台插件已初始化", LogHelper.LogType.Info);
LogHelper.WriteLogToFile("超级启动台插件已初始化");
}
catch (Exception ex)
{
@@ -100,7 +100,7 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn
if (_launcherButton == null)
{
_launcherButton = new LauncherButton(this);
LogHelper.WriteLogToFile("超级启动台按钮已创建", LogHelper.LogType.Info);
LogHelper.WriteLogToFile("超级启动台按钮已创建");
}
// 添加启动台按钮到浮动栏
@@ -112,7 +112,7 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn
// 保存插件配置
SavePluginSettings();
LogHelper.WriteLogToFile("超级启动台插件已启用", LogHelper.LogType.Info);
LogHelper.WriteLogToFile("超级启动台插件已启用");
}
catch (Exception ex)
{
@@ -143,7 +143,7 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn
// 保存插件配置
SavePluginSettings();
LogHelper.WriteLogToFile("超级启动台插件已禁用", LogHelper.LogType.Info);
LogHelper.WriteLogToFile("超级启动台插件已禁用");
}
catch (Exception ex)
{
@@ -193,7 +193,7 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn
// 保存配置
SaveConfig();
LogHelper.WriteLogToFile($"超级启动台插件设置已保存", LogHelper.LogType.Info);
LogHelper.WriteLogToFile("超级启动台插件设置已保存");
}
catch (Exception ex)
{
@@ -250,7 +250,7 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn
string json = JsonConvert.SerializeObject(Config, Formatting.Indented);
File.WriteAllText(_configPath, json);
LogHelper.WriteLogToFile("超级启动台配置已保存", LogHelper.LogType.Info);
LogHelper.WriteLogToFile("超级启动台配置已保存");
}
catch (Exception ex)
{
@@ -332,12 +332,12 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn
if (Config.ButtonPosition == LauncherButtonPosition.Left)
{
floatingBar.Children.Insert(0, buttonElement);
LogHelper.WriteLogToFile("启动台按钮已添加到浮动栏左侧", LogHelper.LogType.Info);
LogHelper.WriteLogToFile("启动台按钮已添加到浮动栏左侧");
}
else
{
floatingBar.Children.Add(buttonElement);
LogHelper.WriteLogToFile("启动台按钮已添加到浮动栏右侧", LogHelper.LogType.Info);
LogHelper.WriteLogToFile("启动台按钮已添加到浮动栏右侧");
}
_isAddedToFloatingBar = true;
@@ -424,7 +424,7 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn
if (floatingBar.Children.Contains(buttonElement))
{
floatingBar.Children.Remove(buttonElement);
LogHelper.WriteLogToFile("启动台按钮已从浮动栏移除", LogHelper.LogType.Info);
LogHelper.WriteLogToFile("启动台按钮已从浮动栏移除");
}
_isAddedToFloatingBar = false;
@@ -448,7 +448,7 @@ namespace Ink_Canvas.Helpers.Plugins.BuiltIn
{
RemoveLauncherButtonFromFloatingBar();
AddLauncherButtonToFloatingBar();
LogHelper.WriteLogToFile($"启动台按钮位置已更新为: {Config.ButtonPosition}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"启动台按钮位置已更新为: {Config.ButtonPosition}");
}
}
catch (Exception ex)
@@ -12,7 +12,7 @@ namespace Ink_Canvas.Helpers.Plugins
private readonly string _pluginPath;
private readonly string _pluginName;
private readonly Version _pluginVersion;
private bool _isInitialized = false;
private bool _isInitialized;
/// <summary>
/// 创建 ICCPP 插件适配器
@@ -104,7 +104,7 @@ namespace Ink_Canvas.Helpers.Plugins
// 这里可以添加 .iccpp 插件的初始化逻辑
// 例如,根据文件格式加载特定资源
LogHelper.WriteLogToFile($"ICCPP 插件 {Name} 已初始化", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"ICCPP 插件 {Name} 已初始化");
_isInitialized = true;
}
catch (Exception ex)
@@ -126,7 +126,7 @@ namespace Ink_Canvas.Helpers.Plugins
// 例如,加载动态库、注册事件等
base.Enable(); // 设置启用状态并触发事件
LogHelper.WriteLogToFile($"ICCPP 插件 {Name} 已启用", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"ICCPP 插件 {Name} 已启用");
}
catch (Exception ex)
{
@@ -147,7 +147,7 @@ namespace Ink_Canvas.Helpers.Plugins
// 例如,卸载动态库、注销事件等
base.Disable(); // 设置禁用状态并触发事件
LogHelper.WriteLogToFile($"ICCPP 插件 {Name} 已禁用", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"ICCPP 插件 {Name} 已禁用");
}
catch (Exception ex)
{
@@ -165,7 +165,7 @@ namespace Ink_Canvas.Helpers.Plugins
// 这里可以添加 .iccpp 插件的清理逻辑
// 例如,释放资源等
LogHelper.WriteLogToFile($"ICCPP 插件 {Name} 已清理资源", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"ICCPP 插件 {Name} 已清理资源");
}
catch (Exception ex)
{
+6 -6
View File
@@ -11,7 +11,7 @@ namespace Ink_Canvas.Helpers.Plugins
/// <summary>
/// 插件状态(私有字段)
/// </summary>
private bool _isEnabled = false;
private bool _isEnabled;
/// <summary>
/// 插件状态(公共属性)
@@ -80,7 +80,7 @@ namespace Ink_Canvas.Helpers.Plugins
try
{
string name = Name;
LogHelper.WriteLogToFile($"初始化插件: ID={Id}, 名称={name ?? ""}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"初始化插件: ID={Id}, 名称={name ?? ""}");
if (string.IsNullOrEmpty(name))
{
@@ -92,7 +92,7 @@ namespace Ink_Canvas.Helpers.Plugins
LogHelper.WriteLogToFile($"获取插件名称时出错: {ex.Message}", LogHelper.LogType.Error);
}
LogHelper.WriteLogToFile($"插件 {Name} 已初始化", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"插件 {Name} 已初始化");
}
/// <summary>
@@ -103,7 +103,7 @@ namespace Ink_Canvas.Helpers.Plugins
if (!IsEnabled)
{
IsEnabled = true;
LogHelper.WriteLogToFile($"插件 {Name} 已启用", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"插件 {Name} 已启用");
}
}
@@ -115,7 +115,7 @@ namespace Ink_Canvas.Helpers.Plugins
if (IsEnabled)
{
IsEnabled = false;
LogHelper.WriteLogToFile($"插件 {Name} 已禁用", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"插件 {Name} 已禁用");
}
}
@@ -134,7 +134,7 @@ namespace Ink_Canvas.Helpers.Plugins
/// </summary>
public virtual void Cleanup()
{
LogHelper.WriteLogToFile($"插件 {Name} 已卸载", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"插件 {Name} 已卸载");
}
/// <summary>
+69 -69
View File
@@ -8,6 +8,9 @@ using System.Security.Cryptography;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using Ink_Canvas.Windows;
using Newtonsoft.Json;
using Timer = System.Timers.Timer;
namespace Ink_Canvas.Helpers.Plugins
{
@@ -51,12 +54,12 @@ namespace Ink_Canvas.Helpers.Plugins
/// <summary>
/// 配置是否已更改但未保存
/// </summary>
private bool _configDirty = false;
private bool _configDirty;
/// <summary>
/// 配置自动保存计时器
/// </summary>
private System.Timers.Timer _autoSaveTimer;
private Timer _autoSaveTimer;
/// <summary>
/// 加载的程序集缓存
@@ -80,7 +83,7 @@ namespace Ink_Canvas.Helpers.Plugins
LoadConfig();
// 初始化自动保存计时器(3秒)
_autoSaveTimer = new System.Timers.Timer(3000);
_autoSaveTimer = new Timer(3000);
_autoSaveTimer.Elapsed += (s, e) =>
{
if (_configDirty)
@@ -108,22 +111,22 @@ namespace Ink_Canvas.Helpers.Plugins
{
try
{
LogHelper.WriteLogToFile("开始初始化插件系统", LogHelper.LogType.Info);
LogHelper.WriteLogToFile("开始初始化插件系统");
// 加载配置
LoadConfig();
LogHelper.WriteLogToFile($"已从配置文件加载 {PluginStates.Count} 个插件状态记录", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"已从配置文件加载 {PluginStates.Count} 个插件状态记录");
// 加载内置插件
LogHelper.WriteLogToFile("正在加载内置插件...", LogHelper.LogType.Info);
LogHelper.WriteLogToFile("正在加载内置插件...");
LoadBuiltInPlugins();
// 加载外部插件
LogHelper.WriteLogToFile("正在加载外部插件...", LogHelper.LogType.Info);
LogHelper.WriteLogToFile("正在加载外部插件...");
LoadExternalPlugins();
// 启用已配置为启用的插件
LogHelper.WriteLogToFile("正在应用配置的插件状态...", LogHelper.LogType.Info);
LogHelper.WriteLogToFile("正在应用配置的插件状态...");
EnableConfiguredPlugins();
// 设置定期检查热重载
@@ -132,7 +135,7 @@ namespace Ink_Canvas.Helpers.Plugins
// 保存初始化后的配置(可能有新插件)
SaveConfig();
LogHelper.WriteLogToFile($"插件系统初始化完成,共加载 {Plugins.Count} 个插件", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"插件系统初始化完成,共加载 {Plugins.Count} 个插件");
}
catch (Exception ex)
{
@@ -166,7 +169,7 @@ namespace Ink_Canvas.Helpers.Plugins
{
plugin.Initialize();
Plugins.Add(plugin);
LogHelper.WriteLogToFile($"已加载内置插件: {plugin.Name} v{plugin.Version}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"已加载内置插件: {plugin.Name} v{plugin.Version}");
}
}
catch (Exception ex)
@@ -200,7 +203,7 @@ namespace Ink_Canvas.Helpers.Plugins
.Concat(Directory.GetFiles(PluginsDirectory, "*.dll", SearchOption.TopDirectoryOnly))
.ToArray();
LogHelper.WriteLogToFile($"发现 {pluginFiles.Length} 个外部插件文件", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"发现 {pluginFiles.Length} 个外部插件文件");
foreach (var pluginFile in pluginFiles)
{
@@ -258,8 +261,7 @@ namespace Ink_Canvas.Helpers.Plugins
plugin.Initialize();
Plugins.Add(plugin);
LogHelper.WriteLogToFile($"已加载外部插件: {plugin.Name} v{plugin.Version} 来自 {Path.GetFileName(pluginPath)}",
LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"已加载外部插件: {plugin.Name} v{plugin.Version} 来自 {Path.GetFileName(pluginPath)}");
return plugin;
}
@@ -297,8 +299,7 @@ namespace Ink_Canvas.Helpers.Plugins
// 添加到插件列表
Plugins.Add(pluginAdapter);
LogHelper.WriteLogToFile($"已创建 ICCPP 插件适配器: {pluginAdapter.Name} 来自 {Path.GetFileName(pluginPath)}",
LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"已创建 ICCPP 插件适配器: {pluginAdapter.Name} 来自 {Path.GetFileName(pluginPath)}");
return pluginAdapter;
}
@@ -371,13 +372,13 @@ namespace Ink_Canvas.Helpers.Plugins
{
plugin.Enable();
enabledCount++;
LogHelper.WriteLogToFile($"根据配置启用插件: {plugin.Name}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"根据配置启用插件: {plugin.Name}");
}
else
{
plugin.Disable();
disabledCount++;
LogHelper.WriteLogToFile($"根据配置禁用插件: {plugin.Name}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"根据配置禁用插件: {plugin.Name}");
}
}
else
@@ -406,7 +407,7 @@ namespace Ink_Canvas.Helpers.Plugins
{
plugin.Disable();
disabledCount++;
LogHelper.WriteLogToFile($"插件不在配置中,默认禁用: {plugin.Name}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"插件不在配置中,默认禁用: {plugin.Name}");
}
}
}
@@ -423,7 +424,7 @@ namespace Ink_Canvas.Helpers.Plugins
TriggerAutoSave();
}
LogHelper.WriteLogToFile($"已应用插件配置: 启用 {enabledCount} 个,禁用 {disabledCount} 个,错误 {errorCount} 个", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"已应用插件配置: 启用 {enabledCount} 个,禁用 {disabledCount} 个,错误 {errorCount} 个");
}
/// <summary>
@@ -443,11 +444,11 @@ namespace Ink_Canvas.Helpers.Plugins
PluginStates[pluginTypeName] = isEnabled;
_configDirty = true;
LogHelper.WriteLogToFile($"插件状态变更: {plugin.Name} = {(isEnabled ? "" : "")}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"插件状态变更: {plugin.Name} = {(isEnabled ? "" : "")}");
// 立即同步保存配置(不再使用延迟自动保存)
SaveConfig();
LogHelper.WriteLogToFile($"插件 {plugin.Name} 状态已立即保存到配置文件", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"插件 {plugin.Name} 状态已立即保存到配置文件");
}
}
}
@@ -534,14 +535,14 @@ namespace Ink_Canvas.Helpers.Plugins
return;
}
LogHelper.WriteLogToFile($"开始热重载插件: {plugin.Name} ({Path.GetFileName(pluginPath)})", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"开始热重载插件: {plugin.Name} ({Path.GetFileName(pluginPath)})");
// 保存插件的当前状态
bool wasEnabled = plugin.IsEnabled;
string pluginTypeName = plugin.GetType().FullName;
// 卸载插件
UnloadPlugin(plugin, false);
UnloadPlugin(plugin);
// 从加载缓存中移除
if (_loadedAssemblies.ContainsKey(pluginPath))
@@ -575,7 +576,7 @@ namespace Ink_Canvas.Helpers.Plugins
SaveConfig();
}
LogHelper.WriteLogToFile($"插件 {newPlugin.Name} v{newPlugin.Version} 热重载成功", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"插件 {newPlugin.Name} v{newPlugin.Version} 热重载成功");
// 通知UI刷新
NotifyUIRefresh();
@@ -626,7 +627,7 @@ namespace Ink_Canvas.Helpers.Plugins
}
}
LogHelper.WriteLogToFile($"已卸载插件: {pluginName}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"已卸载插件: {pluginName}");
}
catch (Exception ex)
{
@@ -677,7 +678,7 @@ namespace Ink_Canvas.Helpers.Plugins
// 保存配置
SaveConfig();
LogHelper.WriteLogToFile($"已删除插件: {pluginName}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"已删除插件: {pluginName}");
return true;
}
catch (Exception ex)
@@ -701,7 +702,7 @@ namespace Ink_Canvas.Helpers.Plugins
if (currentState == enable)
{
// 已经是目标状态,无需操作
LogHelper.WriteLogToFile($"插件 {plugin.Name} 已经是 {(enable ? "" : "")} 状态,无需切换", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"插件 {plugin.Name} 已经是 {(enable ? "" : "")} 状态,无需切换");
return;
}
@@ -709,7 +710,7 @@ namespace Ink_Canvas.Helpers.Plugins
string pluginName = plugin.Name;
string pluginTypeName = plugin.GetType().FullName;
LogHelper.WriteLogToFile($"开始切换插件 {pluginName} 状态为: {(enable ? "" : "")}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"开始切换插件 {pluginName} 状态为: {(enable ? "" : "")}");
// 首先更新配置状态
PluginStates[pluginTypeName] = enable;
@@ -731,13 +732,13 @@ namespace Ink_Canvas.Helpers.Plugins
if (enable)
{
plugin.Enable();
LogHelper.WriteLogToFile($"插件 {pluginName} 已启用", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"插件 {pluginName} 已启用");
}
else
{
// 禁用前先记录是否为内置插件
bool isBuiltIn = plugin.IsBuiltIn;
LogHelper.WriteLogToFile($"尝试禁用{(isBuiltIn ? "" : "")}插件 {pluginName}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"尝试禁用{(isBuiltIn ? "" : "")}插件 {pluginName}");
// 禁用插件
plugin.Disable();
@@ -762,13 +763,13 @@ namespace Ink_Canvas.Helpers.Plugins
if (enabledProperty != null)
{
enabledProperty.SetValue(pb4, false);
LogHelper.WriteLogToFile($"已通过反射强制设置插件 {pluginName} 为禁用状态", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"已通过反射强制设置插件 {pluginName} 为禁用状态");
}
}
}
}
LogHelper.WriteLogToFile($"插件 {pluginName} 已禁用", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"插件 {pluginName} 已禁用");
}
}
catch (Exception ex)
@@ -785,7 +786,7 @@ namespace Ink_Canvas.Helpers.Plugins
// 对于内置插件,执行专门的处理
if (pluginInstance.IsBuiltIn)
{
LogHelper.WriteLogToFile($"处理内置插件 {pluginName} 状态变更", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"处理内置插件 {pluginName} 状态变更");
// 对于内置插件,我们需要确保状态正确应用
bool finalState = pluginInstance.IsEnabled;
@@ -811,7 +812,7 @@ namespace Ink_Canvas.Helpers.Plugins
if (enabledProperty != null)
{
enabledProperty.SetValue(pluginInstance, expectedState);
LogHelper.WriteLogToFile($"已通过反射强制设置内置插件 {pluginName} 状态为 {(expectedState ? "" : "")}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"已通过反射强制设置内置插件 {pluginName} 状态为 {(expectedState ? "" : "")}");
}
}
}
@@ -827,7 +828,7 @@ namespace Ink_Canvas.Helpers.Plugins
{
if (!string.IsNullOrEmpty(pluginInstance.PluginPath) && File.Exists(pluginInstance.PluginPath))
{
LogHelper.WriteLogToFile($"开始重载外部插件 {pluginName}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"开始重载外部插件 {pluginName}");
// 使用调度器确保在UI线程执行热重载
if (Application.Current != null && Application.Current.Dispatcher != null)
@@ -835,14 +836,14 @@ namespace Ink_Canvas.Helpers.Plugins
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
ReloadPlugin(pluginInstance);
LogHelper.WriteLogToFile($"插件 {pluginName} 已重载以应用{(enable ? "" : "")}状态", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"插件 {pluginName} 已重载以应用{(enable ? "" : "")}状态");
}));
}
else
{
// 当前不在UI线程,直接重载
ReloadPlugin(pluginInstance);
LogHelper.WriteLogToFile($"插件 {pluginName} 已重载以应用{(enable ? "" : "")}状态", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"插件 {pluginName} 已重载以应用{(enable ? "" : "")}状态");
}
}
else
@@ -865,7 +866,7 @@ namespace Ink_Canvas.Helpers.Plugins
NotifyUIRefresh();
}
LogHelper.WriteLogToFile($"插件 {pluginName} 状态切换完成", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"插件 {pluginName} 状态切换完成");
}
catch (Exception ex)
{
@@ -889,12 +890,12 @@ namespace Ink_Canvas.Helpers.Plugins
if (enable)
{
plugin.Enable();
LogHelper.WriteLogToFile($"实时应用: 已启用插件 {plugin.Name}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"实时应用: 已启用插件 {plugin.Name}");
}
else
{
plugin.Disable();
LogHelper.WriteLogToFile($"实时应用: 已禁用插件 {plugin.Name}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"实时应用: 已禁用插件 {plugin.Name}");
}
// 同步状态到插件自身的配置
@@ -904,7 +905,7 @@ namespace Ink_Canvas.Helpers.Plugins
{
// 保存插件设置(与启用状态无关)
pluginSettings.SavePluginSettings();
LogHelper.WriteLogToFile($"实时应用: 已保存插件 {plugin.Name} 设置", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"实时应用: 已保存插件 {plugin.Name} 设置");
}
catch (Exception ex)
{
@@ -940,7 +941,7 @@ namespace Ink_Canvas.Helpers.Plugins
// 执行热重载
ReloadPlugin(externalPlugin);
LogHelper.WriteLogToFile($"插件 {plugin.Name} 已成功热重载以应用实时状态", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"插件 {plugin.Name} 已成功热重载以应用实时状态");
}
catch (Exception ex)
{
@@ -964,7 +965,7 @@ namespace Ink_Canvas.Helpers.Plugins
}
}
LogHelper.WriteLogToFile($"插件 {plugin.Name} 实时状态已应用: {(enable ? "" : "")}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"插件 {plugin.Name} 实时状态已应用: {(enable ? "" : "")}");
}
catch (Exception ex)
{
@@ -986,7 +987,7 @@ namespace Ink_Canvas.Helpers.Plugins
// 通知任何可能打开的插件设置窗口刷新
foreach (Window window in Application.Current.Windows)
{
if (window is Windows.PluginSettingsWindow pluginWindow)
if (window is PluginSettingsWindow pluginWindow)
{
pluginWindow.RefreshPluginList();
break;
@@ -1009,7 +1010,7 @@ namespace Ink_Canvas.Helpers.Plugins
const int maxRetries = 3; // 最大重试次数
const int retryDelayMs = 300; // 重试延迟时间(毫秒)
LogHelper.WriteLogToFile($"开始从配置文件加载插件状态: {PluginConfigFile}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"开始从配置文件加载插件状态: {PluginConfigFile}");
// 确保至少有一个默认配置
Dictionary<string, bool> defaultConfig = new Dictionary<string, bool>();
@@ -1033,14 +1034,13 @@ namespace Ink_Canvas.Helpers.Plugins
json = reader.ReadToEnd();
}
var loadedStates = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, bool>>(json);
var loadedStates = JsonConvert.DeserializeObject<Dictionary<string, bool>>(json);
if (loadedStates != null && loadedStates.Count > 0)
{
PluginStates = loadedStates;
_configDirty = false; // 重置脏标记
LogHelper.WriteLogToFile($"成功从配置文件加载了 {PluginStates.Count} 个插件状态", LogHelper.LogType.Info);
return; // 成功加载,提前退出
LogHelper.WriteLogToFile($"成功从配置文件加载了 {PluginStates.Count} 个插件状态");
}
else
{
@@ -1051,13 +1051,13 @@ namespace Ink_Canvas.Helpers.Plugins
try
{
string backupJson = File.ReadAllText(PluginConfigBackupFile);
var backupStates = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, bool>>(backupJson);
var backupStates = JsonConvert.DeserializeObject<Dictionary<string, bool>>(backupJson);
if (backupStates != null && backupStates.Count > 0)
{
PluginStates = backupStates;
_configDirty = true; // 从备份加载,需要重新保存主配置
LogHelper.WriteLogToFile($"已从备份恢复 {PluginStates.Count} 个插件状态", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"已从备份恢复 {PluginStates.Count} 个插件状态");
return; // 成功从备份加载,提前退出
}
}
@@ -1082,13 +1082,13 @@ namespace Ink_Canvas.Helpers.Plugins
try
{
string backupJson = File.ReadAllText(PluginConfigBackupFile);
var backupStates = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, bool>>(backupJson);
var backupStates = JsonConvert.DeserializeObject<Dictionary<string, bool>>(backupJson);
if (backupStates != null && backupStates.Count > 0)
{
PluginStates = backupStates;
_configDirty = true; // 从备份加载,需要重新保存主配置
LogHelper.WriteLogToFile($"已从备份恢复 {PluginStates.Count} 个插件状态", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"已从备份恢复 {PluginStates.Count} 个插件状态");
return; // 成功从备份加载,提前退出
}
}
@@ -1111,7 +1111,7 @@ namespace Ink_Canvas.Helpers.Plugins
if (attempt < maxRetries)
{
LogHelper.WriteLogToFile($"加载配置失败 (尝试 {attempt}/{maxRetries}): {ex.Message},将在 {retryDelayMs}ms 后重试", LogHelper.LogType.Warning);
System.Threading.Thread.Sleep(retryDelayMs);
Thread.Sleep(retryDelayMs);
}
else
{
@@ -1178,10 +1178,10 @@ namespace Ink_Canvas.Helpers.Plugins
try
{
LogHelper.WriteLogToFile($"开始保存插件配置到: {PluginConfigFile}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"开始保存插件配置到: {PluginConfigFile}");
// 生成JSON数据
string json = Newtonsoft.Json.JsonConvert.SerializeObject(PluginStates, Newtonsoft.Json.Formatting.Indented);
string json = JsonConvert.SerializeObject(PluginStates, Formatting.Indented);
string tempFile = PluginConfigFile + ".temp"; // 临时文件路径
// 确保目录存在
@@ -1189,7 +1189,7 @@ namespace Ink_Canvas.Helpers.Plugins
if (!Directory.Exists(configDir))
{
Directory.CreateDirectory(configDir);
LogHelper.WriteLogToFile($"创建配置目录: {configDir}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"创建配置目录: {configDir}");
}
// 先备份当前配置
@@ -1217,7 +1217,7 @@ namespace Ink_Canvas.Helpers.Plugins
{
// 重置脏标记
_configDirty = false;
LogHelper.WriteLogToFile($"插件配置已成功保存到磁盘: {PluginConfigFile}, 共 {PluginStates.Count} 个插件状态", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"插件配置已成功保存到磁盘: {PluginConfigFile}, 共 {PluginStates.Count} 个插件状态");
return;
}
}
@@ -1226,7 +1226,7 @@ namespace Ink_Canvas.Helpers.Plugins
if (attempt < maxRetries)
{
LogHelper.WriteLogToFile($"保存配置失败 (尝试 {attempt}/{maxRetries}): {ex.Message},将在 {retryDelayMs}ms 后重试", LogHelper.LogType.Warning);
System.Threading.Thread.Sleep(retryDelayMs);
Thread.Sleep(retryDelayMs);
}
else
{
@@ -1255,7 +1255,7 @@ namespace Ink_Canvas.Helpers.Plugins
// 重置脏标记
_configDirty = false;
LogHelper.WriteLogToFile($"使用临时文件方式成功保存配置: {PluginConfigFile}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"使用临时文件方式成功保存配置: {PluginConfigFile}");
return;
}
catch (Exception fallbackEx)
@@ -1302,7 +1302,7 @@ namespace Ink_Canvas.Helpers.Plugins
{
try
{
LogHelper.WriteLogToFile("开始从配置文件重新加载插件状态", LogHelper.LogType.Info);
LogHelper.WriteLogToFile("开始从配置文件重新加载插件状态");
// 保存当前配置状态,以便在加载失败时回滚
Dictionary<string, bool> previousStates = new Dictionary<string, bool>(PluginStates);
@@ -1318,7 +1318,7 @@ namespace Ink_Canvas.Helpers.Plugins
return;
}
LogHelper.WriteLogToFile($"已加载 {PluginStates.Count} 个插件状态,开始应用...", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"已加载 {PluginStates.Count} 个插件状态,开始应用...");
// 对比配置,查找变更的插件
foreach (var plugin in Plugins.ToList()) // 创建副本进行遍历,避免集合修改异常
@@ -1333,7 +1333,7 @@ namespace Ink_Canvas.Helpers.Plugins
// 如果状态需要变更
if (currentlyEnabled != shouldBeEnabled)
{
LogHelper.WriteLogToFile($"应用插件 {plugin.Name} 的配置状态: {(shouldBeEnabled ? "" : "")}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"应用插件 {plugin.Name} 的配置状态: {(shouldBeEnabled ? "" : "")}");
if (shouldBeEnabled)
{
@@ -1352,7 +1352,7 @@ namespace Ink_Canvas.Helpers.Plugins
{
// 记录禁用信息,特别是内置插件
bool isBuiltIn = plugin.IsBuiltIn;
LogHelper.WriteLogToFile($"尝试禁用{(isBuiltIn ? "" : "")}插件 {plugin.Name}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"尝试禁用{(isBuiltIn ? "" : "")}插件 {plugin.Name}");
// 禁用插件
plugin.Disable();
@@ -1368,7 +1368,7 @@ namespace Ink_Canvas.Helpers.Plugins
if (enabledProperty != null)
{
enabledProperty.SetValue(builtInPluginBase, false);
LogHelper.WriteLogToFile($"已通过反射强制禁用内置插件 {plugin.Name}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"已通过反射强制禁用内置插件 {plugin.Name}");
}
}
}
@@ -1397,7 +1397,7 @@ namespace Ink_Canvas.Helpers.Plugins
{
// 插件不在配置中,将其添加为禁用状态
PluginStates[pluginTypeName] = false;
LogHelper.WriteLogToFile($"插件 {plugin.Name} 不在配置中,默认设置为禁用状态", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"插件 {plugin.Name} 不在配置中,默认设置为禁用状态");
// 如果当前是启用状态,则禁用它
if (plugin is PluginBase pluginBase && pluginBase.IsEnabled)
@@ -1405,7 +1405,7 @@ namespace Ink_Canvas.Helpers.Plugins
try
{
bool isBuiltIn = plugin.IsBuiltIn;
LogHelper.WriteLogToFile($"尝试禁用未配置的{(isBuiltIn ? "" : "")}插件 {plugin.Name}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"尝试禁用未配置的{(isBuiltIn ? "" : "")}插件 {plugin.Name}");
plugin.Disable();
@@ -1418,7 +1418,7 @@ namespace Ink_Canvas.Helpers.Plugins
if (enabledProperty != null)
{
enabledProperty.SetValue(pluginBase, false);
LogHelper.WriteLogToFile($"已通过反射强制禁用未配置的内置插件 {plugin.Name}", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"已通过反射强制禁用未配置的内置插件 {plugin.Name}");
}
}
}
@@ -1440,7 +1440,7 @@ namespace Ink_Canvas.Helpers.Plugins
// 通知任何可能打开的插件设置窗口刷新
foreach (Window window in Application.Current.Windows)
{
if (window is Windows.PluginSettingsWindow pluginWindow)
if (window is PluginSettingsWindow pluginWindow)
{
pluginWindow.RefreshPluginList();
}
@@ -1448,7 +1448,7 @@ namespace Ink_Canvas.Helpers.Plugins
});
}
LogHelper.WriteLogToFile("插件状态已从配置文件重新加载完成", LogHelper.LogType.Info);
LogHelper.WriteLogToFile("插件状态已从配置文件重新加载完成");
}
catch (Exception ex)
{
+5 -5
View File
@@ -53,7 +53,7 @@ namespace Ink_Canvas.Helpers.Plugins
// TODO: 在这里进行插件初始化工作
// 示例:记录初始化信息
LogHelper.WriteLogToFile($"插件 {Name} 开始初始化", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"插件 {Name} 开始初始化");
// 示例:加载配置
LoadConfig();
@@ -61,7 +61,7 @@ namespace Ink_Canvas.Helpers.Plugins
// 示例:注册自定义事件
// MainWindow.Instance.SomeEvent += OnSomeEvent;
LogHelper.WriteLogToFile($"插件 {Name} 初始化完成", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"插件 {Name} 初始化完成");
}
/// <summary>
@@ -75,7 +75,7 @@ namespace Ink_Canvas.Helpers.Plugins
// TODO: 在这里启用插件功能
LogHelper.WriteLogToFile($"插件 {Name} 已启用", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"插件 {Name} 已启用");
}
/// <summary>
@@ -89,7 +89,7 @@ namespace Ink_Canvas.Helpers.Plugins
// TODO: 在这里禁用插件功能
LogHelper.WriteLogToFile($"插件 {Name} 已禁用", LogHelper.LogType.Info);
LogHelper.WriteLogToFile($"插件 {Name} 已禁用");
}
/// <summary>
@@ -270,7 +270,7 @@ namespace Ink_Canvas.Helpers.Plugins
panel.Children.Add(button);
// 设置控件内容
this.Content = panel;
Content = panel;
}
}
}