diff --git a/music_assistant/controllers/media/radio.py b/music_assistant/controllers/media/radio.py index 3ceb02ec8..f29783bdf 100644 --- a/music_assistant/controllers/media/radio.py +++ b/music_assistant/controllers/media/radio.py @@ -3,6 +3,7 @@ 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 @@ -13,6 +14,9 @@ from .base import MediaControllerBase +if TYPE_CHECKING: + from music_assistant import MusicAssistant + class RadioController(MediaControllerBase[Radio]): """Controller managing MediaItems of type Radio.""" @@ -21,9 +25,9 @@ class RadioController(MediaControllerBase[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) @@ -52,10 +56,11 @@ async def 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, { @@ -65,7 +70,9 @@ async def _add_library_item(self, item: Radio) -> int: "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 @@ -84,6 +91,7 @@ async def _update_library_item( 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, @@ -96,7 +104,7 @@ async def _update_library_item( 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 diff --git a/pyproject.toml b/pyproject.toml index e5a785fe0..74150cf75 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -132,7 +132,13 @@ enable_error_code = [ 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$',