Repository navigation
[1.2.0] - 2026-09-27
构建号:20260927012330A
新增功能
插件系统隔离
- 独立插件系统程序集
SMTCPlayer.PluginSystem:将插件宿主(发现/加载/启停/安装/卸载/任务轮询)从SMTCPlayer.Core整体迁出,仅依赖SMTCPlayer.PluginApi与SMTCPlayer.Logging,以PluginManager单一 facade 对外暴露全部能力 - 程序集级隔离:插件专属
PluginLoadContext禁止解析SMTCPlayer.Core/SMTCPlayer.PluginSystem/SMTCPlayer.WinUI/SMTCPlayer.Wpf,引用宿主程序集的插件加载失败并给出明确错误;SMTCPlayer.PluginApi保持单一程序集身份(契约零修改,现有插件无感) - 卸载生命周期管理:每插件独立取消令牌 → 在途事件/任务等待(≤3 秒)→
OnUnloadingAsync(≤3 秒)→ 释放全部强引用 → ALC 卸载与 GC 回收验证 - 插件广播池
PluginBroadcastPool:独立的有界队列(容量 256,DropOldest)+ 单读者顺序分发,插件与外部订阅者(LAN 服务)统一经池收发;采用序号缺口法精确统计丢弃量并周期性 Warn 汇总,单订阅者异常被隔离
插件安装与管理
- zip 插件包安装
PluginInstaller:解压暂存 → 校验清单/兼容性/Id 合法性 → 原子落位 → 自动加载;同 Id 升级先备份旧版本(保留最近 1 份),新版本激活失败自动回滚旧版本并恢复运行,杜绝"新旧均不可用"的静默状态 - 卸载:先移入回收站再删除(失败可恢复),可选连带清理插件数据与启用记录;内置插件仅可禁用、不支持卸载
- 独立插件管理窗口
PluginManagerWindow(WinUI):插件卡片列表(名称/版本/作者/描述/状态/加载错误)、启停开关、安装/卸载、重新扫描、打开插件目录与数据目录;设置面板移除内嵌插件列表,仅保留"插件管理"入口
局域网与外部协议
- 局域网实时通信服务(LAN 协议):C# 侧 TCP + 逐行 NDJSON 自有协议,默认端口 9000;PIN 经后端校验,支持
play/pause/toggle/next/previous/mute/volume/seek指令与get_status;状态变化实时推送给已鉴权连接;含 ping/pong 心跳与空闲超时回收- 资源限制:单条消息 64KB 上限、并发连接 16 上限、单连接鉴权尝试 5 次上限
smtcplayer://URI 协议:在 HKCU 注册(无需管理员,幂等自修复、设置页可开关);应用已运行时经单实例转发执行并置前窗口,未运行时拉起应用并在后端就绪后按序执行- 待执行队列:上限 16 条(满时丢最旧并记 Warn)、单条 60 秒超时作废
日志系统(重构)
- 独立日志程序集
SMTCPlayer.Logging:异步缓冲写入(有界队列 4096 + 专用后台写线程批量落盘),调用方不阻塞;退出限时 Flush(2 秒),拥塞丢弃计数周期上报 - 分类日志:按来源分类(Core/WinUI/Wpf/PluginSystem/LanProtocol/Plugin:<id> 等),保留
SMTC_LOG_LEVEL环境变量与调试模式开关 - 日志查看器
LogViewerWindow(WinUI):基于环形缓冲(最近 2000 条)实时滚动、可暂停/继续,支持级别/分类过滤、关键字搜索、自动滚动与导出视图
更新检查与更新日志
- 启动更新检查公告:应用启动后后台检查更新(每 24 小时节流并去重),发现新版本时提示用户并展示本次更新的要点——要点读取自网站静态资源
update.json的releaseNotes(与CHANGELOG.md同源生成);仅提示、不自动下载,检查失败静默处理不打扰 - 设置面板「查看更新日志」:一键查看当前最新版本的版本号、发布日期与更新要点,并可跳转网页查看完整更新日志
改进优化
- 插件日志隔离:每个插件独立
logs\plugins\<id>.log(全量级别、单文件 1MB 分卷);主日志仅镜像插件的 Warn/Error,便于独立排查 - 日志体积控制:主日志按日
smtc-YYYYMMDD.log+ 单文件 2MB 分卷,保留 7 天;50MB 总量上限覆盖整个logs\目录(含所有分卷与plugins\子目录),超限从最旧文件删除 - 日志噪声抑制:同(分类, 级别, 消息)10 秒窗口重复合并计数(
... (重复 N 次));Debug 级按分类限流(默认 120 行/分钟,超限丢弃并汇总 Warn);热路径刷屏日志降级(如封面更新 Info→Debug) - 日志目录迁移至
%LocalAppData%\SMTCPlayer\logs(安装版可写、更新不丢失);保留Logger静态门面按调用方程序集自动归类,现有调用点零改动,WPF 调试窗口仍可用 - Core 瘦身:
Core/Plugins/目录整体移除;依赖方向收敛为WinUI/Wpf → Core → PluginSystem → PluginApi,Logging为最底层共享件
问题修复
- 修复插件升级/卸载后旧文件仍被内存映射,导致备份目录单次删除失败、备份持续累积的问题(改为带重试的弹性删除)
- 修复 WinUI 版托盘右键菜单跟随应用窗口位置显示、窗口最小化时无法正确弹出的问题(改用
ContextMenuMode.PopupMenu+ContextFlyout,由系统在鼠标光标处弹出原生菜单,与窗口位置和状态解耦) - 修复 WinUI 版托盘右键「设置」被误绑定为弹出修改 PIN 对话框的问题(改为还原主窗口并打开设置面板,与标题栏设置按钮行为一致)
- 修复主窗口退出后子窗口(插件管理、日志查看器)未随之关闭、进程驻留不退出的问题(统一退出清理流程:停止轮询/局域网服务/插件与后端服务、关闭全部子窗口并释放托盘图标,收尾阶段显式结束进程,全程带超时兜底不阻塞)
文档更新
PLUGIN-DEVELOPMENT.md同步:新增隔离边界说明,补充 zip 安装/升级回滚/维护目录,更新日志输出格式与保护策略(仅改相关小节)