feat(product-suite): make image pulls cancellable

This commit is contained in:
chengma
2026-07-16 19:37:22 +08:00
parent c9afaad24b
commit 75af87d441
12 changed files with 1157 additions and 88 deletions
+6 -2
View File
@@ -3,7 +3,7 @@ id: T-642
title: 商品套图拉取主图可停止与本轮图片清理
phase: 7
deps: [T-641]
status: TODO
status: DONE
created: 2026-07-16
---
@@ -151,4 +151,8 @@ git diff --check
## 执行记录
- 待执行。
- 2026-07-16:⑥拉取主图新增内存 `pull_run_token` 生命周期,覆盖 URL 读取和本轮远程原图下载。按钮在活动期间显示「停止拉取蝦皮」,停止请求后显示「正在停止...」;停止弹窗提供「停止并保留 / 停止并清除本次新增 / 继续拉取」。重复停止不重复弹窗,账号和商品 ID 在本轮结束前保持锁定,其他任务仍可切换使用。
- 2026-07-16:`ImageStudioPullImagesWorker` 和 `pull_remote_main_image_urls()` 增加可选 `should_stop`,在账号准备、打开商品页、读取 URL 和同步资产前后检查;当前 CDP 请求返回后安全停止,并继续复用 `close_readonly_product()` 关闭本轮只读 tab。线程结束增加 token 校验和幂等兜底;旧轮次 URL/下载迟到结果不会清除新 worker 或覆盖新状态。
- 2026-07-16:本轮下载使用 asset ID → token 归属,只取消本轮排队和活动下载,不影响用户此前手动触发的下载。远程图片 requests 下载在请求返回、分块读取和保存前检查取消并关闭 response、清理临时文件;不使用线程强杀或结束 Chrome。
- 2026-07-16:「停止并清除本次新增」按拉取前 asset 快照与本轮远程 asset 差集处理,只移除当前项目中未被 job/selection 引用的新远程原图;被引用图片保留。本地手动导入和拉取前图片不删除,旧图片状态/顺序恢复,新但被引用的图片追加到旧图片之后;本地文件和蝦皮线上图片不删除。
- 2026-07-16:拉取生命周期诊断日志只记录 token 短值、项目/商品、数量、清理策略和用时。同步更新架构、API 与路由文档;补齐安全边界取消、response 关闭、快照恢复、本轮下载隔离、按钮三态、清理/引用保护、旧 token、线程结束兜底和真实 `QThread` 完成回归测试。相关 81 项通过;商品套图 GUI 42 项在主工作区通过,其余测试文件在短路径隔离 worktree 中逐文件通过,共覆盖 550 项;Ruff、`compileall` 与 `git diff --check` 均通过。未连接真实账号执行 CDP 停止冒烟,需在测试商品 `51100639510` 上人工确认当前有界请求返回后的停止时延和自动新建 tab 关闭表现。