From 857f0eba7ccc5d37a28c81967832776cadac2ea2 Mon Sep 17 00:00:00 2001 From: albaintor <118518828+albaintor@users.noreply.github.com> Date: Fri, 18 Jul 2025 17:05:34 +0200 Subject: [PATCH 1/2] Potential fix for failed reconnection --- src/tv.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/tv.py b/src/tv.py index ab28acf..d1ffa7b 100644 --- a/src/tv.py +++ b/src/tv.py @@ -12,7 +12,7 @@ import os import socket import time -from asyncio import AbstractEventLoop, timeout +from asyncio import AbstractEventLoop, timeout, Lock from enum import IntEnum from functools import wraps from typing import Any, Awaitable, Callable, Concatenate, Coroutine, ParamSpec, TypeVar @@ -232,6 +232,7 @@ def __init__( self._use_app_url = not device_config.use_chromecast self._player_state = media_player.States.ON self._muted = False + self._connect_lock = Lock() def __del__(self): """Destructs instance, disconnect AndroidTVRemote.""" @@ -422,14 +423,17 @@ async def connect(self, max_timeout: int | None = None) -> bool: :return: True if connected or connecting, False if timeout or authentication error occurred. """ # if we are already connecting, simply ignore further connect calls - if self._state == DeviceState.CONNECTING: + if self._connect_lock.locked(): _LOG.debug("[%s] Connection task already running", self.log_id) return True + await self._connect_lock.acquire() + if isinstance(self._atv.is_on, bool) and self._atv.is_on: _LOG.debug("[%s] Android TV is already connected", self.log_id) # just to make sure the state is up-to-date self.events.emit(Events.CONNECTED, self._identifier) + self._connect_lock.release() return True self._state = DeviceState.CONNECTING @@ -485,6 +489,7 @@ async def connect(self, max_timeout: int | None = None) -> bool: ) break + self._connect_lock.release() if not success: if self._state == DeviceState.CONNECTING: self._state = DeviceState.ERROR From b48cdd43445c2e30242c00c63b89e677a42ec2e2 Mon Sep 17 00:00:00 2001 From: Markus Zehnder Date: Tue, 28 Oct 2025 23:00:28 +0100 Subject: [PATCH 2/2] Fix import order --- src/tv.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tv.py b/src/tv.py index d1ffa7b..ee3eee8 100644 --- a/src/tv.py +++ b/src/tv.py @@ -12,7 +12,7 @@ import os import socket import time -from asyncio import AbstractEventLoop, timeout, Lock +from asyncio import AbstractEventLoop, Lock, timeout from enum import IntEnum from functools import wraps from typing import Any, Awaitable, Callable, Concatenate, Coroutine, ParamSpec, TypeVar