Skip to content

v1.0.16 · 订阅源 OPML 与整库数据的导入导出

Choose a tag to compare

@TomoeMami TomoeMami released this 10 Oct 22:48
· 5 commits to main since this release

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 与 release assembleHap 均 BUILD SUCCESSFUL。

未做(上游此项里的其余部分):自动数据库导出(每 3 天一份、只留最近 5 份)与 HTML / 收藏导出;
取舍记录见 docs/07-ui-layout-parity.md §4 #40/#41。