Skip to content

v0.34.0

Latest

Choose a tag to compare

@deltrivx deltrivx released this 03 Oct 16:27

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),所以直接能看到效果:

  1. 曲库页 →「我的网易云歌单」→ 应有「DeltrivX喜欢的音乐」
  2. 点开看曲目:应有歌手名和封面(此前是全空)
  3. 点一首播放,确认能出声

待办

  • 音源状态显示口径
  • 锁屏动态歌词:浏览器能力边界,做不到