Minimize Sonos media_player.unjoin
timeout (#74549)
This commit is contained in:
parent
681735b94c
commit
d203cb0658
1 changed files with 7 additions and 2 deletions
|
@ -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()
|
||||||
|
|
Loading…
Add table
Reference in a new issue