From: Marcel van der Veldt Date: Thu, 26 Feb 2026 09:30:24 +0000 (+0100) Subject: Fix state of syncgroup player X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=eb6c6f8f0245b281c1d5904afdb7bd1bd7297130;p=music-assistant-server.git Fix state of syncgroup player --- diff --git a/music_assistant/providers/sync_group/player.py b/music_assistant/providers/sync_group/player.py index 9925768e..5544172f 100644 --- a/music_assistant/providers/sync_group/player.py +++ b/music_assistant/providers/sync_group/player.py @@ -20,6 +20,8 @@ from music_assistant.models.player import DeviceInfo, Player, PlayerMedia from .constants import CONF_ENTRY_SGP_NOTE, CONF_MEMBERS_FILTER, EXTRA_FEATURES_FROM_MEMBERS if TYPE_CHECKING: + from music_assistant_models.player import PlayerSource + from .provider import SyncGroupProvider @@ -84,11 +86,6 @@ class SyncGroupPlayer(Player): base_features.add(feature) return base_features - @property - def playback_state(self) -> PlaybackState: - """Return the current playback state of the player.""" - return self.sync_leader.state.playback_state if self.sync_leader else PlaybackState.IDLE - @property def requires_flow_mode(self) -> bool: """Return if the player needs flow mode.""" @@ -96,15 +93,41 @@ class SyncGroupPlayer(Player): return leader.flow_mode return False + @property + def playback_state(self) -> PlaybackState: + """Return the current playback state of the player.""" + # NOTE: Not using 'state' here as we need the 'raw' value provided by the sync leader player + return self.sync_leader.playback_state if self.sync_leader else PlaybackState.IDLE + @property def elapsed_time(self) -> float | None: """Return the elapsed time in (fractional) seconds of the current track (if any).""" - return self.sync_leader.state.elapsed_time if self.sync_leader else None + # NOTE: Not using 'state' here as we need the 'raw' value provided by the sync leader player + return self.sync_leader.elapsed_time if self.sync_leader else None @property def elapsed_time_last_updated(self) -> float | None: """Return when the elapsed time was last updated.""" - return self.sync_leader.state.elapsed_time_last_updated if self.sync_leader else None + # NOTE: Not using 'state' here as we need the 'raw' value provided by the sync leader player + return self.sync_leader.elapsed_time_last_updated if self.sync_leader else None + + @property + def current_media(self) -> PlayerMedia | None: + """Return the currently playing media (if any).""" + # NOTE: Not using 'state' here as we need the 'raw' value provided by the sync leader player + return self.sync_leader.current_media if self.sync_leader else None + + @property + def active_source(self) -> str | None: + """Return the active source id of the current media (if any).""" + # NOTE: Not using 'state' here as we need the 'raw' value provided by the sync leader player + return self.sync_leader.active_source if self.sync_leader else None + + @property + def source_list(self) -> list[PlayerSource]: + """Return list of available (native) sources for this player.""" + # NOTE: Not using 'state' here as we need the 'raw' value provided by the sync leader player + return self.sync_leader.source_list if self.sync_leader else [] @property def can_group_with(self) -> set[str]: