From 58bff0a183401e3cddbf4583756037333a0e91a5 Mon Sep 17 00:00:00 2001 From: Maciej Bieniek Date: Wed, 29 Apr 2020 16:27:45 +0200 Subject: [PATCH] Reload braviatv entry after options update (#34576) * Reload entry after options update * Undo update listener when unloading --- homeassistant/components/braviatv/__init__.py | 17 +++++++++++++++-- .../components/braviatv/config_flow.py | 3 ++- homeassistant/components/braviatv/const.py | 2 ++ .../components/braviatv/media_player.py | 3 ++- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/braviatv/__init__.py b/homeassistant/components/braviatv/__init__.py index 9c55ef01cee..46fd8675358 100644 --- a/homeassistant/components/braviatv/__init__.py +++ b/homeassistant/components/braviatv/__init__.py @@ -5,7 +5,7 @@ from bravia_tv import BraviaRC from homeassistant.const import CONF_HOST, CONF_MAC -from .const import DOMAIN +from .const import BRAVIARC, DOMAIN, UNDO_UPDATE_LISTENER PLATFORMS = ["media_player"] @@ -20,8 +20,13 @@ async def async_setup_entry(hass, config_entry): host = config_entry.data[CONF_HOST] mac = config_entry.data[CONF_MAC] + undo_listener = config_entry.add_update_listener(update_listener) + hass.data.setdefault(DOMAIN, {}) - hass.data[DOMAIN][config_entry.entry_id] = BraviaRC(host, mac) + hass.data[DOMAIN][config_entry.entry_id] = { + BRAVIARC: BraviaRC(host, mac), + UNDO_UPDATE_LISTENER: undo_listener, + } for component in PLATFORMS: hass.async_create_task( @@ -41,7 +46,15 @@ async def async_unload_entry(hass, config_entry): ] ) ) + + hass.data[DOMAIN][config_entry.entry_id][UNDO_UPDATE_LISTENER]() + if unload_ok: hass.data[DOMAIN].pop(config_entry.entry_id) return unload_ok + + +async def update_listener(hass, config_entry): + """Handle options update.""" + await hass.config_entries.async_reload(config_entry.entry_id) diff --git a/homeassistant/components/braviatv/config_flow.py b/homeassistant/components/braviatv/config_flow.py index be2a91c8429..660e2e83ea1 100644 --- a/homeassistant/components/braviatv/config_flow.py +++ b/homeassistant/components/braviatv/config_flow.py @@ -15,6 +15,7 @@ from .const import ( # pylint:disable=unused-import ATTR_CID, ATTR_MAC, ATTR_MODEL, + BRAVIARC, CLIENTID_PREFIX, CONF_IGNORED_SOURCES, DOMAIN, @@ -152,7 +153,7 @@ 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] + self.braviarc = self.hass.data[DOMAIN][self.config_entry.entry_id][BRAVIARC] if not self.braviarc.is_connected(): await self.hass.async_add_executor_job( self.braviarc.connect, self.pin, CLIENTID_PREFIX, NICKNAME, diff --git a/homeassistant/components/braviatv/const.py b/homeassistant/components/braviatv/const.py index 1fa96e6a98d..a5d7a88d4c3 100644 --- a/homeassistant/components/braviatv/const.py +++ b/homeassistant/components/braviatv/const.py @@ -6,8 +6,10 @@ ATTR_MODEL = "model" CONF_IGNORED_SOURCES = "ignored_sources" +BRAVIARC = "braviarc" BRAVIA_CONFIG_FILE = "bravia.conf" CLIENTID_PREFIX = "HomeAssistant" DEFAULT_NAME = f"{ATTR_MANUFACTURER} Bravia TV" DOMAIN = "braviatv" NICKNAME = "Home Assistant" +UNDO_UPDATE_LISTENER = "undo_update_listener" diff --git a/homeassistant/components/braviatv/media_player.py b/homeassistant/components/braviatv/media_player.py index 49ae466f23c..eb75542460f 100644 --- a/homeassistant/components/braviatv/media_player.py +++ b/homeassistant/components/braviatv/media_player.py @@ -30,6 +30,7 @@ from homeassistant.util.json import load_json from .const import ( ATTR_MANUFACTURER, BRAVIA_CONFIG_FILE, + BRAVIARC, CLIENTID_PREFIX, CONF_IGNORED_SOURCES, DEFAULT_NAME, @@ -103,7 +104,7 @@ async def async_setup_entry(hass, config_entry, async_add_entities): "model": config_entry.title, } - braviarc = hass.data[DOMAIN][config_entry.entry_id] + braviarc = hass.data[DOMAIN][config_entry.entry_id][BRAVIARC] ignored_sources = config_entry.options.get(CONF_IGNORED_SOURCES, [])