diff --git a/homeassistant/components/forked_daapd/__init__.py b/homeassistant/components/forked_daapd/__init__.py index 16fd96ee3652b95fc21ea2672ad3f376c5d65678..844a6a3eff940cae489fcc112f094b20005a6429 100644 --- a/homeassistant/components/forked_daapd/__init__.py +++ b/homeassistant/components/forked_daapd/__init__.py @@ -2,18 +2,16 @@ from pyforked_daapd import ForkedDaapdAPI -from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_PORT, Platform from homeassistant.core import HomeAssistant from homeassistant.helpers.aiohttp_client import async_get_clientsession -from .const import DOMAIN, HASS_DATA_UPDATER_KEY -from .coordinator import ForkedDaapdUpdater +from .coordinator import ForkedDaapdConfigEntry, ForkedDaapdUpdater PLATFORMS = [Platform.MEDIA_PLAYER] -async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: +async def async_setup_entry(hass: HomeAssistant, entry: ForkedDaapdConfigEntry) -> bool: """Set up forked-daapd from a config entry by forwarding to platform.""" host: str = entry.data[CONF_HOST] port: int = entry.data[CONF_PORT] @@ -22,24 +20,17 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async_get_clientsession(hass), host, port, password ) forked_daapd_updater = ForkedDaapdUpdater(hass, forked_daapd_api, entry.entry_id) - if not hass.data.get(DOMAIN): - hass.data[DOMAIN] = {entry.entry_id: {}} - hass.data.setdefault(DOMAIN, {}).setdefault(entry.entry_id, {})[ - HASS_DATA_UPDATER_KEY - ] = forked_daapd_updater + entry.runtime_data = forked_daapd_updater await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) return True -async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: +async def async_unload_entry( + hass: HomeAssistant, entry: ForkedDaapdConfigEntry +) -> bool: """Remove forked-daapd component.""" status = await hass.config_entries.async_unload_platforms(entry, PLATFORMS) - if status and hass.data.get(DOMAIN) and hass.data[DOMAIN].get(entry.entry_id): - if websocket_handler := hass.data[DOMAIN][entry.entry_id][ - HASS_DATA_UPDATER_KEY - ].websocket_handler: + if status: + if websocket_handler := entry.runtime_data.websocket_handler: websocket_handler.cancel() - del hass.data[DOMAIN][entry.entry_id] - if not hass.data[DOMAIN]: - del hass.data[DOMAIN] return status diff --git a/homeassistant/components/forked_daapd/config_flow.py b/homeassistant/components/forked_daapd/config_flow.py index b2b2d498f60b5ebb9942c8d9f67d228ad89fe57f..890976c75037fe2ade5f7ed4e7c5d7b5aaa140db 100644 --- a/homeassistant/components/forked_daapd/config_flow.py +++ b/homeassistant/components/forked_daapd/config_flow.py @@ -7,12 +7,7 @@ from typing import Any from pyforked_daapd import ForkedDaapdAPI import voluptuous as vol -from homeassistant.config_entries import ( - ConfigEntry, - ConfigFlow, - ConfigFlowResult, - OptionsFlow, -) +from homeassistant.config_entries import ConfigFlow, ConfigFlowResult, OptionsFlow from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PASSWORD, CONF_PORT from homeassistant.core import callback from homeassistant.helpers.aiohttp_client import async_get_clientsession @@ -28,6 +23,7 @@ from .const import ( DEFAULT_TTS_VOLUME, DOMAIN, ) +from .coordinator import ForkedDaapdConfigEntry _LOGGER = logging.getLogger(__name__) @@ -115,7 +111,7 @@ class ForkedDaapdFlowHandler(ConfigFlow, domain=DOMAIN): @staticmethod @callback def async_get_options_flow( - config_entry: ConfigEntry, + config_entry: ForkedDaapdConfigEntry, ) -> ForkedDaapdOptionsFlowHandler: """Return options flow handler.""" return ForkedDaapdOptionsFlowHandler() diff --git a/homeassistant/components/forked_daapd/const.py b/homeassistant/components/forked_daapd/const.py index dd7ed1bdf167be6d173993f0943294d2ea3ee27f..effd4c9454cca95d482f0ceeab7a5e8f0e739dce 100644 --- a/homeassistant/components/forked_daapd/const.py +++ b/homeassistant/components/forked_daapd/const.py @@ -30,9 +30,8 @@ DEFAULT_SERVER_NAME = "My Server" DEFAULT_TTS_PAUSE_TIME = 1.2 DEFAULT_TTS_VOLUME = 0.8 DEFAULT_UNMUTE_VOLUME = 0.6 -DOMAIN = "forked_daapd" # key for hass.data +DOMAIN = "forked_daapd" FD_NAME = "OwnTone" -HASS_DATA_UPDATER_KEY = "UPDATER" KNOWN_PIPES = {"librespot-java"} PIPE_FUNCTION_MAP = { "librespot-java": { diff --git a/homeassistant/components/forked_daapd/coordinator.py b/homeassistant/components/forked_daapd/coordinator.py index 246ad1caa7d583244cb57bd8734ad72aac8ca98e..0ba339be505e092a57520ba0611fc09cf41828c9 100644 --- a/homeassistant/components/forked_daapd/coordinator.py +++ b/homeassistant/components/forked_daapd/coordinator.py @@ -9,6 +9,7 @@ from typing import Any from pyforked_daapd import ForkedDaapdAPI +from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.exceptions import PlatformNotReady from homeassistant.helpers.dispatcher import async_dispatcher_send @@ -22,6 +23,8 @@ from .const import ( SIGNAL_UPDATE_QUEUE, ) +type ForkedDaapdConfigEntry = ConfigEntry[ForkedDaapdUpdater] + _LOGGER = logging.getLogger(__name__) WS_NOTIFY_EVENT_TYPES = ["player", "outputs", "volume", "options", "queue", "database"] diff --git a/homeassistant/components/forked_daapd/media_player.py b/homeassistant/components/forked_daapd/media_player.py index 90a04dbc17700297a1c6f4f93674c9745da17839..fd5390195a638dd50ace5b4dfa66ec8d1f95fc8a 100644 --- a/homeassistant/components/forked_daapd/media_player.py +++ b/homeassistant/components/forked_daapd/media_player.py @@ -27,7 +27,6 @@ from homeassistant.components.spotify import ( resolve_spotify_media_type, spotify_uri_from_media_browser_url, ) -from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_HOST from homeassistant.core import HomeAssistant, callback from homeassistant.helpers.aiohttp_client import async_get_clientsession @@ -54,9 +53,7 @@ from .const import ( DEFAULT_TTS_PAUSE_TIME, DEFAULT_TTS_VOLUME, DEFAULT_UNMUTE_VOLUME, - DOMAIN, FD_NAME, - HASS_DATA_UPDATER_KEY, KNOWN_PIPES, PIPE_FUNCTION_MAP, SIGNAL_ADD_ZONES, @@ -73,20 +70,18 @@ from .const import ( SUPPORTED_FEATURES_ZONE, TTS_TIMEOUT, ) -from .coordinator import ForkedDaapdUpdater +from .coordinator import ForkedDaapdConfigEntry _LOGGER = logging.getLogger(__name__) async def async_setup_entry( hass: HomeAssistant, - config_entry: ConfigEntry, + config_entry: ForkedDaapdConfigEntry, async_add_entities: AddConfigEntryEntitiesCallback, ) -> None: """Set up forked-daapd from a config entry.""" - forked_daapd_updater: ForkedDaapdUpdater = hass.data[DOMAIN][config_entry.entry_id][ - HASS_DATA_UPDATER_KEY - ] + forked_daapd_updater = config_entry.runtime_data host: str = config_entry.data[CONF_HOST] forked_daapd_api = forked_daapd_updater.api @@ -115,7 +110,7 @@ async def async_setup_entry( await forked_daapd_updater.async_init() -async def update_listener(hass: HomeAssistant, entry: ConfigEntry) -> None: +async def update_listener(hass: HomeAssistant, entry: ForkedDaapdConfigEntry) -> None: """Handle options update.""" async_dispatcher_send( hass, SIGNAL_CONFIG_OPTIONS_UPDATE.format(entry.entry_id), entry.options