Files
zijunchiang 87aa979abd 合并自建歌曲源支线(selfhost-source)+ 版本号按约定修正为 1.6.0
版本号:
- 1.5.11 越界(规则 3 规定 patch ≤ 10)→ 修正为 1.6.0(进位到 minor、patch 归 0)
- versionCode 43 不变:43 从未对外发布,本次修正只是把命名拉回约定

合并支线(原在工作区根目录、App 仓库之外,DESIGN.md 自称"支线"):
- selfhost-source/server/   自建歌曲源服务器(纯 Python 标准库、零 pip 依赖)
- selfhost-source/deploy/、DESIGN.md、LIBRARY.md、build_inventory.py
- selfhost-source/inventory/ 小清单(playlists.csv、song-stats.md 等)
- ⚠️ inventory 生成物(songs-*.csv / singers-top.csv,共 84MB)不入库,
  已写入 .gitignore;需要时用 build_inventory.py 依据 muse.db 重新生成

同时入库的 App 侧支线改动(此前为工作树未提交状态):
- Whoami.kt(whoami 设备心跳)、DeviceIdentity.kt(设备身份伪装)
- PushDownload.kt / PushDownloadClient.kt(点歌推送)
- AdVideoFilter 带 query/fragment 的地址闸门;KTV_BRIDGE_API 11 → 13
- 修 ktv_api.js 的 global.KtvBridgeApiVersion(12 → 13,与注释及 Kotlin 两处校验一致)
- 对应单测:WhoamiTest / DeviceIdentityTest / PushDownloadTest / AdVideoFilterTest(共 39 例)

文档:
- DESIGN.md 的"在 App 仓库之外"约定改为"已并入仓库统一版本化"
- AGENTS.md 版本号行更新为 1.6.0/43,并新增支线并入说明

验证:assembleRelease + testReleaseUnitTest 全过(39 例)
2026-10-14 02:06:28 +08:00

4.4 KiB
Raw Permalink Blame History

本地曲库(muse.db)— 更新方法与版本记录

支线文档(自建歌曲源),不涉及本体 App 代码。 工具:/home/zijun/dsh_data/maidongktv/tools/muse-sync.py(本机复刻 App 的 MuseDbSync 协议)

一、更新方法

cd /home/zijun/dsh_data/maidongktv
python3 tools/muse-sync.py --check      # 只比对远端/本地版本
python3 tools/muse-sync.py --update     # 有更新才下载安装(412MB gz → 969MB db)
python3 tools/muse-sync.py --update --force   # 强制重下
MUSE_SYNC_HOST=mws.cherryonline.cn python3 tools/muse-sync.py --update   # 换同步主机

安装时会:下载 → 校验 md5 → 解压 → 旧库改名 muse.db.backup → 写入新库 + 更新 db_version.txt。

二、协议要点(2026-10-10 实测)

步骤 说明
登录 POST https://mconn.cherryonline.cn/mls-api/v1/login,body {encrypted_data: RSA_PKCS1v15({"device_id":"s00e04b021b2d"}), ip, dns, router, subnet_mask, channel:common, mode:ott} → 取 Set-Cookie: muse-portal-connector=…
同步 POST {host}/mls-api/v1/sqlite/sync,body {"last_sync_at":0,"music_file_type":214},必须带上面的 Cookie
主机 mconn.cherryonline.cn 与 mws.cherryonline.cn 实测都能返回文件(同一后台)
无 Cookie 返回 401 Unauthorized —— 登录 cookie 是唯一门槛,每次同步前都要重新登录
响应 {"errcode":0,"files":[{"day":"261009","db_vc":10100,"md5":"…","url":"https://ali.pri.mcdn.cherryonline.cn/muse.portal.ott_common.full.261009.db.gz?Expires=…&Signature=…"}]}

⚠️ 踩坑记录(是我自己的 bug,不是服务端限制):首版脚本用「按固定下标插入 -H Cookie」拼接 curl 参数, 把前一个 -H 的取值切断 → Cookie 没发出去 → sync 返回空 files,被误判成"服务端未授权、拿不到库"。 真相是渠道正常。修复方式:所有 -H 用追加(cmd += [...]),不要按下标插入。 另注意该库的下发与歌曲源取址的卡密/试用是两套东西 —— 曲库同步不看卡密。

三、版本对照(本机留档)

版本 曲库标识 歌曲数 文件 md5 备注
旧(已备份 muse.db.backup) db_version=20260717.211050 670,304 1,036,038,144 B 0bc6a5b51f0e24009ccfef2eee2d4d37 含 cloud_url / block_status 等列(44 列)
新(当前 muse.db) day=261009 / db_vc=10100 / db_version=1791504483411 696,393 1,015,771,136 B 2ad0b46eacfa2620f0224237d36eb348 官方版(29 列,无 cloud_url)

新库 schema 变化(对比旧库少 15 列): cloud_url、block_status、block_at、created_at、fav_at、media_id、p_origin、p_accomp、 p_volume、search_at、singer_names、source、source_id、store_id、updated_at 均不存在; 表也精简为:songs / singers / song_singer_relations / playlists / playlist_songs / song_langs / tag_groups / tag_relations / singer_areas / singer_types / albums / movies(后三者空)。

对本体 App 无影响:MuseDatabase.kt 的注释早已写明"官方曲库无 cloud_url 冗余列", SongApiClient 的 DB 兜底是历史遗留路径,不会因缺列崩溃。

四、当前统计快照(新库,2026-10-10)

  • 歌曲总数:696,393 首(对比旧库 +26,089,+3.9%)
  • 语言:国语 629,947(90.46%)· 粤语 24,646 · 闽南语 15,967 · 英语 14,701 · 其它 5,407 · 韩语 3,548 · 日语 2,115 · 未标注 62
  • 歌手:137,462 位;歌曲-歌手关联 771,261 条,覆盖 692,579 首(99.5%)
  • 歌单:276 个 / 43,054 条关联
  • 文件名:绝大多数为 <编号>.ts(自建服务器可直接沿用该命名)

五、清单产物(selfhost-source/inventory/)

文件 内容
song-stats.md 统计报告(总数/语言/标签/歌手/维度分布)
songs-all.csv 全量清单 696,393 行(44 MB):编号,歌名,语言,文件名,专辑,歌手,热度
songs-<语言>.csv 按语言拆分 8 份(国语 40 MB / 粤语 / 闽南语 / 英语 / 其它 / 韩语 / 日语 / 未标注)
singers-top.csv 全量歌手榜(按歌曲数)
playlists.csv 歌单清单

生成脚本:selfhost-source/build_inventory.py(已做 schema 容错:列/表不存在时自动跳过,适配不同曲库版本)。