music-assistant-server

Branch:dev-lidarr-plugin

Commit Details

Merge players with multiple protocols together (#3150)

* Base implementation of merging players through protocol linking

* Restore after merge conflict

* follow-up

* Fix config handling for players

* some tweaks

* Handle more (edge) cases

* bunch of fixes

* More fixes

* Some more tweaks

* Fix group_members calc

* A bunch of tweaks and refactoring

* more tweaks

* more follow-up

* Update controller.py

* refactoring groups

* more fixes for syncgroup

* fix readme nitpick

* revert frozen in uv run

* Add default providers conf

* fix tests

* more tweaks

* fixes for syncgroups

* More small tweaks

* more sync player tweaks
Forgejo

Author

Marcel van der Veldt<[email protected]>
February 15, 2026 at 02:50 PM UTC

Committer

February 15, 2026 at 02:50 PM UTC
3771additions
1703deletions
78files changed

Parent commits

Changes

78 files
+3771-1703

Changed Files (78)

music_assistant/
music_assistant/controllers/
music_assistant/controllers/players/
music_assistant/controllers/streams/
music_assistant/controllers/webserver/
music_assistant/helpers/
music_assistant/models/
music_assistant/providers/_demo_player_provider/
music_assistant/providers/airplay/
music_assistant/providers/airplay/protocols/
music_assistant/providers/airplay_receiver/
music_assistant/providers/alexa/
music_assistant/providers/bluesound/
music_assistant/providers/chromecast/
music_assistant/providers/dlna/
music_assistant/providers/fully_kiosk/
music_assistant/providers/hass_players/
music_assistant/providers/heos/
music_assistant/providers/musiccast/
music_assistant/providers/plex_connect/
music_assistant/providers/roku_media_assistant/
music_assistant/providers/sendspin/
music_assistant/providers/snapcast/
music_assistant/providers/sonos/
music_assistant/providers/sonos_s1/
music_assistant/providers/spotify_connect/
music_assistant/providers/squeezelite/
music_assistant/providers/sync_group/
music_assistant/providers/universal_group/
music_assistant/providers/universal_player/
tests/
tests/core/
music_assistant/constants.py
+15-10
music_assistant/controllers/config.py
+124-114
music_assistant/controllers/player_queues.py
+68-61
music_assistant/controllers/players/README.md
music_assistant/controllers/players/__init__.py
music_assistant/controllers/players/controller.py
+634-593
music_assistant/controllers/players/helpers.py
music_assistant/controllers/players/protocol_linking.py
music_assistant/controllers/players/sync_groups.py
music_assistant/controllers/streams/streams_controller.py
+36-36
music_assistant/controllers/webserver/README.md
music_assistant/helpers/audio.py
+18-16
music_assistant/helpers/util.py
music_assistant/mass.py
+9-3
music_assistant/models/player.py
+591-367
music_assistant/models/player_provider.py
music_assistant/models/provider.py
music_assistant/providers/_demo_player_provider/player.py
+4-4
music_assistant/providers/_demo_player_provider/provider.py
+1-1
music_assistant/providers/airplay/helpers.py
music_assistant/providers/airplay/player.py
+39-30
music_assistant/providers/airplay/protocols/raop.py
music_assistant/providers/airplay/provider.py
+4-10
music_assistant/providers/airplay/stream_session.py
-2
music_assistant/providers/airplay_receiver/__init__.py
+4-4
music_assistant/providers/alexa/__init__.py
+1
music_assistant/providers/bluesound/const.py
music_assistant/providers/bluesound/player.py
+10-7
music_assistant/providers/bluesound/provider.py
music_assistant/providers/chromecast/helpers.py
+34
music_assistant/providers/chromecast/player.py
+49-17
music_assistant/providers/chromecast/provider.py
music_assistant/providers/dlna/manifest.json
music_assistant/providers/dlna/player.py
+143-13
music_assistant/providers/dlna/provider.py
-4
music_assistant/providers/fully_kiosk/player.py
+3-4
music_assistant/providers/hass_players/player.py
+11-6
music_assistant/providers/hass_players/provider.py
music_assistant/providers/heos/player.py
music_assistant/providers/heos/provider.py
+1-1
music_assistant/providers/musiccast/player.py
+27-8
music_assistant/providers/musiccast/provider.py
+1-1
music_assistant/providers/plex_connect/__init__.py
+3-3
music_assistant/providers/plex_connect/player_remote.py
+12-12
music_assistant/providers/roku_media_assistant/player.py
+6-5
music_assistant/providers/roku_media_assistant/provider.py
+2-1
music_assistant/providers/sendspin/player.py
+7-5
music_assistant/providers/snapcast/player.py
+30-44
music_assistant/providers/snapcast/provider.py
+3-3
music_assistant/providers/sonos/const.py
music_assistant/providers/sonos/player.py
+85-247
music_assistant/providers/sonos/provider.py
+6-22
music_assistant/providers/sonos_s1/constants.py
music_assistant/providers/sonos_s1/player.py
+43-8
music_assistant/providers/sonos_s1/provider.py
+1-1
music_assistant/providers/spotify_connect/ARCHITECTURE.md
music_assistant/providers/spotify_connect/__init__.py
+4-4
music_assistant/providers/squeezelite/player.py
+25-8
music_assistant/providers/squeezelite/provider.py
+1-1
music_assistant/providers/sync_group/__init__.py
music_assistant/providers/sync_group/constants.py
music_assistant/providers/sync_group/icon.svg
music_assistant/providers/sync_group/icon_monochrome.svg
music_assistant/providers/sync_group/manifest.json
music_assistant/providers/sync_group/player.py
music_assistant/providers/sync_group/provider.py
music_assistant/providers/universal_group/player.py
+49-23
music_assistant/providers/universal_player/README.md
music_assistant/providers/universal_player/__init__.py
music_assistant/providers/universal_player/constants.py
music_assistant/providers/universal_player/manifest.json
music_assistant/providers/universal_player/player.py
music_assistant/providers/universal_player/provider.py
pyproject.toml
+1-3
tests/common.py
+5-1
tests/core/test_player_controller.py
tests/core/test_player_grouping.py
tests/core/test_protocol_linking.py
+1661