From 329ecc74c4ed47385e8625e485b2d1a14fc8f7e0 Mon Sep 17 00:00:00 2001 From: jjlawren Date: Wed, 29 Jun 2022 08:23:22 -0500 Subject: [PATCH] Optimize Sonos join behavior when using `media_player.join` (#74174) Optimize Sonos media_player.join service --- .../components/sonos/media_player.py | 19 +++++++------------ homeassistant/components/sonos/speaker.py | 4 ++-- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/homeassistant/components/sonos/media_player.py b/homeassistant/components/sonos/media_player.py index 7b18b102919..c68110d9763 100644 --- a/homeassistant/components/sonos/media_player.py +++ b/homeassistant/components/sonos/media_player.py @@ -763,19 +763,14 @@ class SonosMediaPlayerEntity(SonosEntity, MediaPlayerEntity): async def async_join_players(self, group_members): """Join `group_members` as a player group with the current player.""" - 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}" - ) + 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}") - await self.hass.async_add_executor_job(self.speaker.join, speakers) + await SonosSpeaker.join_multi(self.hass, self.speaker, speakers) async def async_unjoin_player(self): """Remove this player from any group. diff --git a/homeassistant/components/sonos/speaker.py b/homeassistant/components/sonos/speaker.py index f4d1d89aa2f..0c5bec06dfb 100644 --- a/homeassistant/components/sonos/speaker.py +++ b/homeassistant/components/sonos/speaker.py @@ -883,9 +883,9 @@ class SonosSpeaker: for speaker in speakers: if speaker.soco.uid != self.soco.uid: - speaker.soco.join(self.soco) - speaker.coordinator = self if speaker not in group: + speaker.soco.join(self.soco) + speaker.coordinator = self group.append(speaker) return group