From a08cb2ca9d3eeb1ba578d7b34a3f7023d7cb5ae1 Mon Sep 17 00:00:00 2001 From: David Nielsen Date: Sun, 5 Jul 2020 06:02:45 -0400 Subject: [PATCH] Fix braviatv authentication refresh (#37482) - Bumps bravia-tv lib to 1.0.6 which fixes is_connected() to actually return True only when API is connected, instead of just returning whether or not cookies are cached (regardless if they actually worked). - Wrap is_connected() because it now performs io. - Remove unnecessary logic to refresh cookies. Now that is_connected() works, the bravia instance only needs to be reconnected when is_connected is False and TV is not off. --- .../components/braviatv/config_flow.py | 6 ++++-- .../components/braviatv/manifest.json | 2 +- .../components/braviatv/media_player.py | 18 ++++++++---------- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/homeassistant/components/braviatv/config_flow.py b/homeassistant/components/braviatv/config_flow.py index d7db38c5c2a..d8831dd1494 100644 --- a/homeassistant/components/braviatv/config_flow.py +++ b/homeassistant/components/braviatv/config_flow.py @@ -55,7 +55,8 @@ class BraviaTVConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): self.braviarc.connect, pin, CLIENTID_PREFIX, NICKNAME ) - if not self.braviarc.is_connected(): + connected = await self.hass.async_add_executor_job(self.braviarc.is_connected) + if not connected: raise CannotConnect() system_info = await self.hass.async_add_executor_job( @@ -161,7 +162,8 @@ class BraviaTVOptionsFlowHandler(config_entries.OptionsFlow): async def async_step_init(self, user_input=None): """Manage the options.""" self.braviarc = self.hass.data[DOMAIN][self.config_entry.entry_id][BRAVIARC] - if not self.braviarc.is_connected(): + connected = await self.hass.async_add_executor_job(self.braviarc.is_connected) + if not connected: await self.hass.async_add_executor_job( self.braviarc.connect, self.pin, CLIENTID_PREFIX, NICKNAME ) diff --git a/homeassistant/components/braviatv/manifest.json b/homeassistant/components/braviatv/manifest.json index c0355b3ac59..079da14ca87 100644 --- a/homeassistant/components/braviatv/manifest.json +++ b/homeassistant/components/braviatv/manifest.json @@ -2,7 +2,7 @@ "domain": "braviatv", "name": "Sony Bravia TV", "documentation": "https://www.home-assistant.io/integrations/braviatv", - "requirements": ["bravia-tv==1.0.5"], + "requirements": ["bravia-tv==1.0.6"], "codeowners": ["@bieniu"], "config_flow": true } diff --git a/homeassistant/components/braviatv/media_player.py b/homeassistant/components/braviatv/media_player.py index f6c023481c0..32a051f4e98 100644 --- a/homeassistant/components/braviatv/media_player.py +++ b/homeassistant/components/braviatv/media_player.py @@ -148,33 +148,31 @@ class BraviaTVDevice(MediaPlayerEntity): self._device_info = device_info self._ignored_sources = ignored_sources self._state_lock = asyncio.Lock() - self._need_refresh = True async def async_update(self): """Update TV info.""" if self._state_lock.locked(): return - if self._state == STATE_OFF: - self._need_refresh = True - power_status = await self.hass.async_add_executor_job( self._braviarc.get_power_status ) - if power_status == "active": - if self._need_refresh: + + if power_status != "off": + connected = await self.hass.async_add_executor_job( + self._braviarc.is_connected + ) + if not connected: try: connected = await self.hass.async_add_executor_job( self._braviarc.connect, self._pin, CLIENTID_PREFIX, NICKNAME ) except NoIPControl: _LOGGER.error("IP Control is disabled in the TV settings") - self._need_refresh = False - else: - connected = self._braviarc.is_connected() if not connected: - return + power_status = "off" + if power_status == "active": self._state = STATE_ON if ( await self._async_refresh_volume() diff --git a/requirements_all.txt b/requirements_all.txt index b459258128b..9cbcd3a3ffb 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -375,7 +375,7 @@ bomradarloop==0.1.4 boto3==1.9.252 # homeassistant.components.braviatv -bravia-tv==1.0.5 +bravia-tv==1.0.6 # homeassistant.components.broadlink broadlink==0.14.0 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index a82aa57e196..c4d3c067c7c 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -177,7 +177,7 @@ blinkpy==0.15.0 bomradarloop==0.1.4 # homeassistant.components.braviatv -bravia-tv==1.0.5 +bravia-tv==1.0.6 # homeassistant.components.broadlink broadlink==0.14.0