mirror of
https://github.com/hectorqin/reader.git
synced 2026-11-10 21:11:08 +08:00
Tapping the title opens 书籍信息, which now ends with 阅读记录: the places this account has been in the book on any device, newest first, each with its chapter, percentage, device and time. The position on screen is pushed before the list is read, so its entry is marked 当前; pressing another entry goes back there and saves it as the position. Offline the section says the history cannot be read; a failed read offers 重试. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2.6 KiB
2.6 KiB
P0 推进记录:第一批
范围为备份、阅读状态与本地数据可靠性。本批没有改数据库 schema,也没有执行部署或操作现有用户数据。
已实现
- 进度可靠性:后台/隐藏事件经过 App.flush,先等待阅读器待保存位置和本地写队列,再触发同步;打开书籍比较本地和服务端时间,保留较新的记录。服务端查询最长等待 5 秒,不可达时回退本地。存储写入错误向调用者报告,后续写入可重试,阅读器显示保存失败。
- 数据保护:服务端离线 backup/verify/restore 命令,完整 DATA_DIR 文件校验、SQLite 完整性检查、恢复到新目录、拒绝覆盖与路径重叠。未完成目录和备份目录不能直接启动服务。操作说明见 备份恢复。
- 部署接入:按当前 CI 标签规则把 latest 改为 main,可通过 READER_IMAGE 固定版本(后注:此后新增 GitHub Actions
release.yml,v*标签会向 Docker Hubhectorqin/reader-pro发布latest等标签,见开发指南);添加源码构建 Compose 覆盖文件;限制容器日志为 3 × 10 MiB;补充新旧版数据兼容范围。
验证方式
- Web 真实 ReaderScreen/OfflineStore 测试覆盖较新服务端、较新离线记录、网络失败、后台落盘顺序和读取期间不写临时位置。
- 存储失败测试先观察到错误被吞,再修复并验证重试及 outbox 保留。
- 服务端真实 SQLite 测试覆盖账号/进度/笔记/密钥/服务状态往返、损坏/缺失文件、路径篡改、恢复覆盖拒绝和启动保护。
- Compose 默认和源码构建配置可解析;两端 TypeScript/构建检查。
未完成的 P0 范围
进度历史和用户主动恢复入口:已提供(服务端reading_progress_history,阅读器「书籍信息 → 阅读记录」可回到任一记录位置)。多设备系统时间偏差下的冲突策略仍未处理;时间超前的设备仍会在合并中胜出,但被覆盖的位置可从阅读记录找回。- iOS Safari 与 Android 真机的手势、跨章、旋转、关闭/强制退出测试。本地 jsdom 测试不能替代真实渲染与系统生命周期。
- 备份/恢复图形界面和运行中一致性快照;本批只提供需要停机的维护命令。
- 首次接入向导、旧版数据自动迁移、数据损坏诊断界面。
- 镜像拉取及真实容器升级演练:当前 Docker 引擎未运行,无法执行。Linux 符号链接和权限分支需在 Linux CI 验证。
当前实现仍以客户端 updatedAt 合并进度,不能据此承诺所有历史跳章/进度问题都已修复。