From 04aadad0740491ccb77cbd4aae7fc696b1d4ffb6 Mon Sep 17 00:00:00 2001 From: MakesYT <2696703792@qq.com> Date: Mon, 24 Feb 2025 21:27:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E6=8F=92=E4=BB=B6=E5=90=8E=E5=8D=B8=E8=BD=BD?= =?UTF-8?q?=E5=86=85=E5=AD=98=E6=BA=A2=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Core/SDKs/Services/Plugin/PluginManager.cs | 30 ++++++++++++++++------ 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/Core/SDKs/Services/Plugin/PluginManager.cs b/Core/SDKs/Services/Plugin/PluginManager.cs index 099f5aa..2dbf5c3 100644 --- a/Core/SDKs/Services/Plugin/PluginManager.cs +++ b/Core/SDKs/Services/Plugin/PluginManager.cs @@ -5,10 +5,11 @@ using System.IO.Compression; using System.Reflection; using System.Text; -using AvaloniaEdit.Utils; + using CommunityToolkit.Mvvm.Messaging; using Core.SDKs.CustomScenario; using Core.SDKs.Services.Config; +using Core.SDKs.Services.Onnx; using Core.ViewModel.Pages; using log4net; using Microsoft.Extensions.DependencyInjection; @@ -37,12 +38,12 @@ public static void Init() { PluginCore.Kitopia.ISearchItemTool = (ISearchItemTool)ServiceManager.Services.GetService(typeof(ISearchItemTool))!; - PluginCore.Kitopia.IClipboardService = ServiceExtensions.GetService(ServiceManager.Services); + PluginCore.Kitopia.IClipboardService =ServiceManager.Services.GetService()!; PluginCore.Kitopia.IToastService = (IToastService)ServiceManager.Services.GetService(typeof(IToastService))!; PluginCore.Kitopia._i18n = CustomScenarioGloble._i18n; PluginCore.Kitopia.ToolTipConverters = CustomScenarioGloble.ToolTipConverters; PluginCore.Kitopia.JsonConverters = CustomScenarioGloble.JsonConverters; - PluginCore.Kitopia.InferenceSessionManager = ServiceExtensions.GetService(ServiceManager.Services); + PluginCore.Kitopia.InferenceSessionManager = ServiceManager.Services.GetService()!; Load(true); } @@ -144,6 +145,10 @@ public static Type GetType(string[] strings) public static void EnablePlugin(PluginLocalInfo pluginInfoEx) { + if (EnablePlugins.ContainsKey(pluginInfoEx.ToPlgString())) + { + return; + } EnablePluginWithoutReloadOthers(pluginInfoEx); CustomScenarioManger.ReCheck(true); WeakReferenceMessenger.Default.Send( @@ -151,6 +156,11 @@ public static void EnablePlugin(PluginLocalInfo pluginInfoEx) } public static void EnablePluginWithoutReloadOthers(PluginLocalInfo pluginInfoEx) { + if (EnablePlugins.ContainsKey(pluginInfoEx.ToPlgString())) + { + return; + } + EnablePlugins.Add(pluginInfoEx.ToPlgString(), new Plugin(pluginInfoEx)); ConfigManger.Config.EnabledPluginInfos.Add(pluginInfoEx.PluginBaseInfo); @@ -265,7 +275,7 @@ public static (bool, ConcurrentDictionary) CheckDepe var onlinePluginInfo = await GetOnlinePluginInfo(pluginSignName); if (onlinePluginInfo is null) { - ServiceExtensions.GetService(ServiceManager.Services) + ServiceManager.Services.GetService() .Show("自动下载插件失败", $"未找到ID:{pluginSignName}的插件"); canLoad = false; results.TryAdd(pluginSignName, VersionCheckResult.依赖远端不存在); @@ -277,12 +287,12 @@ public static (bool, ConcurrentDictionary) CheckDepe if (downloadPluginOnline) { - ServiceExtensions.GetService(ServiceManager.Services) + ServiceManager.Services.GetService() .Show("自动下载插件成功", $"已自动下载并启用{onlinePluginInfo.Name}"); } else { - ServiceExtensions.GetService(ServiceManager.Services) + ServiceManager.Services.GetService() .Show("自动下载插件失败", $"下载ID:{pluginSignName}的插件时遇到错误"); results.TryAdd(pluginSignName, VersionCheckResult.依赖下载失败); } @@ -608,7 +618,7 @@ public static async Task Update(int pluginId, string pluginSign, int? targ { return false; } - UnloadPlugin(pluginLocalInfoByPlgStr); + await UnloadPlugin(pluginLocalInfoByPlgStr); if (pluginLocalInfoByPlgStr.UnloadFailed) { @@ -616,8 +626,12 @@ public static async Task Update(int pluginId, string pluginSign, int? targ } else { - await PluginManager.DownloadPluginAndEnable(pluginLocalInfoByPlgStr.PluginBaseInfo.Id, + var downloadPluginAndEnable = await PluginManager.DownloadPluginAndEnable(pluginLocalInfoByPlgStr.PluginBaseInfo.Id, pluginLocalInfoByPlgStr.PluginBaseInfo.NameSign, targetVersionId); + if (!downloadPluginAndEnable) + { + ServiceManager.Services.GetService()!.Show("更新插件失败", $"更新插件{pluginLocalInfoByPlgStr.PluginBaseInfo.Name}失败"); + } } } catch (Exception e)