From 75fff11d048e1fa5514561e3064095f85161e939 Mon Sep 17 00:00:00 2001 From: James Mackay Date: Thu, 8 Oct 2026 09:13:51 +0100 Subject: [PATCH] fix(media_player): ADB-health-aware _attr_available; fetch_media_info dispatches through _track_task (F2, F4) --- custom_components/nvidia_shield/media_player.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/custom_components/nvidia_shield/media_player.py b/custom_components/nvidia_shield/media_player.py index e0cb8a2..7ba183c 100644 --- a/custom_components/nvidia_shield/media_player.py +++ b/custom_components/nvidia_shield/media_player.py @@ -94,6 +94,7 @@ class NvidiaShieldMediaPlayer(MediaPlayerEntity): _attr_has_entity_name = True _attr_name = None _attr_should_poll = False + # Overridden as a property below: ADB-health aware def __init__(self, hass: HomeAssistant, entry: ConfigEntry) -> None: self.hass = hass @@ -121,6 +122,18 @@ class NvidiaShieldMediaPlayer(MediaPlayerEntity): # here directly. self._entity_tasks: set = set() + @property + def available(self) -> bool: + """The bridge entities stay functional without ADB (passive manager). + + Unavailable only while an active ADB manager is down — its data is + unreliable until the watchdog reconnects (t5-F2). + """ + manager = getattr(self._entry, "runtime_data", None) + if not isinstance(manager, ShieldConnectionManager): + return True + return manager.connected or manager.awake is not None or not manager.available + @property def _jellyfin_entity(self) -> str | None: return self._entry.options.get(CONF_JELLYFIN_ENTITY) or None @@ -312,7 +325,7 @@ class NvidiaShieldMediaPlayer(MediaPlayerEntity): # Fetch media stream info when playing if new_jf in (STATE_PLAYING, STATE_PAUSED): entity_picture = new_state_obj.attributes.get("entity_picture", "") - self.hass.async_create_task( + self._track_task( self._fetch_media_info(entity_picture) ) else: