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 mpd2mprisEnable (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 intoTrackAdded/TrackRemovedsignals, falling back to a singleTrackListReplacedon larger churn — the queue is only re-fetched when MPD's queue version actually moves. - Queue editing over MPRIS:
AddTrack,RemoveTrackandGoToare wired to MPD (addid/deleteid/playid), withCanEditTracksgated on the server really allowing queue edits. - Playlists interface (
org.mpris.MediaPlayer2.Playlists): MPD stored playlists as MPRIS playlists, refreshed onstored_playlistidle events.ActivatePlaylistreplaces 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:
SupportedUriSchemesis now filled from MPD'surlhandlers(plusfilewhen a music library is configured — exactly whatTrackList.AddTrackaccepts) andSupportedMimeTypesfrom MPD'sdecoders, instead of hardcoded empty lists.
⚙️ Compatibility
- No new configuration: existing
mpd2mpris.conffiles work unchanged. HasTrackListis nowtrue; clients discover the new interfaces automatically.ActivePlaylistneeds MPD >= 0.24 (lastloadedplaylistinstatus); everything else works with any supported MPD.
🏗️ CI / Dev
- Dependabot bumps:
actions/checkout6 → 7,actions/setup-python6 → 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
- Bump actions/checkout from 6 to 7 in the actions group by @dependabot[bot] in #12
- Bump actions/setup-python from 6 to 7 in the actions group by @dependabot[bot] in #14
- Mpris2.2 by @b0bbywan in #13