Skip to content

feat: 支持 Linux MPRIS 扩展元数据与动态歌词同步 - #427

Open
BHLuotianyi wants to merge 2 commits into
SPlayer-Dev:devfrom
BHLuotianyi:feat/mpris-extended-metadata
Open

BHLuotianyi wants to merge 2 commits into
SPlayer-Dev:devfrom
BHLuotianyi:feat/mpris-extended-metadata

Conversation

@BHLuotianyi

@BHLuotianyi BHLuotianyi commented Oct 28, 2026 •

Copy link
Copy Markdown

改动类型

  • 新功能(feat)

是否包含破坏性变更

  • 否

改动说明

动机

在 Linux 桌面环境下,外部组件(如 KDE Plasma 多媒体小部件、GNOME 扩展、Waybar、Quickshell 等桌面/顶栏组件)普遍通过 MPRIS 规范读取当前播放状态。
此前 SPlayer-Next 的 MPRIS 实现仅输出了基础的 title、artist、album、artUrl,缺少了歌曲链接(xesam:url)以及动态歌词文本(xesam:asText),导致外部桌面扩展无法直接跳转歌曲页面或展示同步歌词。

主要变更

  1. 原生层 MPRIS 元数据扩展(native/media-ctrl):
    • 在 MetadataParam 与 MetadataPayload 中增加可选的 url 与 lyrics 字段;
    • 在 sys_media/linux.rs 的 process_metadata 中通过 mpris-server 向 D-Bus 输出 xesam:url 与 xesam:asText。
  2. 多平台曲目 URL 规范解析(electron/main/utils/metadata.ts):
    • 新增 resolveTrackMprisUrl,支持根据曲目所属平台生成标准链接:
      • 网易云:https://music.163.com/song?id=...
      • QQ 音乐:https://y.qq.com/n/ryqq/songDetail/...(规范使用 songmid)
      • 酷狗音乐:https://www.kugou.com/song/#hash=...
      • 本地文件:标准 file:/// 协议 URL,且优先提取 cueAudioPath 规避 CUE 分轨虚拟路径
      • 流媒体安全:针对带认证密钥/Token 的 Subsonic/Jellyfin 直链,主动忽略不向 D-Bus 暴露敏感凭据
  3. 动态歌词实时回写(electron/main/services/media.ts):
    • 监听 nowPlaying.onLyricChange 事件,曲目歌词匹配解析就绪后,自动将纯文本提取并热更新至 MPRIS xesam:asText 属性;
    • 在封面晚到重发元数据时,保持当前已发布的歌词状态,避免覆盖。
  4. 设置项与即时生效(ipc/config.ts、前端设置与国际化):
    • 在 system.media 下增加 mprisExtendedMetadata 配置项(默认启用,仅 Linux 平台可见;仅在启用“系统媒体控制”时生效);
    • 在 applyConfigChange 中接入开关变化处理,开关切换时无需切歌即可即时重构并广播当前元数据;
    • 补齐 zh-CN.json 与 en-US.json 对应的多语言说明。

测试情况

更改过的源码在本地(Hyprland @ 7.3.0-4-cachyos)编译后运行无误。

截图 / 录屏

BEFORE:

222

AFTER:

图片 粘贴的文件

自查清单

  • 本 PR 只包含一个主要功能 / 修复,没有夹带无关改动
  • 已在本地完整测试通过;AI 生成的代码同样自行测试并审阅过,未做未经验证的提交
  • 已运行 pnpm format,并确认 pnpm typecheck、pnpm lint 通过
  • 改动涉及原生模块时已 pnpm build:native 验证;未手写 native/*/index.d.ts
  • 已向 dev 分支提交

- 在 native/media-ctrl 中补全 xesam:url 与 xesam:asText (歌词) 的输出
- 新增 resolveTrackMprisUrl 支持网易云、QQ音乐、酷狗、本地文件等多来源规范 URL 解析
- 监听 nowPlaying 歌词变更事件,实时同步文本歌词至 MPRIS 属性
- 新增 system.media.mprisExtendedMetadata 设置开关项与中英文国际化配置
- 完善单元测试与 CUE / 凭据安全过滤逻辑
@BHLuotianyi
BHLuotianyi marked this pull request as ready for review October 28, 2026 10:27

This branch has not been deployed

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant