Minimize Sonos media_player.unjoin timeout (#74549)

This commit is contained in:
jjlawren
2022-07-07 02:43:10 -05:00
committed by Paulus Schoutsen
parent 414ea6fd8c
commit f6a23492fa

View File

@@ -69,6 +69,7 @@ from .speaker import SonosMedia, SonosSpeaker
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
LONG_SERVICE_TIMEOUT = 30.0 LONG_SERVICE_TIMEOUT = 30.0
UNJOIN_SERVICE_TIMEOUT = 0.1
VOLUME_INCREMENT = 2 VOLUME_INCREMENT = 2
REPEAT_TO_SONOS = { REPEAT_TO_SONOS = {
@@ -775,7 +776,7 @@ class SonosMediaPlayerEntity(SonosEntity, MediaPlayerEntity):
async def async_unjoin_player(self): async def async_unjoin_player(self):
"""Remove this player from any group. """Remove this player from any group.
Coalesces all calls within 0.5s to allow use of SonosSpeaker.unjoin_multi() Coalesces all calls within UNJOIN_SERVICE_TIMEOUT to allow use of SonosSpeaker.unjoin_multi()
which optimizes the order in which speakers are removed from their groups. which optimizes the order in which speakers are removed from their groups.
Removing coordinators last better preserves playqueues on the speakers. Removing coordinators last better preserves playqueues on the speakers.
""" """
@@ -785,6 +786,9 @@ class SonosMediaPlayerEntity(SonosEntity, MediaPlayerEntity):
async def async_process_unjoin(now: datetime.datetime) -> None: async def async_process_unjoin(now: datetime.datetime) -> None:
"""Process the unjoin with all remove requests within the coalescing period.""" """Process the unjoin with all remove requests within the coalescing period."""
unjoin_data = sonos_data.unjoin_data.pop(household_id) unjoin_data = sonos_data.unjoin_data.pop(household_id)
_LOGGER.debug(
"Processing unjoins for %s", [x.zone_name for x in unjoin_data.speakers]
)
await SonosSpeaker.unjoin_multi(self.hass, unjoin_data.speakers) await SonosSpeaker.unjoin_multi(self.hass, unjoin_data.speakers)
unjoin_data.event.set() unjoin_data.event.set()
@@ -794,6 +798,7 @@ class SonosMediaPlayerEntity(SonosEntity, MediaPlayerEntity):
unjoin_data = sonos_data.unjoin_data[household_id] = UnjoinData( unjoin_data = sonos_data.unjoin_data[household_id] = UnjoinData(
speakers=[self.speaker] speakers=[self.speaker]
) )
async_call_later(self.hass, 0.5, async_process_unjoin) async_call_later(self.hass, UNJOIN_SERVICE_TIMEOUT, async_process_unjoin)
_LOGGER.debug("Requesting unjoin for %s", self.speaker.zone_name)
await unjoin_data.event.wait() await unjoin_data.event.wait()