- Remove unused getSenderWindow() from autoUpdateBridge (replaced by broadcastToAllWindows) - Fix .gitignore: /CLAUDE.md instead of CLAUDE.md to only match root - Merge duplicate [Unreleased] sections in CHANGELOG.md - Correct checkNow description: uses GitHub API, then triggers electron-updater async Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2.5 KiB
2.5 KiB
Changelog
[Unreleased] - 2026-03-11
功能
- 修复自动更新 IPC 事件仅发送到单个窗口的问题,改为广播所有窗口(主窗口 + 设置窗口均可收到)
- 统一手动检查更新与自动更新的状态机,消除三套并行状态
- 手动"检查更新"通过 GitHub API 检测版本,发现更新后异步触发 electron-updater 下载
- 设置窗口中点击"检查更新"后,下载进度可实时反映在 UI 中
- 应用启动后 5 秒自动触发
electron-updater检查更新,无需用户手动点击 - 发现新版本后自动开始下载(
autoDownload=true) - 下载完成后弹出持久 toast 通知,用户点击"立即重启"即可安装
- 下载失败时弹出错误 toast,提供"打开 Releases"降级入口
- Settings > System 进度条实时展示自动下载进度,由
useUpdateCheck统一驱动 - Linux deb/rpm/snap 等不支持 electron-updater 的平台自动跳过,保持原有 GitHub API 通知行为
设计原理
broadcastToAllWindows替换getSenderWindow单点发送,保证所有窗口都能收到 IPC 事件manualCheckStatus字段追踪手动检查 UI 状态(idle/checking/available/up-to-date/error),与autoDownloadStatus在 UI 层按优先级渲染SettingsSystemTab不再持有本地 update state,单向接收useUpdateCheck统一数据- 将原有两套独立系统(GitHub API 通知 + electron-updater 手动下载)合并为统一状态机:
useUpdateCheck作为唯一事实来源,同时驱动App.tsxtoast 和SettingsSystemTab进度条 - 全局持久化 IPC 监听器在
autoUpdateBridge.init()时一次性注册,避免每次手动下载请求重复注册/清理监听器 autoInstallOnAppQuit=false,不做静默安装,由用户主动触发重启
接口变更(SettingsSystemTabProps)
- 移除:
autoDownloadStatus、downloadPercent - 新增:
updateState(完整 UpdateState)、checkNow、installUpdate、openReleasePage
注意事项
checkNow语义:使用 GitHub API(performCheck)检测是否有新版本,若发现更新且 electron-updater 尚未开始下载,则异步触发bridge.checkForUpdate()启动自动下载流程- 此功能仅对打包后的应用(Windows NSIS、macOS dmg/zip、Linux AppImage)生效,dev 模式需配合
forceDevUpdateConfig=true+dev-app-update.yml测试(见.gitignore) hasUpdate旧 toast 在autoDownloadStatus !== 'idle'时自动抑制,避免与新 toast 重复