Repository navigation
Description
检查清单
- 我已检索过仓库中现有的 Issues / Discussions,确保没有相同或极为相似的功能建议
- 我已经详细思考了该功能的合理性与使用场景,并在下方进行了清晰描述
功能描述
希望能给"连服务器"那一类来源(Subsonic / OpenSubsonic / Navidrome / Jellyfin / Emby)
补上两个能力:
- 收藏(红心) —— 对应 Subsonic 标准端点
star/unstar - 播放上报 —— 对应标准端点
scrobble
现在的表现:点红心会提示"该来源暂不支持喜欢",收藏不了;歌听完也不会同步到服务端。
我翻了下代码,红心能力是按 source 分发的,而服务器来源的 source 是 "streaming":
const isSupported = (track) => {
if (track.source === "local") return true;
if (track.source === "netease") return user.isLoggedIn;
return false; // streaming 落到这里
};
(src/composables/useFavorite.ts;streaming 这个来源见
src/services/collection/index.ts 里的 loadStreamingCollection)
适配器接口里也确实没有这两个方法。adapters/types.ts 的 StreamingAdapter 目前只有:
ping / listSongs / listAlbums / listArtists / listPlaylists
getAlbumSongs / getPlaylistSongs / getArtistAlbums / getArtistSongs
getStreamUrl / getLyrics / getCoverUrl
adapters/subsonic.ts 里 star / unstar / scrobble 各出现 0 次;
而 electron/main/services/neteaseScrobble.ts 的存在,也说明上报目前只为网易云实现。
所以 Jellyfin / Emby / Navidrome 的用户应该都受影响。
使用场景与价值
我自建了一台 OpenSubsonic 服务器。SPlayer 连上去之后浏览、播放、歌词、封面都正常,
只有这两件事做不了,具体卡在这里:
场景一:播放历史记录无法同步
我的服务端是靠播放历史算"每日推荐"的。因为播放不上报,这个数据一直是空的,
听歌的记录全丢了。
场景二:红心是我整理歌单的主要手段
听到喜欢的随手点个红心,之后回服务端按收藏筛选。现在只能专门开浏览器
进服务端网页去点,听歌和收藏被拆成了两个动作,很割裂。
场景三:多端不一致
就算我在服务端网页点了红心,SPlayer 里也看不到状态(因为不读 starred 字段),
两边对不上。
价值面:source === "streaming" 覆盖了全部服务器型来源,
补上这一处,Subsonic / OpenSubsonic / Navidrome / Jellyfin / Emby 的用户一起受益,
不是某个私有服务的小众需求。
替代方案或补充说明
我考虑过的替代方案
- 只在本地记一份收藏:不采用。服务端才是权威数据,本地记的话换设备就丢了,
也和其他客户端对不上。 - 只做播放上报、不做收藏:不采用。两件事的改动都落在同一层(适配器),
一起做成本几乎一样,拆开还得再动一次。 - 在组件里按来源写 if-else:不采用。收藏和上报本质是"服务器能力",
更适合放在StreamingAdapter接口上,由各适配器自己实现。
我倾向的实现方式
正在按 StreamingAdapter 接口新增 setFavorite / scrobble 的方向准备 PR:
Subsonic 用 star / unstar / scrobble,Jellyfin 用
FavoriteItems / Sessions/Playing,组件层只认 streaming 不再分支。
不过这两个方法加在 StreamingAdapter 上是能接受的方向吗?
还是另开一层能力探测接口更好(因为有些服务器可能只支持其一)?
服务端一侧是现成的
我按 OpenSubsonic 文档核对过,服务端侧的 star / unstar / scrobble /
getStarred2 / 歌曲对象的 starred 字段 / openSubsonic 标志 /
getOpenSubsonicExtensions 都已经实现,客户端补上就能通,不需要服务端配合改动。
另外,红心按钮现在是可见的,点了才提示不支持。如果不打算支持某个来源,
直接把按钮隐藏或置灰体验会更好。
关于这份建议是怎么写的
老实说一句:使用场景、复现和最终确认是我自己做的;代码层面的定位
是我配合 AI 助手一起翻源码得出的(就是把上面几处贴出来核对)。
我看仓库里带了 AGENTS.md / CLAUDE.md,猜测对 AI 参与是接受的,所以直接说明,
方便判断这份建议的可信度、以及需要我补充什么。
后续如果我来提 PR,也会在 PR 里同样说明。
Activity
github-actions commentedon Sep 28, 2026
👋 @Straxc
感谢提交 Issue!我们已经收到您的反馈,会尽快确认您的问题。
Thanks for opening this issue! We have received your report and will review it as soon as possible.