v1.1.0
v1.1.0 — asyncio rewrite
First stable release of the asyncio rewrite of the hifiberry/snapcastmpris fork, retargeted for odio streamer (b0bbywan/odios).
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 snapclientmprisEnable (user mode, default — session D-Bus):
systemctl --user enable --now snapclientmpris.serviceEnable (system mode — legacy hifiberry-style, system D-Bus):
sudo cp /usr/share/snapclientmpris/snapclientmpris.conf /etc/snapclientmpris.conf
sudo sed -i 's/^dbus-bus = session/dbus-bus = system/' /etc/snapclientmpris.conf
sudo systemctl enable --now snapclientmpris.service✨ What's new
- Multi-room playback control: MPRIS Play / Pause / Next / Previous / Stop forward to the stream source via snapserver's
Stream.Control— pausing from one room pauses every listener on the stream (Spotify-Connect-like semantics).Can*capabilities mirrored from the stream so MPRIS clients only enable the buttons the source actually supports. - Real track metadata: title, artist, album, art are picked up from snapserver's
Stream.OnPropertiesevent (snapserver >= 0.27) and surfaced asxesam:*/mpris:*keys. - Zeroconf snapserver discovery: leave
server =unset and the daemon finds the snapserver via_snapcast-ctrl._tcp(snapserver >= 0.33).control-portoverride stays for older snapserver.
⚙️ Configuration
- XDG-aware:
$XDG_CONFIG_HOME/snapclientmpris/snapclientmpris.confwith/etc/snapclientmpris.confas fallback; example template at/usr/share/snapclientmpris/snapclientmpris.conf. dbus-buskey:session(default —systemctl --user) orsystem(legacy hifiberry-style, runs as_snapclientwith the shipped D-Bus policy at/usr/share/dbus-1/system.d/org.mpris.MediaPlayer2.snapcast.conf).
🛠️ Under the hood
- Asyncio core: single event loop.
python-snapcastdrives the snapserver JSON-RPC channel;dbus-fastexports MPRIS. No more threads + GLib MainLoop + dbus-python + websocket-client. - Repo renamed
snapcastmpris→snapclientmpris(the daemon controls the local snapclient, not the snapserver). Bus name unchanged:org.mpris.MediaPlayer2.snapcast. - Dropped: ALSA volume sync and the HiFiBerry pause-all integration — both were tied to the original appliance and don't fit the odio.love target.
🏗️ CI / Dev
- Top-level
Makefile(lint/test/build/deb/sync-deb/clean) shared by local dev and the GitHub workflow. ruff+mypy+pytestgating PRs..debbuilt ondebian:trixie, attached to this release, and dispatched tob0bbywan/odio-apt-reposoapt.odio.lovepicks it up.
Full changelog: v1.0.1-rc.1...v1.1.0