Repository navigation
ToneCore v0.34.0
实现「我的网易云歌单」(补 UI + 修字段映射);Subsonic 补 getMusicDirectory。
一、我的网易云歌单
真因:缺的是 UI,不是接口
排查时发现一件事值得说明:服务端接口(/api/netease/playlists、/playlist/:id/tracks)
早在 v0.32.0 就已经落地了。此前你看到的「未实现我的歌单」,
是因为前端没有任何界面去消费它 —— 接口一直都在,只是没人调用。
所以这次的工作是:补 UI + 修好数据映射。
实现
参考飞牛的 proxy/nmplaylists.py(只读虚拟歌单):
- 曲库页新增「我的网易云歌单」卡片墙
- 点开看曲目,可播放 / 加入队列 / 入库
- 只读:在 ToneCore 里加歌、移歌、删除都不回写网易(与飞牛一致)
- 未登录时区块自动隐藏,不显示空白
修了一个真 bug:歌手全空、封面全无
第一版 UI 出来后实测:歌单读到了 100 首,但每首都没有歌手、没有封面。
根因是字段名。网易 song/detail 返回的真实字段是:
| 我按这个取 | 实际是这个 |
|---|---|
artists |
ar |
album |
al(封面在 al.picUrl) |
duration |
dt(毫秒) |
修法:抽出 normalizeNeteaseSong() 统一映射,并兼容两种写法,
避免以后上游换字段再犯同样的错。
二、Subsonic 补 getMusicDirectory
端点数 35 → 36。
为什么补它:绝大多数 Subsonic 客户端(DSub / Substreamer / 音流等)
拉目录树的第一个调用就是 getMusicDirectory,而此前只实现了 getIndexes。
缺它时客户端往往直接报「无法读取目录」而连不上。
id 语义:1(根/歌手) → ar-(专辑) → al-(曲目) → 曲目详情。
关于「新增 API 连接方式」
现有连接层已是两套:
| 协议 | 端点数 | 用途 |
|---|---|---|
SongLoft /api/v1/* |
约 28 | 自有 Web / 兼容层 |
Subsonic /rest/* |
36 | 第三方播放器(DSub、音流等) |
本次补的是 Subsonic 的目录浏览缺口。如果你指的是另一套新协议
(比如 Navidrome 扩展、Jellyfin/Emby 音频、或 MPD),告诉我具体是哪个客户端,
我按它的协议补。
验证
npm run build ✅ web + server 均通过
npm test ✅ 15 项全过
package-lock ✅ 未漂移
需要你实测
你现在已登录网易云(昵称 DeltrivX),所以直接能看到效果:
- 曲库页 →「我的网易云歌单」→ 应有「DeltrivX喜欢的音乐」
- 点开看曲目:应有歌手名和封面(此前是全空)
- 点一首播放,确认能出声
待办
- 音源状态显示口径
- 锁屏动态歌词:浏览器能力边界,做不到