feat: store packaged user data under data directory

This commit is contained in:
chengma
2026-07-07 14:12:32 +08:00
parent caa04a9aa7
commit 148c4a73eb
33 changed files with 602 additions and 196 deletions
+25
View File
@@ -1287,3 +1287,28 @@
- 文档:`docs/06-tasks.md` 将 T-541 标记为 DONE;`docs/troubleshooting.md`、`docs/packaging.md`、`docs/current-state.md` 更新为当前修复与打包验收口径。
- 测试:`tests/test_gui.py` 新增小屏和大屏 mock geometry 单测,覆盖尺寸限制与居中位置;`scripts/build_exe.ps1` 已重新构建 release,确认 T-541 合入后仍可打包。
- 边界:不保存/恢复窗口历史坐标;未改业务流程、DB、AI、Excel、CDP/Shopee、打包产物结构或用户数据路径。
## 【2026-07-07】T-538 完成 · 打包产物用户数据收进 data/
- 状态:DONE
- 代码:`app/appconfig.py` 新增 `data_dir` 路径解析、`data/` 默认根、旧顶层布局迁移、冲突保护和可写性检测;`main.py` 移除打包版 `chdir`;GUI 启动时先准备数据目录,不可写时弹中文错误并退出。
- 路径:`config.json`、`config/ai_models.json`、`config/cmhub.json`、`cmshopee.db`、`chrome_user_data_dir/`、`images/`、`logs/`、`prompts/`、`title_prompt.txt` 等默认统一落到 `data/`;配置里保存的相对路径仍保持便携,运行时解析为绝对路径。
- 打包:`.gitignore` 新增 `data/`;`scripts/build_exe.ps1` 发布目录校验禁止带出 `data/`;更新方式改为覆盖发布包里的程序文件和依赖文件并保留 `data/`。当前 PyInstaller 5.13.2 为扁平 onedir,不要求存在 `_internal/`。
- 文档:`docs/06-tasks.md` 将 T-538 标记为 DONE;同步 `docs/packaging.md`、架构/技术栈/API/排障/路由/current-state 和 UI 线框图里的数据路径说明。
- 边界:未改 DB schema、AI HTTP 协议、Excel、账号、CDP 或 Shopee 页面操作流程;旧 DB 已存图片路径继续按原路径读取。
- 验证:`python -m py_compile app\appconfig.py app\diagnostics.py app\prompts.py app\editor.py app\gui\__init__.py app\gui\main_window.py app\gui\tabs\generate.py app\gui\tabs\settings.py app\gui\widgets.py main.py tests\test_appconfig.py tests\test_packaging.py tests\test_gui.py` 通过;`python -m unittest discover -s tests -p test_appconfig.py` 通过;`python -m unittest discover -s tests -p test_packaging.py` 通过;`python -m unittest discover -s tests -p test_gui.py` 通过;`python -m compileall app main.py` 通过;`python -m unittest discover -s tests` 通过;`git diff --check` 通过。
## 【2026-07-07】T-538 修正 · 区分数据迁移冲突和目录不可写
- 现象:旧布局数据和 `data/` 里同名数据同时存在时,GUI 标题仍显示“数据目录不可写”,但实际原因是迁移冲突。
- 代码:`appconfig` 新增 `DataMigrationConflictError` 与 `DataDirectoryWriteError`;旧布局同名冲突抛“数据迁移冲突”,目录创建/写入失败才抛“数据目录不可写”。GUI 启动时按错误类型显示不同中文弹窗标题。
- 文档:`docs/packaging.md` 和 `docs/current-state.md` 记录冲突与不可写的区别。
- 边界:只改启动错误分类和提示;不自动合并、不删除、不移动用户旧数据;未改 DB schema、路径解析、AI、Excel、CDP 或 Shopee 流程。
## 【2026-07-07】T-538 修正 · 打包目录结构按 PyInstaller 5 扁平 onedir 记录
- 现象:实际 `dist/cmshopee` 目录包含 `cmshopee.exe`、DLL/PYD 文件和依赖目录同级,并不是 `cmshopee.exe` + `_internal/` 两个条目。
- 原因:当前 `requirements-build.txt` 锁定 PyInstaller 5.13.2,onedir 默认输出为扁平结构;`_internal/` 属于后续升级 PyInstaller 6.x 后再评估的布局,不是当前验收标准。
- 文档:`docs/packaging.md`、`docs/03-tech-stack.md`、`docs/06-tasks.md`、`docs/current-state.md` 已改为发布整个 `dist/cmshopee` 文件夹,验证重点是不得带出 `data/` 和用户本地数据。
- 代码:`scripts/build_exe.ps1` 打包成功后会提示当前依赖布局;无 `_internal/` 时明确说明扁平结构正常,并提醒发布整个 `dist/cmshopee` 目录。
- 边界:未升级 PyInstaller,未改变 spec 产物布局,未改运行时路径、DB、AI、Excel、CDP 或 Shopee 流程。