From 4f75de2345030786ee5e9849e6219241209be8ec Mon Sep 17 00:00:00 2001 From: jjlawren Date: Mon, 6 Jun 2022 17:18:07 -0500 Subject: [PATCH] Fix errors when unjoining multiple Sonos devices simultaneously (#73133) --- .../components/sonos/media_player.py | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/homeassistant/components/sonos/media_player.py b/homeassistant/components/sonos/media_player.py index f331f980bb4..938a651c34d 100644 --- a/homeassistant/components/sonos/media_player.py +++ b/homeassistant/components/sonos/media_player.py @@ -751,17 +751,23 @@ class SonosMediaPlayerEntity(SonosEntity, MediaPlayerEntity): media_content_type, ) - def join_players(self, group_members): + async def async_join_players(self, group_members): """Join `group_members` as a player group with the current player.""" - speakers = [] - for entity_id in group_members: - if speaker := self.hass.data[DATA_SONOS].entity_id_mappings.get(entity_id): - speakers.append(speaker) - else: - raise HomeAssistantError(f"Not a known Sonos entity_id: {entity_id}") + async with self.hass.data[DATA_SONOS].topology_condition: + speakers = [] + for entity_id in group_members: + if speaker := self.hass.data[DATA_SONOS].entity_id_mappings.get( + entity_id + ): + speakers.append(speaker) + else: + raise HomeAssistantError( + f"Not a known Sonos entity_id: {entity_id}" + ) - self.speaker.join(speakers) + await self.hass.async_add_executor_job(self.speaker.join, speakers) - def unjoin_player(self): + async def async_unjoin_player(self): """Remove this player from any group.""" - self.speaker.unjoin() + async with self.hass.data[DATA_SONOS].topology_condition: + await self.hass.async_add_executor_job(self.speaker.unjoin)