src/docs/plugin-market-management.md
STranslate/ViewModels/Pages/PluginViewModel.cs
ToggleMarketViewAsync():已安装/市场视图切换。LoadPluginsAsync():市场插件加载。DownloadPluginAsync() / CancelDownload():下载、取消、安装、升级。AddPluginAsync() / InstallPluginsAsync() / DeletePluginAsync():本地安装与卸载。STranslate/Views/Pages/PluginPage.xaml
STranslate/Services/PluginInstance.cs
PluginService:对 PluginManager 安装/升级/卸载能力的 ViewModel 侧封装。ToggleMarketViewAsync()。LoadPluginsAsync(),避免设置页初始化阻塞。LoadPluginsAsync() 执行:
GetPluginsJsonUrl() 获取插件 ID 列表。plugin.json(先 main,404 回退 master)。Languages/zh-cn.json 覆盖名称与描述。PluginMarketInfo 并分批写入 UI 集合。UpdatePluginStatus() 以 PluginID 对比本地插件,计算 IsInstalled、CanUpgrade、InstalledVersion。DownloadPluginAsync(plugin) 创建取消令牌并显示进度。Settings.PluginDownloadProxy 选择下载 URL(GitHub 直连 / ghproxy 镜像 / 自定义)。IHttpService.DownloadFileAsync() 下载 zip,重命名为 .spkg。_pluginService.InstallPlugin(spkgPath):
RequiredUpgrade:弹窗确认升级,调用 _pluginService.UpgradePlugin()。UACHelper.Run(_settings.StartMode) + App.Current.Shutdown()。plugin.IsPendingRestart = true。.spkg 后走与市场同一安装流程。DeletePluginAsync() 先确认,再调用 _pluginService.UninstallPlugin(),并提示重启使目录标记删除生效。PluginMarketInfo
PluginId/Name/Type/Version/DownloadUrl/IconUrl。IsInstalled、CanUpgrade、IsDownloading、IsPendingRestart。ActionStatus:Download/Installed/Upgrade/Downloading/PendingRestart。Settings)
PluginMarketCdnSourceCustomPluginMarketCdnUrlPluginDownloadProxyCustomDownloadProxyUrlSTranslate/ViewModels/Pages/PluginViewModel.csSTranslate/Views/Pages/PluginPage.xamlSTranslate/Services/PluginInstance.csSTranslate/Core/PluginManager.csSTranslate/Core/HttpService.csPluginMarketInfo,再改加载解析与 XAML 绑定模板。Settings 枚举、PluginViewModel URL 构建分支、设置页配置项。PluginLoadMaxConcurrency 与 PluginUiBatchSize。HandleInstallResultAsync() 与 PromptRestartAsync(),避免出现“已升级但状态未刷新”。