Store runtime data inside the config entry in Radio Browser (#116821)

This commit is contained in:
Michael 2024-05-06 17:54:44 +02:00 committed by GitHub
parent 1cea22b8ba
commit ead9c4af38
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 10 additions and 15 deletions

View File

@ -11,10 +11,12 @@ from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.exceptions import ConfigEntryNotReady
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
from .const import DOMAIN RadioBrowserConfigEntry = ConfigEntry[RadioBrowser]
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_setup_entry(
hass: HomeAssistant, entry: RadioBrowserConfigEntry
) -> bool:
"""Set up Radio Browser from a config entry. """Set up Radio Browser from a config entry.
This integration doesn't set up any entities, as it provides a media source This integration doesn't set up any entities, as it provides a media source
@ -28,11 +30,10 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
except (DNSError, RadioBrowserError) as err: except (DNSError, RadioBrowserError) as err:
raise ConfigEntryNotReady("Could not connect to Radio Browser API") from err raise ConfigEntryNotReady("Could not connect to Radio Browser API") from err
hass.data[DOMAIN] = radios entry.runtime_data = radios
return True return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Unload a config entry.""" """Unload a config entry."""
del hass.data[DOMAIN]
return True return True

View File

@ -6,7 +6,7 @@ import mimetypes
from radios import FilterBy, Order, RadioBrowser, Station from radios import FilterBy, Order, RadioBrowser, Station
from homeassistant.components.media_player import BrowseError, MediaClass, MediaType from homeassistant.components.media_player import MediaClass, MediaType
from homeassistant.components.media_source.error import Unresolvable from homeassistant.components.media_source.error import Unresolvable
from homeassistant.components.media_source.models import ( from homeassistant.components.media_source.models import (
BrowseMediaSource, BrowseMediaSource,
@ -14,9 +14,9 @@ from homeassistant.components.media_source.models import (
MediaSourceItem, MediaSourceItem,
PlayMedia, PlayMedia,
) )
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant, callback from homeassistant.core import HomeAssistant, callback
from . import RadioBrowserConfigEntry
from .const import DOMAIN from .const import DOMAIN
CODEC_TO_MIMETYPE = { CODEC_TO_MIMETYPE = {
@ -40,24 +40,21 @@ class RadioMediaSource(MediaSource):
name = "Radio Browser" name = "Radio Browser"
def __init__(self, hass: HomeAssistant, entry: ConfigEntry) -> None: def __init__(self, hass: HomeAssistant, entry: RadioBrowserConfigEntry) -> None:
"""Initialize RadioMediaSource.""" """Initialize RadioMediaSource."""
super().__init__(DOMAIN) super().__init__(DOMAIN)
self.hass = hass self.hass = hass
self.entry = entry self.entry = entry
@property @property
def radios(self) -> RadioBrowser | None: def radios(self) -> RadioBrowser:
"""Return the radio browser.""" """Return the radio browser."""
return self.hass.data.get(DOMAIN) return self.entry.runtime_data
async def async_resolve_media(self, item: MediaSourceItem) -> PlayMedia: async def async_resolve_media(self, item: MediaSourceItem) -> PlayMedia:
"""Resolve selected Radio station to a streaming URL.""" """Resolve selected Radio station to a streaming URL."""
radios = self.radios radios = self.radios
if radios is None:
raise Unresolvable("Radio Browser not initialized")
station = await radios.station(uuid=item.identifier) station = await radios.station(uuid=item.identifier)
if not station: if not station:
raise Unresolvable("Radio station is no longer available") raise Unresolvable("Radio station is no longer available")
@ -77,9 +74,6 @@ class RadioMediaSource(MediaSource):
"""Return media.""" """Return media."""
radios = self.radios radios = self.radios
if radios is None:
raise BrowseError("Radio Browser not initialized")
return BrowseMediaSource( return BrowseMediaSource(
domain=DOMAIN, domain=DOMAIN,
identifier=None, identifier=None,