主问题:showApmInstallDialog 在 useAppState.ts 被重复声明为独立 ref,
而 processInstall.ts 置位的是 storeConfig.ts 中的另一份实例,导致 APM
未安装时点「安装」既不弹引导弹窗也不创建下载任务(界面毫无反应)。
修复:
- useAppState 改为从 storeConfig 再导出同一实例(消除双实例)
- processInstall 在 install-complete 兜底识别「未安装 APM」失败原因
- 新增回归测试 ApmInstallDialog.test.ts(回退修复后 3/3 失败)
同类「接线断裂」问题全量排查修复(源自 d7bdcf36 拆分 composables):
- 应用下载排行永远为空:loadRanking 在 apps 未填充时空跑且不重试
- 详情页卸载后按钮状态不刷新(丢失的 checkAppInstalled 分支)
- 重试已取消任务复用 id,被旧任务 finally 删除而永久卡在下载中
- remove-installed 的 spawn 缺 error 监听(可致主进程崩溃)且不消费 stderr
- 云端应用列表在来源查询失败时静默丢数据(已安装列表同源问题)
- 忽略更新写入失败无反馈;下载统计上报缺 catch
- isInstalledAppInfo 运行时校验被削弱
清理重构遗留孤儿代码:
- 删除无引用的 AppDetailPage/AccountQuickMenu/TopActions/UpdateCenterCloseConfirm
- 恢复 handleRemoveComplete 语义与 onUnmounted 的 abort/unbind
- 删除孤儿 IPC:list-upgradable/show-apm-install-dialog/uninstall-installed
- 删除孤儿渲染端代码:handleUpgrade/handleRemove/useDownloadItemStatus
及已无生产者的 queue-install 回灌监听器
验证:vue-tsc 0 error、vite build 通过、单元测试无新增失败
(基线 40 失败 → 35 失败)。
Signed-off-by: shenmo <jifengshenmo@outlook.com>
16 KiB
[未发布 / Unreleased] (Erotica 分支,基于 1e60a4c2 之后)
本批改动汇总(自提交 1e60a4c2 起):
-
已安装应用新增搜索框 + 窗口尺寸/位置持久化:补齐已安装面板的应用搜索框;主窗口大小、位置、最大化状态写入本地
window-state.json持久化,并限制最小尺寸 800×500。 -
已安装列表健壮性加固:修复异步竞态、错误 UX、加载状态处理与刷新防抖(多轮 AI 审查改进),并清理对应代码缩进与对齐。
-
各页面滚动条贴边修复:避免滚动栏被窗口圆角裁切。
-
投稿应用窗口圆角虚影修复:消除投稿弹窗圆角处的方角残影。
-
已安装应用来源筛选与排序优化:将头部 APM / Spark / 总数三段式统计徽章改为可点击,点击后按来源筛选(默认显示全部);列表默认 APM 应用置顶;新增"暂无已安装的 APM/Spark 应用"空状态提示,避免筛选无结果时出现空引号。
-
AI 代码审查安全加固:
launch-appIPC 移除any,新增包名正则校验(/^[a-zA-Z0-9._+-]+$/),拦截非法输入防止命令注入。getIconUrl本地图标路径增加白名单目录校验与路径遍历(..)防护。fetchWithRetry仅对网络错误 / 5xx / 超时重试,4xx 快速失败。AppGrid普通网格v-for的:key由index改为app.pkgname。loong64架构下尊重--no-spark启动参数,不再硬编码覆盖。openDownloadedApp的 IPC 调用补充.catch错误处理。
-
应用详情默认展开已安装版本:打开应用详情时,若本地只安装了 Spark / APM 中的某一版本,则默认展开该已装来源(例如 WeChat 默认 APM,但本机只装 Spark 版时默认展开 Spark);若两版都已安装,则按优先级/标签策略展示。
-
修复 APM 未安装时点「安装」静默无反应:
showApmInstallDialog此前在src/composables/useAppState.ts被重复声明为独立的ref,而src/modules/processInstall.ts置位的是src/global/storeConfig.ts中的另一份实例,导致 APM 未安装时点击 APM 应用的「安装」既不弹出引导弹窗、也不会创建下载任务(界面毫无反应)。现统一从storeConfig再导出同一实例,并在install-complete兜底识别「未安装 APM」失败原因,保证任何路径下都不会静默失败。新增回归测试src/__tests__/unit/ApmInstallDialog.test.ts。 -
同类「接线断裂」问题全量排查与修复(源自
d7bdcf36拆分 composables 时留下的半成品改动):- 应用下载排行永远为空:
loadRanking()在loadApps()尚未填充apps时就被调用,命中if (apps.value.length === 0) return后直接空跑且永不重试。现改为在loadAppsresolve 之后再触发。 - 详情页卸载后按钮状态不刷新:卸载成功回调在拆分时丢了「刷新详情页安装状态」分支,详情弹窗会继续显示「打开/卸载」(应用实际已卸载,点「打开」会启动不存在的包)。现于编排层
handleUninstallSuccess补回。 - 重试已取消的任务会永久卡在「下载中」:取消后重试复用同一任务 id,旧任务仍在退出流程中,其
finally会tasks.delete(id)删掉新任务,新任务再也不会进入安装阶段。现已对 3 处tasks.delete加身份校验(tasks.get(id) === task)。 - 卸载失败可能让主进程崩溃且看不到原因:
remove-installed的spawn没有error监听(spawn 失败时只触发error不触发close,且主进程无全局兜底),也未消费 stderr(写满管道会阻塞包管理器,失败原因全部丢失)。现补齐error/stderr处理并统一收敛为一次remove-complete。 - 云端应用列表静默丢数据:某来源
list-installed返回success:false(来源被启动参数禁用 / 包管理器缺失)时,仍被当作「已刷新」,mergeInstalledApps会丢弃该来源的本地已知记录,随后把不完整列表上传覆盖账号。现只统计真正查询成功的来源(已安装列表合并同样修正)。 - 忽略更新的写入失败无任何反馈:
saveIgnored抛错会变成未处理的 rejection,列表不刷新、条目也不标记「已忽略」。现收敛为界面 warning。 - 下载次数统计上报失败产生未处理 rejection:补
.catch,仅记录 warn 不影响安装。 isInstalledAppInfo运行时校验被削弱:拆分时只剩pkgname/origin两项检查,字段残缺的行会带着undefined流入已安装列表与云端同步条目。现恢复完整字段校验。
- 应用下载排行永远为空:
-
清理重构遗留的孤儿代码:
- 删除四个已成孤儿的组件:
AppDetailPage.vue、AccountQuickMenu.vue、TopActions.vue、update-center/UpdateCenterCloseConfirm.vue(均无任何引用,也不进入构建产物),连同仅覆盖它们的AppDetailPage.test.ts。 - App.vue 的
handleRemoveComplete由空实现恢复为「卸载成功后移除下载队列残留记录」;onUnmounted补回rootAbortController.abort()与updateCenterStore.unbind()。 - 删除孤儿 IPC 处理器
list-upgradable(及仅其使用的parseUpgradableList)、show-apm-install-dialog(前端早已改用 Vue 弹窗)、uninstall-installed(与在用的remove-installed重复)。 - 删除孤儿渲染端代码:
handleUpgrade、handleRemove、useDownloadItemStatus,以及已无生产者的queue-install渲染端回灌监听器(其主进程webContents.send生产者在b5c5ab04已移除)。
- 删除四个已成孤儿的组件:
相关提交:1d9d25d6、c75938aa、39a358bb、51473cac、cf0e72ff、b0d60737、d3705ed4。
1.1.1 (2026-02-17)
Bug Fixes
- main: use app.getVersion() for packaged app (d45d508)
1.1.0 (2026-02-14)
Bug Fixes
- app: floor download progress percentage (ed92145)
1.1.0-beta.1 (2026-02-14)
Bug Fixes
Features
- 更新类型系统指南,添加代码检查和格式化要求 (10808c8)
- 更新搜索逻辑 (d5266c6)
- 添加 ESLint 配置并优化代码风格,移除未使用的功能 (e11740a)
- app: add cache buster for API requests (9f50e25), closes #16
- app: add download count display (a3f18bb)
- docs: 添加 AI 编码指导文档以概述项目架构和核心概念 (c3ae477)
- install: add metalink download support and progress tracking (74c4eb4), closes #12
- support download statistics (5ac9376), closes #15
- theme: add system theme support (7aeb3d5), closes #13
1.0.4 (2026-01-31)
1.0.4-beta.1 (2026-01-31)
Bug Fixes
- 修复应用启动命令,移除交互式模式 (2f7af3c)
Features
- 添加 host-spawn 下载步骤并更新应用启动命令 (850b8dc)
1.0.4-beta.0 (2026-01-31)
Features
- 添加重复任务检查,避免重复下载任务 (0d1d4e5)
- 现在仅在有任务时才会到托盘 (92d1573)
- enhance install manager to prevent duplicate package installations and improve app launching command (eeefe52)
1.0.3 (2026-01-31)
Bug Fixes
- deep link handling at electron startup (0ed7f64)
Features
- add app launching functionality and update related components (6154d75)
- enhance application type definitions and improve app management logic (39e40ff)
- update application icons and implement tray functionality (f89b9eb)
- update application name and paths to reflect new branding (641589f)
1.0.3-beta.1 (2026-01-31)
Bug Fixes
- 修复确认卸载界面应用名称显示 (b4ef653)
- 修复卸载请求中的应用名称查找逻辑 (9799718)
- build: add bash shell to build release files (354eea3)
Features
- 更新安装按钮状态反馈,添加安装队列提示 (4ce097b)
- 更新版本号至 1.0.3-beta.0 (327ee54)
- 更新本地应用列表,区分依赖和用户安装的包 (588eaf9)
- 更新模态框样式,添加最大高度限制 (61790a8)
- 添加卸载确认模态框,支持卸载进度显示 (b9325db)
- preload: expose architecture detection to renderer process (5b09dfb)
Performance Improvements
- 移除模态框背景模糊效果 (eaa2868)
1.0.2 (2026-01-30)
Bug Fixes
- 更新构建依赖,添加构建工具支持 (bc2f791)
- 更新构建依赖,添加python3支持 (f8f163e)
- 更新构建依赖,移除不必要的包并优化安装命令 (1c791cd)
- 更新上传工件路径以支持不同包类型 (9ee8339)
- 更新应用图标格式为ICNS,优化安装管理器命令执行 (4b49424)
- 更新应用ID和版本信息,修复许可证类型 (a3d50e0)
- 更新vite版本至6.4.1 (51ee401)
- 将依赖项'apm'更改为'amber-package-manager' (f7eedcd)
Features
- 统一安装和卸载脚本以支持PolicyKit权限配置 (f15fb28)
- 更新窗口标题和尺寸,优化按钮样式 (185b498)
- 更新TODO列表,添加应用更新和显示已安装应用功能 (402ba1f)
- 添加对deb和rpm包的构建支持,更新构建依赖和版本信息 (640e0bd)
- 添加已安装应用和可更新应用的管理功能,支持卸载和升级操作 (ea0261a)
- 添加deb和rpm包的依赖项配置 (847bcc7)
- 添加electron-builder.yml配置文件并更新构建脚本 (38a4d45)
- 添加PolicyKit权限配置和安装/卸载脚本 (071aa36)
- deeplink: implement custom deep link handling and remove electron-app-universal-protocol-client (c7b3257)
- download: 支持重试下载功能并更新相关逻辑 (bdf51a1)
- install: 实现安装管理器,支持安装、检查已安装状态和初步卸载功能 (bf93059)
- install: add app uninstall functionality (ac0dc22)
- install: added basis install process (50fb1a0)
- overhaul application to APM 应用商店 with enhanced download management (9b17c57)