Appearance
备份与恢复
这一页之前描述的是一套“压缩包 + manifest + 六步恢复流程”的设计,但当前代码里的 备份/恢复只是本地沙盒内的轻量快照,覆盖范围小得多。下面按实际实现重写,避免把 设想中的能力当成已有功能。
当前实现范围
设置 → 数据管理里的“备份”“恢复”按钮,实际只针对两个存储 key:
text
flagship.books 书架(书籍列表,含每本书的来源、目录、当前章节等)
flagship.bookSources 书源列表不在这套备份范围内:阅读进度(flagship.progress.<bookId>,单独按书存储)、书签 (flagship.bookmarks)、替换规则(flagship.cleanRules)、RSS 订阅、TTS 引擎配置、 阅读排版设置。这些数据依然持久化在本地,只是不会被“备份”按钮覆盖式保护,也不会被 “恢复”按钮还原——它们的跨设备保护依赖的是 iCloud 同步,不是这里的备份。
备份/恢复的实际行为
- 点击“备份”→对
flagship.books、flagship.bookSources各自调用一次RobustStorageManager.createBackup(key:):把当前文件复制一份到应用沙盒内的.backup/隐藏目录,文件名是<key>_<unix时间戳>.bak; - 每个 key 只保留最新 3 份备份,超出的旧备份会被自动删除;
- 点击“恢复”→对每个 key 调用
restoreFromLatestBackup(key:):按创建时间取最新一份.bak文件,覆盖回当前数据文件; - 成功/失败都会弹 toast 提示(这是后来修的一个问题——早期版本静默执行,用户点了按钮 却看不到任何反馈,容易误以为“点了没反应”而重复点击)。
这套机制本质上是同一台设备上的“最近几次快照”,用来防止一次写入把书架/书源数据 写坏后无法回滚,不是可以导出分享、转移到另一台设备的备份文件——.backup/ 目录在 应用沙盒内部,不出现在“文件”App 或隔空投送里。另外,写入 flagship.books/ flagship.bookSources 这类受管理的 key 时(只要 enableAutoBackup 开启,默认就是 开启的),本身也会在覆盖前自动打一份快照,不是只有手动点“备份”才会产生快照。
