From 889830370ce2c40a85127e1f183306b4d2eafaef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Lov=C3=A9n?= Date: Tue, 6 Sep 2022 21:18:55 +0000 Subject: [PATCH] Make entities unavailable on disconnect. Fix #407 --- custom_components/browser_mod/browser.py | 6 ++++-- custom_components/browser_mod/connection.py | 4 ++-- custom_components/browser_mod/entities.py | 4 ++++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/custom_components/browser_mod/browser.py b/custom_components/browser_mod/browser.py index 7b24cb0..6cfe5a1 100644 --- a/custom_components/browser_mod/browser.py +++ b/custom_components/browser_mod/browser.py @@ -172,15 +172,17 @@ def connection(self): """The current websocket connections for this Browser.""" return self._connections - def open_connection(self, connection, cid): + def open_connection(self, hass, connection, cid): """Add a websocket connection.""" self._connections.append((connection, cid)) + self.update(hass, {"connected": True}) - def close_connection(self, connection): + def close_connection(self, hass, connection): """Close a websocket connection.""" self._connections = list( filter(lambda v: v[0] != connection, self._connections) ) + self.update(hass, {"connected": False}) def getBrowser(hass, browserID, *, create=True): diff --git a/custom_components/browser_mod/connection.py b/custom_components/browser_mod/connection.py index a54857d..ab40add 100644 --- a/custom_components/browser_mod/connection.py +++ b/custom_components/browser_mod/connection.py @@ -52,7 +52,7 @@ def close_connection(): store_listener() dev = getBrowser(hass, browserID, create=False) if dev: - dev.close_connection(connection) + dev.close_connection(hass, connection) connection.subscriptions[msg["id"]] = close_connection connection.send_result(msg["id"]) @@ -60,7 +60,7 @@ def close_connection(): if store.get_browser(browserID).registered: dev = getBrowser(hass, browserID) dev.update_settings(hass, store.get_browser(browserID).asdict()) - dev.open_connection(connection, msg["id"]) + dev.open_connection(hass, connection, msg["id"]) await store.set_browser( browserID, last_seen=datetime.now(tz=timezone.utc).isoformat(), diff --git a/custom_components/browser_mod/entities.py b/custom_components/browser_mod/entities.py index 6421d41..64d71a0 100644 --- a/custom_components/browser_mod/entities.py +++ b/custom_components/browser_mod/entities.py @@ -40,6 +40,10 @@ def extra_state_attributes(self): "browserID": self.browserID, } + @property + def available(self): + return self._data.get("connected", False) + @property def name(self): return self._name