from __future__ import annotations
import asyncio
+from typing import TYPE_CHECKING
from music_assistant_models.enums import MediaType
from music_assistant_models.media_items import Radio, Track
from .base import MediaControllerBase
+if TYPE_CHECKING:
+ from music_assistant import MusicAssistant
+
class RadioController(MediaControllerBase[Radio]):
"""Controller managing MediaItems of type Radio."""
media_type = MediaType.RADIO
item_cls = Radio
- def __init__(self, *args, **kwargs) -> None:
+ def __init__(self, mass: MusicAssistant) -> None:
"""Initialize class."""
- super().__init__(*args, **kwargs)
+ super().__init__(mass)
# register (extra) api handlers
api_base = self.api_base
self.mass.register_api_command(f"music/{api_base}/radio_versions", self.versions)
all_versions.pop(prov_version.item_id, None)
# return the aggregated result
- return all_versions.values()
+ return list(all_versions.values())
- async def _add_library_item(self, item: Radio) -> int:
+ async def _add_library_item(self, item: Radio, overwrite_existing: bool = False) -> int:
"""Add a new item record to the database."""
+ assert self.mass.music.database is not None # For type checking
db_id = await self.mass.music.database.insert(
self.db_table,
{
"metadata": serialize_to_json(item.metadata),
"external_ids": serialize_to_json(item.external_ids),
"search_name": create_safe_string(item.name, True, True),
- "search_sort_name": create_safe_string(item.sort_name, True, True),
+ "search_sort_name": create_safe_string(
+ item.sort_name if item.sort_name is not None else "", True, True
+ ),
},
)
# update/set provider_mappings table
match = {"item_id": db_id}
name = update.name if overwrite else cur_item.name
sort_name = update.sort_name if overwrite else cur_item.sort_name or update.sort_name
+ assert self.mass.music.database is not None # For type checking
await self.mass.music.database.update(
self.db_table,
match,
update.external_ids if overwrite else cur_item.external_ids
),
"search_name": create_safe_string(name, True, True),
- "search_sort_name": create_safe_string(sort_name, True, True),
+ "search_sort_name": create_safe_string(sort_name or "", True, True),
},
)
# update/set provider_mappings table
exclude = [
'^music_assistant/controllers/cache.py$',
'^music_assistant/controllers/config.py$',
- '^music_assistant/controllers/media/.*$',
+ '^music_assistant/controllers/media/albums.py*$',
+ '^music_assistant/controllers/media/artists.py*$',
+ '^music_assistant/controllers/media/audiobooks.py*$',
+ '^music_assistant/controllers/media/base.py*$',
+ '^music_assistant/controllers/media/playlists.py*$',
+ '^music_assistant/controllers/media/podcasts.py*$',
+ '^music_assistant/controllers/media/tracks.py*$',
'^music_assistant/controllers/music.py$',
'^music_assistant/controllers/player_queues.py$',
'^music_assistant/controllers/streams.py$',