Files
spark-store/CHANGELOG.md
T
shenmo7192 56a7e11622 fix(install): 修复 APM 未安装时点安装静默无反应,并清理同类接线断裂
主问题: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>
2026-10-11 12:34:10 +08:00

16 KiB
Raw Blame History

[未发布 / Unreleased] (Erotica 分支,基于 1e60a4c2 之后)

本批改动汇总(自提交 1e60a4c2 起):

  1. 已安装应用新增搜索框 + 窗口尺寸/位置持久化:补齐已安装面板的应用搜索框;主窗口大小、位置、最大化状态写入本地 window-state.json 持久化,并限制最小尺寸 800×500。

  2. 已安装列表健壮性加固:修复异步竞态、错误 UX、加载状态处理与刷新防抖(多轮 AI 审查改进),并清理对应代码缩进与对齐。

  3. 各页面滚动条贴边修复:避免滚动栏被窗口圆角裁切。

  4. 投稿应用窗口圆角虚影修复:消除投稿弹窗圆角处的方角残影。

  5. 已安装应用来源筛选与排序优化:将头部 APM / Spark / 总数三段式统计徽章改为可点击,点击后按来源筛选(默认显示全部);列表默认 APM 应用置顶;新增"暂无已安装的 APM/Spark 应用"空状态提示,避免筛选无结果时出现空引号。

  6. AI 代码审查安全加固:

    • launch-app IPC 移除 any,新增包名正则校验(/^[a-zA-Z0-9._+-]+$/),拦截非法输入防止命令注入。
    • getIconUrl 本地图标路径增加白名单目录校验与路径遍历(..)防护。
    • fetchWithRetry 仅对网络错误 / 5xx / 超时重试,4xx 快速失败。
    • AppGrid 普通网格 v-for 的 :key 由 index 改为 app.pkgname。
    • loong64 架构下尊重 --no-spark 启动参数,不再硬编码覆盖。
    • openDownloadedApp 的 IPC 调用补充 .catch 错误处理。
  7. 应用详情默认展开已安装版本:打开应用详情时,若本地只安装了 Spark / APM 中的某一版本,则默认展开该已装来源(例如 WeChat 默认 APM,但本机只装 Spark 版时默认展开 Spark);若两版都已安装,则按优先级/标签策略展示。

  8. 修复 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。

  9. 同类「接线断裂」问题全量排查与修复(源自 d7bdcf36 拆分 composables 时留下的半成品改动):

    • 应用下载排行永远为空:loadRanking() 在 loadApps() 尚未填充 apps 时就被调用,命中 if (apps.value.length === 0) return 后直接空跑且永不重试。现改为在 loadApps resolve 之后再触发。
    • 详情页卸载后按钮状态不刷新:卸载成功回调在拆分时丢了「刷新详情页安装状态」分支,详情弹窗会继续显示「打开/卸载」(应用实际已卸载,点「打开」会启动不存在的包)。现于编排层 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 流入已安装列表与云端同步条目。现恢复完整字段校验。
  10. 清理重构遗留的孤儿代码:

    • 删除四个已成孤儿的组件: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

  • 修复应用还没有安装完,按钮就重新变成可安装状态 (#11) (b43c611)

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)