# 版本更新功能任务规划 > 设计文档请参考:[版本更新设计.md](./版本更新设计.md) --- ## 2. 任务分解与实现检查 ### 2.1 版本号管理 #### T2.1.1 版本号定义和解析 - **任务描述**:定义版本号格式和解析逻辑 - **技术要点**: - 版本号格式:`v1.0.0` 或 `1.0.0`(语义化版本) - 版本号比较逻辑(主版本号.次版本号.修订号) - 当前版本号读取(从 `wails.json` 或编译时注入) - **依赖**:无 - **优先级**:P0 - **实现状态**:✅ 已实现 - **实现位置**:`internal/service/version.go` - **检查结果**: - ✅ 版本号解析:`ParseVersion()` 支持 `v1.0.0` 或 `1.0.0` 格式 - ✅ 版本比较:`Version.Compare()` 实现语义化版本比较 #### T2.1.2 版本信息存储 - **任务描述**:本地存储版本信息 - **技术要点**: - 当前版本号存储 - 上次检查更新时间记录 - 更新检查配置(自动检查开关) - **依赖**:T2.1.1 - **优先级**:P0 - **实现状态**:✅ 已实现 - **实现位置**:`internal/service/update_config.go` ### 2.2 更新检查功能 #### T2.2.1 远程版本检查服务 - **任务描述**:实现远程版本检查接口 - **技术要点**: - 远程版本信息接口(JSON 格式) - 版本号比较逻辑 - 网络请求和错误处理 - 超时控制 - **依赖**:T2.1.1 - **优先级**:P0 - **实现状态**:✅ 已实现 - **实现位置**:`internal/service/update_service.go` - **检查结果**: - ✅ 远程版本信息接口:`fetchRemoteVersionInfo()` 通过 HTTP GET 获取 JSON - ✅ 检查频率控制:`UpdateConfig.ShouldCheckUpdate()` 基于时间间隔判断 #### T2.2.2 更新检查触发机制 - **任务描述**:实现更新检查触发方式 - **技术要点**: - **启动时检查**:应用启动时立即检查一次(已实现) - **自动检查**:根据配置的检查间隔自动检查(已实现) - **手动检查**:用户手动触发检查更新按钮 - **检查频率控制**:避免频繁请求,支持可配置间隔(已实现) - **依赖**:T2.2.1 - **优先级**:P0 - **实现状态**:✅ 已实现 - **实现位置**:`internal/module/update_module.go` - **检查结果**: - ✅ 启动检查:`update_module.go` 在 `Start()` 方法中触发检查 #### T2.2.3 更新提示界面 - **任务描述**:前端展示更新提示 - **技术要点**: - 发现新版本时弹窗提示 - 显示当前版本和最新版本号 - 更新日志预览 - 立即更新/稍后提醒按钮 - **依赖**:T2.2.2 - **优先级**:P0 - **实现状态**:✅ 已实现 - **实现位置**:`web/src/composables/useVersion.ts` ### 2.3 更新下载功能 #### T2.3.1 更新包下载服务 - **任务描述**:实现更新包下载逻辑 - **技术要点**: - 更新包下载 URL 获取 - 文件下载(支持断点续传) - 下载进度计算和回调 - 下载文件校验(MD5/SHA256) - **依赖**:T2.2.1 - **优先级**:P0 - **实现状态**:✅ 已实现 - **实现位置**:`internal/service/update_download.go` - **检查结果**: - ✅ 断点续传:使用 HTTP `Range` 头,支持从断点继续下载 - ✅ 文件完整性验证:`calculateFileHashes()` 计算 MD5 和 SHA256 - ✅ 下载目录管理:使用 `~/.ssq-desk/downloads` 目录 - **代码优化**(2026-01-08): - ✅ 提取 `getRemoteFileSize()` 函数,消除重复的 HEAD 请求逻辑 - ✅ 提取 `normalizeProgress()` 函数,统一进度值标准化 - ✅ 精简日志输出,仅保留关键错误日志 - ✅ 代码量减少约 45% #### T2.3.2 下载进度展示 - **任务描述**:前端展示下载进度 - **技术要点**: - 下载进度条显示 - 下载速度显示 - 下载状态提示(下载中/暂停/完成/失败) - 进度值安全控制(确保在 0-100% 之间) - **依赖**:T2.3.1 - **优先级**:P0 - **实现状态**:✅ 已实现(2026-01-08 优化:添加多层进度值保护) - **实现位置**:`web/src/composables/useVersion.ts` - **检查结果**: - ✅ 进度反馈:`DownloadProgress` 回调函数,每 0.3 秒更新一次 - ✅ 进度值控制:多层防护确保进度值严格在 0-100% 之间 - 后端 `normalizeProgress()` 函数标准化进度值 - API 层最后一道防线检查 - 前端 `clampProgress()` 函数确保显示值合法 - **代码优化**(2026-01-08): - ✅ 提取 `clampProgress()` 辅助函数,统一进度值标准化 - ✅ 提取 `resetDownloadState()` 函数,消除重复代码 - ✅ 提取 `installUpdate()` 函数,简化安装逻辑 - ✅ 代码量从 485 行减少到约 300 行(减少约 40%) ### 2.4 更新安装功能 #### T2.4.1 更新包安装逻辑 - **任务描述**:实现更新包安装 - **技术要点**: - 更新包解压/安装 - 安装前备份当前版本 - 安装后重启应用 - 安装失败回滚机制 - **依赖**:T2.3.1 - **优先级**:P0 - **实现状态**:✅ 已实现 - **实现位置**:`internal/service/update_install.go` - **检查结果**: - ✅ 安装前备份:`BackupApplication()` 在安装前创建备份 - ✅ 安装失败回滚:`rollbackFromBackup()` 在安装失败时恢复备份 - ✅ 多格式支持:支持 `.exe` 和 `.zip` 两种格式 - ✅ 自动重启:`restartApplication()` 支持 Windows/macOS/Linux - **潜在问题**: - ⚠️ Windows 下替换正在运行的可执行文件:当前实现使用重命名方式(`.old` 后缀),但可能在某些情况下失败 - **代码优化**(2026-01-08): - ✅ 移除所有调试日志 - ✅ 代码量减少约 30% #### T2.4.2 安装方式选择 - **任务描述**:支持自动和手动安装 - **技术要点**: - 自动安装:下载完成后自动安装 - 手动安装:用户确认后安装 - 安装时机选择(立即安装/退出时安装) - **依赖**:T2.4.1 - **优先级**:P1 - **实现状态**:✅ 已实现(自动安装) ### 2.5 更新日志展示 #### T2.5.1 更新日志获取 - **任务描述**:获取和解析更新日志 - **技术要点**: - 更新日志接口(Markdown 或 HTML 格式) - 日志版本关联 - 日志内容解析和格式化 - **依赖**:T2.2.1 - **优先级**:P1 - **实现状态**:✅ 已实现(从版本信息接口获取) #### T2.5.2 更新日志界面 - **任务描述**:前端展示更新日志 - **技术要点**: - 更新日志弹窗/页面 - Markdown 渲染(如需要) - 版本历史列表 - 日志内容展示 - **依赖**:T2.5.1 - **优先级**:P1 - **实现状态**:✅ 已实现(在更新提示对话框中显示) ### 2.6 更新配置管理 #### T2.6.1 更新配置界面 - **任务描述**:更新相关配置管理 - **技术要点**: - 自动检查更新开关 - 检查频率设置 - 更新通道选择(稳定版/测试版) - **依赖**:T2.1.2 - **优先级**:P2 - **实现状态**:✅ 已实现(自动检查开关、检查间隔配置) --- ## 3. 实现检查与改进建议 ### 3.1 符合行业最佳实践 ✅ - ✅ 版本检查机制:远程接口、语义化版本、检查频率控制 - ✅ 下载机制:断点续传、进度反馈、文件完整性验证 - ✅ 安装机制:备份回滚、多格式支持、自动重启 - ✅ 安全性:文件哈希验证、HTTPS 传输、进度值安全 - ⚠️ 数字签名验证:未实现(建议增强) ### 3.2 优势 1. **完整的备份和回滚机制**:安装前备份,失败时自动回滚 2. **多格式支持**:同时支持 `.exe` 安装程序和 `.zip` 压缩包 3. **详细的进度反馈**:实时显示下载进度、速度、大小 4. **灵活的配置管理**:支持自定义检查间隔和检查地址 5. **代码质量**:遵循 DRY 原则,代码简洁易维护 ### 3.3 不足与改进建议 #### 高优先级 🔴 1. **添加数字签名验证** - Windows: 验证 `.exe` 文件的 Authenticode 签名 - macOS: 验证 `.app` 的代码签名 - 在安装前验证签名,确保更新包来源可信 2. **改进 Windows 文件替换机制** - 使用 `MoveFileEx` API 的 `MOVEFILE_DELAY_UNTIL_REBOOT` 标志 - 或者使用临时文件名 + 原子替换的方式 #### 中优先级 ⚠️ 1. **添加下载 URL 白名单验证** - 在配置中维护允许的下载域名列表 - 下载前验证 URL 是否在白名单中 2. **优化下载超时机制** - 根据文件大小动态调整超时时间 - 添加网络状态检测,网络断开时暂停下载 3. **添加增量更新支持** - 服务器提供增量更新包(仅包含差异部分) - 客户端支持增量更新包的下载和安装 #### 低优先级 💡 1. **添加更新包压缩** - 服务器提供压缩的更新包(`.zip` 或 `.7z`) - 客户端下载后自动解压 2. **优化进度更新频率** - 将进度更新频率改为可配置 - 根据下载速度动态调整更新频率 --- ## 4. 代码优化记录 ### 5.1 优化时间线 - **2026-01-08**:代码重构和精简 - 后端代码量减少 40-50% - 前端代码量减少约 40%(485行 → 300行) - 添加多层进度值保护机制 - 遵循 DRY 原则,提高代码质量 ### 5.2 后端优化详情 #### update_download.go(减少约 45%) - ✅ 提取 `getRemoteFileSize()` 函数,消除重复的 HEAD 请求逻辑 - ✅ 提取 `normalizeProgress()` 函数,统一进度值标准化 - ✅ 移除大量调试日志,仅保留关键错误日志 - ✅ 优化文件大小获取逻辑,支持多种方式获取 #### update_api.go(减少约 50%) - ✅ 移除所有不必要的 `log.Printf` 调试日志 - ✅ 简化错误处理逻辑 - ✅ 优化进度回调函数,减少重复检查 #### update_install.go(减少约 30%) - ✅ 移除所有调试日志 - ✅ 保留关键错误返回 ### 5.3 前端优化详情 #### useVersion.ts(减少约 40%) - ✅ 提取 `clampProgress()` 辅助函数,统一进度值标准化 - ✅ 提取 `resetDownloadState()` 函数,消除重复代码 - ✅ 提取 `installUpdate()` 函数,简化安装逻辑 - ✅ 优化事件处理,减少重复的 `nextTick` 调用 - ✅ 遵循 DRY 原则,提高代码可维护性 ### 5.4 关键改进 1. **进度值安全**:多层防护确保进度值严格在 0-100% 之间 - 后端 `normalizeProgress()` 函数 - 后端 API 层检查 - 前端 `clampProgress()` 函数 - 组件内 `Math.max(0, Math.min(100, ...))` 限制 2. **代码质量**: - 遵循 DRY 原则,消除重复代码 - 单一职责原则,每个函数只做一件事 - 减少日志输出,提高性能 - 代码更简洁易读,易于维护 --- ## 5. 开发顺序建议 ### 第一阶段(核心功能)✅ 已完成 1. T2.1.1 → T2.1.2(版本号管理) 2. T2.2.1 → T2.2.2 → T2.2.3(更新检查) 3. T2.3.1 → T2.3.2(更新下载) 4. T2.4.1(更新安装) ### 第二阶段(增强功能)✅ 部分完成 1. T2.4.2(安装方式选择)- ✅ 自动安装已实现 2. T2.5.1 → T2.5.2(更新日志)- ✅ 已实现 ### 第三阶段(配置管理)✅ 已完成 1. T2.6.1(更新配置)- ✅ 已实现 --- ## 6. 任务优先级说明 - **P0**:核心功能,必须完成(版本检查、下载、安装)- ✅ 已完成 - **P1**:重要功能(安装方式选择、更新日志)- ✅ 已实现 - **P2**:辅助功能(配置管理)- ✅ 已实现 --- ## 7. 总结 ### 8.1 整体评价 我们的实现**基本符合**官方和行业最佳实践,主要功能都已实现,包括: - ✅ 版本检查机制 - ✅ 下载机制(含断点续传) - ✅ 安装机制(含备份和回滚) - ✅ 前端 UI 和交互 - ✅ 代码优化和重构(2026-01-08) ### 8.2 主要不足 1. **安全性**:缺少数字签名验证(高优先级) 2. **Windows 兼容性**:文件替换机制可能需要改进(高优先级) 3. **功能增强**:缺少增量更新支持(中优先级) ### 8.3 建议 1. **立即改进**:添加数字签名验证,提高安全性 2. **短期优化**:改进 Windows 文件替换机制,提高成功率 3. **长期规划**:考虑添加增量更新支持,减少下载量 --- > 文档维护者:JueChen > 创建时间:2026-01-07 > 最后更新:2026-01-08