Skip to content

为流媒体来源补齐收藏与播放上报(Subsonic/OpenSubsonic/Jellyfin/Emby) #330

Closed

Description

@Straxc

检查清单

  • 我已检索过仓库中现有的 Issues / Discussions,确保没有相同或极为相似的功能建议
  • 我已经详细思考了该功能的合理性与使用场景,并在下方进行了清晰描述

功能描述

希望能给"连服务器"那一类来源(Subsonic / OpenSubsonic / Navidrome / Jellyfin / Emby)
补上两个能力:

  1. 收藏(红心) —— 对应 Subsonic 标准端点 star / unstar
  2. 播放上报 —— 对应标准端点 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 的用户一起受益,
不是某个私有服务的小众需求。

替代方案或补充说明

我考虑过的替代方案

  1. 只在本地记一份收藏:不采用。服务端才是权威数据,本地记的话换设备就丢了,
    也和其他客户端对不上。
  2. 只做播放上报、不做收藏:不采用。两件事的改动都落在同一层(适配器),
    一起做成本几乎一样,拆开还得再动一次。
  3. 在组件里按来源写 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 都已经实现,客户端补上就能通,不需要服务端配合改动。

另外,红心按钮现在是可见的,点了才提示不支持。如果不打算支持某个来源,
直接把按钮隐藏或置灰体验会更好。

Image

关于这份建议是怎么写的
老实说一句:使用场景、复现和最终确认是我自己做的;代码层面的定位
是我配合 AI 助手一起翻源码得出的(就是把上面几处贴出来核对)。
我看仓库里带了 AGENTS.md / CLAUDE.md,猜测对 AI 参与是接受的,所以直接说明,
方便判断这份建议的可信度、以及需要我补充什么。
后续如果我来提 PR,也会在 PR 里同样说明。

Activity

  1. added
    新功能新功能建议或改进 / Feature request
    on Sep 28, 2026
  2. github-actions commented on Sep 28, 2026

    @github-actions

    👋 @Straxc

    感谢提交 Issue!我们已经收到您的反馈,会尽快确认您的问题。

    Thanks for opening this issue! We have received your report and will review it as soon as possible.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    新功能新功能建议或改进 / Feature request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions