Skip to content

v0.13.0 — full MPRIS 2.2 surface: TrackList & Playlists

Latest

Choose a tag to compare

@github-actions github-actions released this 22 Jul 18:30

v0.13.0 — full MPRIS 2.2 surface: TrackList & Playlists

This cycle completes the MPRIS 2.2 surface of mpd2mpris, the asyncio + dbus-fast MPRIS 2 D-Bus bridge for MPD, powering the odio streamer (b0bbywan/odios). The MPD queue is now exposed as an MPRIS TrackList and stored playlists through the Playlists interface, so MPRIS clients can browse and edit the queue and switch playlists without speaking the MPD protocol.

Install:

curl -fsSL https://apt.odio.love/key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/odio.gpg
echo "deb [signed-by=/usr/share/keyrings/odio.gpg] https://apt.odio.love stable main" \
    | sudo tee /etc/apt/sources.list.d/odio.list
sudo apt update
sudo apt install mpd2mpris

Enable (D-Bus activated, default):
The shipped systemd user unit is Type=dbus with a matching D-Bus service file, so mpd2mpris auto-starts on the first MPRIS call (playerctl, a media key, a desktop applet, …). No manual enable required.

Enable eagerly (optional, run before any client asks):

systemctl --user enable --now mpd2mpris.service

✨ What's new

  • TrackList interface (org.mpris.MediaPlayer2.TrackList): the MPD queue on D-Bus, with track ids /org/mpris/MediaPlayer2/Track/<songid>. Queue changes are detected via the idle loop and diffed into TrackAdded/TrackRemoved signals, falling back to a single TrackListReplaced on larger churn — the queue is only re-fetched when MPD's queue version actually moves.
  • Queue editing over MPRIS: AddTrack, RemoveTrack and GoTo are wired to MPD (addid/deleteid/playid), with CanEditTracks gated on the server really allowing queue edits.
  • Playlists interface (org.mpris.MediaPlayer2.Playlists): MPD stored playlists as MPRIS playlists, refreshed on stored_playlist idle events. ActivatePlaylist replaces the queue with the playlist and starts playback; playlist names round-trip through a reversible object-path encoding, so any MPD playlist name is addressable.
  • ActivePlaylist follows MPD's lastloadedplaylist (MPD >= 0.24; gracefully unset on older servers).
  • Honest root capabilities: SupportedUriSchemes is now filled from MPD's urlhandlers (plus file when a music library is configured — exactly what TrackList.AddTrack accepts) and SupportedMimeTypes from MPD's decoders, instead of hardcoded empty lists.

⚙️ Compatibility

  • No new configuration: existing mpd2mpris.conf files work unchanged.
  • HasTrackList is now true; clients discover the new interfaces automatically.
  • ActivePlaylist needs MPD >= 0.24 (lastloadedplaylist in status); everything else works with any supported MPD.

🏗️ CI / Dev

  • Dependabot bumps: actions/checkout 6 → 7, actions/setup-python 6 → 7.
  • Test coverage for the new interfaces: queue diffing, playlist name encoding, capability gating.

Full changelog: v0.12.0...v0.13.0

What's Changed