dsh-desktop-update-entry
给 DSH 桌面版在侧栏底部加一个常驻的「检查更新」入口。
为什么需要它
DSH 桌面版自带的更新指示器只在有更新活动时才渲染
(dsh-client-ui-settings-general 的 DesktopUpdateIndicator:phase === 'idle' 时直接 return null),
所以「已经是最新版」的时候,侧栏里没有任何手动检查更新的入口——
设置 → 通用 里的「当前版本」只是一行文字,托盘菜单只有「打开应用 / 退出」。
本插件补上这个入口:无论有没有更新,侧栏底部始终有一个可点的状态位。
显示什么
| 壳的相位 | 展开侧栏 | 收起侧栏 | 点击后 |
|---|---|---|---|
| 空闲(已是最新) | 「检查更新」 | 状态点 | 打开官方更新弹窗(壳会做一次检查) |
checking |
让位给官方指示器 | 转圈 | — |
available |
让位(官方显示「新版本 x.y.z」) | 状态点 | — |
downloading |
让位 | 转圈 | — |
verifying / installing |
让位 | 转圈 | — |
ready |
让位(官方显示「安装并重启」) | 状态点 | — |
error |
让位(官方显示「重试更新」) | 状态点 | — |
两条规则:
- 展开侧栏时互补:有更新/出错时官方指示器本来就会出现(就在右侧设置行里),
本入口此时返回
null让位,避免两个一模一样的按钮并排;空闲时官方不渲染,由本入口补上。 - 收起侧栏时兜底:官方指示器在窄状态(
wide: false)不渲染,所以本入口始终保留一个状态点。
入口出现在 sidebar.footer.action 席位(order: 1000,紧挨着右侧的「设置 / 更多」按钮),
与官方的 cordis 角标并列,不覆盖任何自带 UI。
它怎么工作
桌面壳在页面里注入了 globalThis.dshDesktop.updates(协议版本 1):
bridge.status() // Promise<presentation> → { phase, percent?, version? }
bridge.subscribe(listener) // 壳每次推送新相位都会回调
bridge.open() // Promise<void> → 打开官方更新弹窗
插件只做三件事:订阅这个桥、把状态渲染成一个按钮、点击时转发给 bridge.open()——
更新的检查、下载、校验、安装全部仍由官方壳执行,插件不碰任何文件、不发任何网络请求。
在普通浏览器(没有这个全局量)里插件完全静默,不注册任何 UI。
安装
# 从 GitHub 安装(推荐锁到 tag 或某个提交,见仓库 Releases)
dsh plugin --profile desktop add github:maxwell234smith/dsh-desktop-update-entry#v0.1.0
# 本地开发:直接链接源码目录
dsh plugin --profile desktop add link:D:\path\to\dsh-desktop-update-entry
也可以在 DSH 网页版 侧边栏 → 插件 → 安装 bundle 里填 github:maxwell234smith/dsh-desktop-update-entry。
装完刷新一次页面。零运行时依赖、零构建步骤。
测试
node --test
用 node:vm 把 lib/client.js 装进带假 window/document/react 的环境,
验证导出与席位注册、无桥时静默、八个相位的文案与可点状态、点击转发、以及订阅推送。
License
MIT
No comments yet. Be the first to write one.