Skip to content

Commit

Permalink
more tweaks and fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
marcelveldt committed Oct 17, 2024
1 parent e5f8a77 commit 5f9bbf7
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 12 deletions.
1 change: 1 addition & 0 deletions music_assistant/server/controllers/player_queues.py
Original file line number Diff line number Diff line change
Expand Up @@ -653,6 +653,7 @@ async def play(self, queue_id: str) -> None:
return
if (
(queue := self._queues.get(queue_id))
and queue.active
and queue_player.powered
and queue.state == PlayerState.PAUSED
):
Expand Down
4 changes: 2 additions & 2 deletions music_assistant/server/controllers/players.py
Original file line number Diff line number Diff line change
Expand Up @@ -648,7 +648,7 @@ async def cmd_sync_many(self, target_player: str, child_player_ids: list[str]) -
for child_player_id in child_player_ids:
if child_player_id == target_player:
continue
if not (child_player := self.get(child_player_id)):
if not (child_player := self.get(child_player_id)) or not child_player.available:
self.logger.warning("Player %s is not available", child_player_id)
continue
if PlayerFeature.SYNC not in child_player.supported_features:
Expand Down Expand Up @@ -980,7 +980,7 @@ def iter_group_members(
"""Get (child) players attached to a group player or syncgroup."""
for child_id in list(group_player.group_childs):
if child_player := self.get(child_id, False):
if not child_player.available:
if not child_player.available or not child_player.enabled:
continue
if not (not only_powered or child_player.powered):
continue
Expand Down
2 changes: 2 additions & 0 deletions music_assistant/server/models/player_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,8 @@ async def discover_players(self) -> None:
# Default implementation is mdns discovery, which will also automatically
# discovery players during runtime. If a provider overrides this method and
# doesn't use mdns, it is responsible for periodically searching for new players.
if not self.available:
return
for mdns_type in self.manifest.mdns_discovery or []:
for mdns_name in set(self.mass.aiozc.zeroconf.cache.cache):
if mdns_type not in mdns_name or mdns_type == mdns_name:
Expand Down
18 changes: 8 additions & 10 deletions music_assistant/server/providers/player_group/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -267,10 +267,11 @@ async def on_player_config_change(self, config: PlayerConfig, changed_keys: set[
members = config.get_value(CONF_GROUP_MEMBERS)
# ensure we filter invalid members
members = self._filter_members(config.get_value(CONF_GROUP_TYPE), members)
if player := self.mass.players.get(config.player_id):
player.group_childs = members
if player.powered:
await self._sync_syncgroup(player)
if group_player := self.mass.players.get(config.player_id):
group_player.group_childs = members
if group_player.powered:
# power on group player (which will also resync) if needed
await self.cmd_power(group_player.player_id, True)
await super().on_player_config_change(config, changed_keys)

async def cmd_stop(self, player_id: str) -> None:
Expand Down Expand Up @@ -374,11 +375,8 @@ async def play_media(
) -> None:
"""Handle PLAY MEDIA on given player."""
group_player = self.mass.players.get(player_id)
# power on (or resync) if needed
if group_player.powered and player_id.startswith(SYNCGROUP_PREFIX):
await self._sync_syncgroup(group_player)
else:
await self.cmd_power(player_id, True)
# power on (which will also resync) if needed
await self.cmd_power(player_id, True)

# handle play_media for sync group
if player_id.startswith(SYNCGROUP_PREFIX):
Expand Down Expand Up @@ -619,7 +617,7 @@ async def _sync_syncgroup(self, group_player: Player) -> None:
"""Sync all (possible) players of a syncgroup."""
sync_leader = self._select_sync_leader(group_player)
members_to_sync: list[str] = []
for member in self.mass.players.iter_group_members(group_player, active_only=True):
for member in self.mass.players.iter_group_members(group_player, active_only=False):
if sync_leader.player_id == member.player_id:
# skip sync leader
continue
Expand Down

0 comments on commit 5f9bbf7

Please sign in to comment.