docs: add developer module guides

This commit is contained in:
Misaka
2026-03-21 20:37:50 +08:00
parent 57ca1d5650
commit 14e7abe11e
6 changed files with 852 additions and 0 deletions

View File

@@ -0,0 +1,153 @@
# Update 模块
`Update` 模块负责应用版本目录拉取、状态广播、更新包下载、安装器启动,以及为不同用户类型生成不同的更新视图。
## 1. 模块职责
- 检查更新是否可用
- 拉取更新目录
-`User` / `Admin` 生成不同的更新决策
- 下载更新包并校验
- 启动安装流程
- 广播更新状态给 renderer
## 2. 模块结构
```mermaid
graph TD
Hook[useAppBootstrap]
Dialog[UpdateDialog / useUpdateDialogState]
Preload[preload.update]
Handler[update-handler]
Service[UpdateService]
Catalog[UpdateCatalogService]
Installer[UpdateInstaller]
Storage[UpdateStorageClient]
Publisher[UpdateStatusPublisher]
Hook --> Preload
Dialog --> Preload
Preload --> Handler
Handler --> Service
Service --> Catalog
Service --> Installer
Service --> Storage
Service --> Publisher
```
## 3. 关键入口文件
- `src/renderer/src/hooks/useAppBootstrap.ts`
- `src/renderer/src/components/UpdateDialog.tsx`
- `src/renderer/src/hooks/useUpdateDialogState.ts`
- `src/main/ipc/update-handler.ts`
- `src/main/services/update/update-service.ts`
- `src/main/services/update/update-catalog-service.ts`
- `src/main/services/update/update-installer.ts`
- `src/main/services/update/update-storage-client.ts`
- `src/main/services/update/update-status-publisher.ts`
## 4. 更新数据流
```mermaid
sequenceDiagram
participant Hook as useAppBootstrap
participant Dialog as useUpdateDialogState
participant Preload as preload.update
participant Handler as update-handler
participant Service as UpdateService
participant Catalog as UpdateCatalogService
Hook->>Preload: getStatus()
Hook->>Preload: getCatalog()
Dialog->>Preload: getChangelog(release)
Preload->>Handler: invoke
Handler->>Service: getStatus / getCatalog / getChangelog
Service->>Catalog: resolve dialog catalog
Catalog-->>Service: release decisions
Service-->>Handler: update data
Handler-->>Preload: IpcResult
Preload-->>Hook: status / catalog
Preload-->>Dialog: changelog
```
## 5. 状态模型
更新模块当前最核心的是 `UpdateStatus`
```mermaid
stateDiagram-v2
[*] --> idle
idle --> checking
checking --> available
checking --> downloaded
checking --> error
available --> downloading
downloading --> downloaded
downloading --> error
downloaded --> installing
installing --> [*]
```
同时 `UpdateDialogCatalog` 会根据用户角色形成不同视图:
- `user`
- `admin`
- `disabled`
## 6. 用户与管理员差异
```mermaid
flowchart TD
Context[当前用户类型]
User[User]
Admin[Admin]
UserCatalog[推荐稳定版]
AdminCatalog[Stable + Preview 目录]
Context --> User
Context --> Admin
User --> UserCatalog
Admin --> AdminCatalog
```
普通用户主要消费:
- 推荐版本
- 已下载版本
- 安装动作
管理员主要消费:
- 完整版本目录
- Stable / Preview 版本切换
- 手动下载并安装
## 7. 最近的结构优化
Update 模块已经做过多轮职责拆分:
- 版本目录决策拆到 `update-catalog-service`
- 下载与安装拆到 `update-installer`
- 状态广播拆到 `update-status-publisher`
- 对象存储访问拆到 `update-storage-client`
同时前端侧:
- `useUpdateDialogState` 收敛了选中版本和 changelog 状态
- `UpdateDialog` 已改成按需加载
## 8. 常见改动点
- 改 renderer 状态流:`useAppBootstrap.ts` / `useUpdateDialogState.ts`
- 改弹窗展示:`UpdateDialog.tsx`
- 改更新检查与轮询:`update-service.ts`
- 改版本决策:`update-catalog-service.ts`
- 改安装流程:`update-installer.ts`
## 9. 修改建议
- 更新决策逻辑优先放在 main service不要回流到 renderer
- changelog、catalog、status 要保持边界清晰
- 用户类型变化时要考虑 status/catalog 的复位逻辑
- 如果新增发布通道,优先扩展 catalog service