版本号:
- 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 例)
68 lines
4.4 KiB
Markdown
68 lines
4.4 KiB
Markdown
# 本地曲库(muse.db)— 更新方法与版本记录
|
||
|
||
> 支线文档(自建歌曲源),不涉及本体 App 代码。
|
||
> 工具:`/home/zijun/dsh_data/maidongktv/tools/muse-sync.py`(本机复刻 App 的 `MuseDbSync` 协议)
|
||
|
||
## 一、更新方法
|
||
|
||
```bash
|
||
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 容错**:列/表不存在时自动跳过,适配不同曲库版本)。
|