Files
BIPMaterialManager/docs/developer/modules/update.md
2026-03-21 20:37:50 +08:00

154 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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