Repository navigation
v1.0.16 · 订阅源 OPML 与整库数据的导入导出
1.0.15 以来的改动:
-
新增「备份与恢复」页(设置 → 库与统计 → 备份与恢复),入口与屏内分组对齐上游
preferences.xml的prefScreenImportExport("Backup & restore")与preferences_import_export.xml:
数据库导出 / 数据库导入 / OPML 导出 / OPML 导入。 -
订阅源 OPML 导入导出(对照上游
storage/importexport的OpmlWriter/OpmlReader+
OpmlImportActivity):- 导出文件名
homenapod-feeds-yyyy-MM-dd.opml(上游antennapod-feeds-%s.opml同款);
head 写title与dateCreated,outline 属性顺序text/title/type/xmlUrl/htmlUrl与上游一致,
空type/htmlUrl不写,且只写已订阅的源。 - 导入按 BOM 嗅探 UTF-8 / UTF-16,标题优先
title、支持嵌套文件夹 outline、opml树外忽略;
选好文件后进上游同款勾选列表(全选 / 取消全选 / 确认),已订阅的源自动去重。
- 导出文件名
-
HomenaPod 全部数据的导入导出(对照上游
DatabaseExporter+ 官方《数据库备份与恢复》):- 导出:
relationalStore.backup()生成一致性快照,按字节数核对后写到用户选择的位置,
文件名homenapod-backup-yyyy-MM-dd.db;内容覆盖订阅、单集、播放进度、队列、收藏、收听历史
(与上游一致:不含已下载的音频文件)。 - 导入:先弹上游同款警告(会替换当前全部订阅与播放记录),再校验 SQLite 文件头与库版本
(拒绝导入更新版本导出的库,避免把库换成读不出来的版本),restore()成功后提示并自动重启应用;
重启走ApplicationContext.restartApp()(API 12,兼容本工程compatibleSdkVersion 5.0.2(14))。
- 导出:
-
顺带上一个未发版的改动(1.0.15 之后、本轮之前):睡眠定时的「摇一摇重置」与「结束前震动提醒」
改为用户可开关(摇一摇默认开、震动默认关),并修掉定时自然到点后不释放加速度计的问题;
「关于」页把杜撰的「摇一摇跳过」更正为「摇一摇重置睡眠定时」,并写明两条权限的实际用途与默认状态。
上机验证(DevEco 模拟器 phone26 / HarmonyOS 7.0.0 / API 26,未签名 HAP):
- OPML:导出 89 条 → 取消订阅一个源(再导出为 88)→ 导入旧 OPML 全选确认 →
提示「已添加 1 个订阅,正在后台获取剧集…」→ 再导出回到 89。 - 整库:导出 76,206,080 B(
SQLite format 3头;宿主sqlite3读user_version=2、Feeds 89、
FeedItems 15745、Queue 11)→ 导入后应用自动重启 → 再导出逐项一致;
负例(把 OPML 当数据库导入)提示「这个文件不是 HomenaPod 的数据库备份。」且库未改动。 - 门禁:
scripts/runtime-pure-test.ps1(新增 40+ 条 OPML / SQLite 头断言)PASSED;
debug 与 releaseassembleHap均 BUILD SUCCESSFUL。
未做(上游此项里的其余部分):自动数据库导出(每 3 天一份、只留最近 5 份)与 HTML / 收藏导出;
取舍记录见 docs/07-ui-layout-parity.md §4 #40/#41。