# ungroup player at power off
player_was_synced = player.synced_to is not None
- if not powered:
- # this will handle both synced players and group players
+ if player.type == PlayerType.PLAYER and not powered:
+ # ungroup player if it is synced (or is a sync leader itself)
# NOTE: ungroup will be ignored if the player is not grouped or synced
await self.cmd_ungroup(player_id)
else:
# handle TURN_OFF of the group player by turning off all members
# optimistically set the group state to prevent race conditions
- # with the ungroup command
group_player.powered = False
for member in self.mass.players.iter_group_members(
group_player, only_powered=True, active_only=True
# reset active group on player when the group is turned off
member.active_group = None
member.active_source = None
+ if member.synced_to:
+ # always ungroup first
+ await self.mass.players.cmd_ungroup(member.player_id)
# handle TURN_OFF of the group player by turning off all members
if member.powered and member.power_control != PLAYER_CONTROL_NONE:
await self.mass.players.cmd_power(member.player_id, False)