"Non-Async operation detected: This method may only be called from the eventloop."
)
- def _create_task() -> None:
+ def _create_task(_target: Coroutine[Any, Any, _R]) -> None:
self._tracked_timers.pop(task_id)
- if TYPE_CHECKING:
- target = cast(Coroutine[Any, Any, _R], target) # noqa: F823
- self.create_task(target, *args, task_id=task_id, abort_existing=True, **kwargs)
+ self.create_task(_target, *args, task_id=task_id, abort_existing=True, **kwargs)
if asyncio.iscoroutinefunction(target) or asyncio.iscoroutine(target):
# coroutine function
- handle = self.loop.call_later(delay, _create_task)
+ if TYPE_CHECKING:
+ target = cast(Coroutine[Any, Any, _R], target)
+ handle = self.loop.call_later(delay, _create_task, target)
else:
# regular callable
if TYPE_CHECKING:
# register callback for state changed
self._on_cleanup_callbacks.append(
self.client.subscribe(
- self._on_player_event,
+ self.on_player_event,
(
SonosEventType.GROUP_UPDATED,
SonosEventType.PLAYER_UPDATED,
await self.client.disconnect()
self.logger.debug("Disconnected from player API")
- def _on_player_event(self, event: SonosEvent) -> None:
+ def on_player_event(self, event: SonosEvent | None) -> None:
"""Handle incoming event from player."""
self.update_attributes()
self.mass.players.update(self.player_id)
self, player_id, discovery_info=discovery_info, ip_address=address
)
await sonos_player.setup()
+ # trigger update on all existing players to update the group status
+ for _player in self.sonos_players.values():
+ if _player.player_id != player_id:
+ _player.on_player_event(None)
async def _handle_sonos_queue_itemwindow(self, request: web.Request) -> web.Response:
"""