# 项目 TODO 总览 > 汇总此前在对话中提出或实现的需求与改进想法。分为:已完成、待办、可选增强。 ## 1. 已完成 (Done) - [x] 多策略解析封面图片(直接 cover.*, cover*.html 内引用, OPF meta cover, xlink:href, URL decode, 递归搜索) - [x] 将 AI 书籍简评接入(DashScopeChatClient),生成 3 段 400 字左右精炼书评 - [x] AI 简评加入 JSON (`bookintro.json`) 缓存,避免重复请求 - [x] AI 调用改为后台线程,防止 UI 卡顿;增加线程列表与窗口关闭时的优雅等待,修复 QThread destroyed while running 问题 - [x] 书籍信息与简评改为 HTML 展示;标题加粗彩色(紫红/洋红色) - [x] 保留 AI 书评段落结构(按空行/空白拆分为多段 `

`) - [x] 单封面右上角自适应缩放实现 - [x] 扩展为三张封面并排展示(当前 + 后两本) - [x] 三张封面与文本区域对齐,初版等宽缩放 - [x] 封面支持失真填充模式(IgnoreAspectRatio + setScaledContents) - [x] 封面宽度锁定 150,并按比例(1:1.4 初版 -> 1:1.2)设定高度上限自适应 - [x] 将封面布局与 text edit 合并到 `.ui` 文件(`ibook_export_app.ui`)而非运行时动态创建 - [x] 导出笔记功能(Markdown 命名含时间戳 + 书名截断) - [x] 统计标签页:原生 Qt 图表(周 / 30 天 / 12 月 / 气泡汇总)集成 - [x] 窗口几何尺寸持久化 (QSettings) - [x] 错误/无封面显示文本占位 ## 2. 待办 (Backlog / 未实现需求) - [ ] 封面点击交互:点击第 2 / 3 张封面切换列表选中对应书籍 - [ ] 缺失封面使用统一图片占位 (placeholder.png) 替代文字 - [ ] 封面高度完全由窗口高度动态拉伸(移除当前 45% 与 400 上限策略或做成配置) - [ ] 可配置封面显示模式:等比缩放 / 失真填充 / 居中裁剪 - [ ] AI 书评请求取消 / 防抖(快速切换书籍时取消前一线程) - [ ] AI 简评失败后重试按钮或自动重试逻辑 - [ ] 配置对话框持久化写回 `config.py`(当前仅本次运行) - [ ] 导出格式可选 (Markdown / HTML / PDF) - [ ] 导出时附带封面图片(复制到输出目录或转换为 Base64 嵌入) - [ ] 书籍列表支持搜索 / 过滤 (作者 / 书名 / 最近打开时间) - [ ] 异步加载封面(当前是同步文件系统扫描) - [ ] 提取封面解析逻辑为独立模块并加单元测试 - [ ] 统计图表:添加 hover 提示/数据标签开关 - [ ] 年度 / 月度阅读统计图表空数据时的占位样式统一 - [ ] 增加日志记录(AI 请求、封面解析耗时) - [ ] 国际化(中英切换) ## 3. 可选增强 (Nice to Have / Ideas) - [ ] 缓存封面缩略图,减少重复磁盘读取与缩放开销 - [ ] 多线程并行预取下一批书封面与书评 - [ ] AI 书评提示词可定制(长度 / 语气 / 侧重点) - [ ] 书评显示字数限制 / 展开收起 - [ ] 支持本地笔记全文搜索与高亮(跨书) - [ ] Dark Mode 自适应 (Qt Palette + 自定义样式) - [ ] 统计图数据导出 (CSV/JSON) - [ ] 书籍元数据导入/刷新(重新扫描数据源)按钮 - [ ] 键盘快捷键:导出(E), 配置(C), 切换封面焦点, 上下本书(J/K) - [ ] 自动更新检查机制 - [ ] 使用 QThreadPool + QRunnable 替代手动线程列表管理 - [ ] 添加简单单元测试框架 (pytest) 验证封面解析与导出核心逻辑 - [ ] 封面区域添加标题(“当前/下一本/再下一本”)并可隐藏 - [ ] 支持拖放本地 epub/ibooks 包,临时解析显示 ## 4. 技术债 (Tech Debt) - [ ] `ibook_export_app.py` 体积过大(UI/业务/AI/封面解析混杂)→ 拆分模块:`cover_finder.py` / `ai_review.py` / `ui_main.py` - [ ] 缺少异常分类(目前大量 bare except 打印) - [ ] 无统一日志(建议 logging + 级别控制) - [ ] 缺少类型注解与 mypy 校验 - [ ] 缺少依赖检查与缺包提示 (PyQt6, charts) ## 5. 配置项建议 | 功能 | 建议配置键 | 说明 | |------|------------|------| | 封面模式 | COVER_MODE | stretch / keep_ratio / crop | | 封面固定宽度 | COVER_FIXED_WIDTH | 默认 150 | | 高宽比例 | COVER_HW_RATIO | 默认 1.2 | | AI 书评开关 | ENABLE_AI_REVIEW | bool | | AI 提示词模板 | AI_REVIEW_PROMPT | 可包含 {bookname} | | 线程超时 | WORKER_TIMEOUT_SEC | 默认 8 | ## 6. 下一步优先级建议 1. 点击封面切换书籍(提升可用性) 2. 占位图与封面缓存(视觉一致 + 性能) 3. AI 请求取消/防抖(提升体验) 4. 模块拆分 + 日志/类型注解(降低维护成本) 5. 测试与封面解析单元测试(稳定性) --- 若需要我直接实现其中某一项,请告诉我对应条目。欢迎补充。