From ae571c41eb1c06cc8c73dec9f46e02809c58ea3b Mon Sep 17 00:00:00 2001 From: Maciej Bieniek Date: Thu, 23 Apr 2020 09:18:55 +0200 Subject: [PATCH 1/2] Reload entry after options update --- homeassistant/components/braviatv/__init__.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/homeassistant/components/braviatv/__init__.py b/homeassistant/components/braviatv/__init__.py index 9c55ef01cee5fc..be2336b37eb98d 100644 --- a/homeassistant/components/braviatv/__init__.py +++ b/homeassistant/components/braviatv/__init__.py @@ -23,6 +23,8 @@ async def async_setup_entry(hass, config_entry): hass.data.setdefault(DOMAIN, {}) hass.data[DOMAIN][config_entry.entry_id] = BraviaRC(host, mac) + config_entry.add_update_listener(update_listener) + for component in PLATFORMS: hass.async_create_task( hass.config_entries.async_forward_entry_setup(config_entry, component) @@ -45,3 +47,8 @@ async def async_unload_entry(hass, config_entry): 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) From a60c51ce4cbc8e29ef3786b6534aa5efb71a0a08 Mon Sep 17 00:00:00 2001 From: Maciej Bieniek Date: Wed, 29 Apr 2020 09:33:09 +0200 Subject: [PATCH 2/2] Undo update listener when unloading --- homeassistant/components/braviatv/__init__.py | 14 ++++++++++---- homeassistant/components/braviatv/config_flow.py | 3 ++- homeassistant/components/braviatv/const.py | 2 ++ homeassistant/components/braviatv/media_player.py | 3 ++- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/braviatv/__init__.py b/homeassistant/components/braviatv/__init__.py index be2336b37eb98d..46fd8675358df4 100644 --- a/homeassistant/components/braviatv/__init__.py +++ b/homeassistant/components/braviatv/__init__.py @@ -5,7 +5,7 @@ from homeassistant.const import CONF_HOST, CONF_MAC -from .const import DOMAIN +from .const import BRAVIARC, DOMAIN, UNDO_UPDATE_LISTENER PLATFORMS = ["media_player"] @@ -20,10 +20,13 @@ async def async_setup_entry(hass, config_entry): host = config_entry.data[CONF_HOST] mac = config_entry.data[CONF_MAC] - hass.data.setdefault(DOMAIN, {}) - hass.data[DOMAIN][config_entry.entry_id] = BraviaRC(host, mac) + undo_listener = config_entry.add_update_listener(update_listener) - config_entry.add_update_listener(update_listener) + hass.data.setdefault(DOMAIN, {}) + hass.data[DOMAIN][config_entry.entry_id] = { + BRAVIARC: BraviaRC(host, mac), + UNDO_UPDATE_LISTENER: undo_listener, + } for component in PLATFORMS: hass.async_create_task( @@ -43,6 +46,9 @@ 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) diff --git a/homeassistant/components/braviatv/config_flow.py b/homeassistant/components/braviatv/config_flow.py index be2a91c84295b5..660e2e83ea1f2c 100644 --- a/homeassistant/components/braviatv/config_flow.py +++ b/homeassistant/components/braviatv/config_flow.py @@ -15,6 +15,7 @@ ATTR_CID, ATTR_MAC, ATTR_MODEL, + BRAVIARC, CLIENTID_PREFIX, CONF_IGNORED_SOURCES, DOMAIN, @@ -152,7 +153,7 @@ def __init__(self, config_entry): 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 1fa96e6a98d6a3..a5d7a88d4c3e40 100644 --- a/homeassistant/components/braviatv/const.py +++ b/homeassistant/components/braviatv/const.py @@ -6,8 +6,10 @@ 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 718f99d83575b5..e4b28c0c2abc32 100644 --- a/homeassistant/components/braviatv/media_player.py +++ b/homeassistant/components/braviatv/media_player.py @@ -30,6 +30,7 @@ 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, [])