Skip to content
dsh.fish
Bundle

dsh-desktop-update-entry

DSH 桌面版:在侧栏常驻一个「检查更新」入口(空闲时也能手动查更新,有新版本时一键安装并重启)。

Source
maxwell234smith
License
MIT
Updated
Updated 7 days ago

Readme

# 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` | 让位(官方显示「重试更新」) | 状态点 | — |

两条规则:

1. **展开侧栏时互补**:有更新/出错时官方指示器本来就会出现(就在右侧设置行里),
   本入口此时返回 `null` 让位,避免两个一模一样的按钮并排;空闲时官方不渲染,由本入口补上。
2. **收起侧栏时兜底**:官方指示器在窄状态(`wide: false`)不渲染,所以本入口始终保留一个状态点。

入口出现在 `sidebar.footer.action` 席位(`order: 1000`,紧挨着右侧的「设置 / 更多」按钮),
与官方的 cordis 角标并列,不覆盖任何自带 UI。

## 它怎么工作

桌面壳在页面里注入了 `globalThis.dshDesktop.updates`(协议版本 1):

```js
bridge.status()            // Promise<presentation>  → { phase, percent?, version? }
bridge.subscribe(listener) // 壳每次推送新相位都会回调
bridge.open()              // Promise<void>          → 打开官方更新弹窗
```

插件只做三件事:订阅这个桥、把状态渲染成一个按钮、点击时转发给 `bridge.open()`——
**更新的检查、下载、校验、安装全部仍由官方壳执行**,插件不碰任何文件、不发任何网络请求。

在普通浏览器(没有这个全局量)里插件完全静默,不注册任何 UI。

## 安装

```sh
# 从 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`。
装完**刷新一次页面**。零运行时依赖、零构建步骤。

## 测试

```sh
node --test
```

用 `node:vm` 把 `lib/client.js` 装进带假 `window`/`document`/`react` 的环境,
验证导出与席位注册、无桥时静默、八个相位的文案与可点状态、点击转发、以及订阅推送。

## License

MIT

Install

dsh plugin --profile web add github:maxwell234smith/dsh-desktop-update-entry

Profile: web

  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source