From bdbc3fef9a0b8fe10af8ed39cd05adad52640609 Mon Sep 17 00:00:00 2001 From: Marvin Schenkel Date: Fri, 10 May 2024 20:09:40 +0200 Subject: [PATCH] Fix phantom artists in library (#1290) * Fix phantom artists in library * Fix phantom artists in library * Fix phantom artists in library --- music_assistant/common/models/media_items.py | 18 ---------------- .../server/controllers/media/artists.py | 21 ++++++++++++++++++- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/music_assistant/common/models/media_items.py b/music_assistant/common/models/media_items.py index 62f6d744..83af5cfa 100644 --- a/music_assistant/common/models/media_items.py +++ b/music_assistant/common/models/media_items.py @@ -348,24 +348,6 @@ class MediaItem(_MediaItemBase): return None return next((x for x in self.metadata.images if x.type == ImageType.THUMB), None) - @classmethod - def from_item_mapping(cls: type, item: ItemMapping) -> Self: - """Instantiate MediaItem from ItemMapping.""" - # NOTE: This will not work for albums and tracks! - return cls.from_dict( - { - **item.to_dict(), - "provider_mappings": [ - { - "item_id": item.item_id, - "provider_domain": item.provider, - "provider_instance": item.provider, - "available": item.available, - } - ], - } - ) - @dataclass(kw_only=True) class ItemMapping(_MediaItemBase): diff --git a/music_assistant/server/controllers/media/artists.py b/music_assistant/server/controllers/media/artists.py index 1fcfebe7..20ae7a08 100644 --- a/music_assistant/server/controllers/media/artists.py +++ b/music_assistant/server/controllers/media/artists.py @@ -294,7 +294,7 @@ class ArtistsController(MediaControllerBase[Artist]): async def _add_library_item(self, item: Artist | ItemMapping) -> int: """Add a new item record to the database.""" if isinstance(item, ItemMapping): - item = Artist.from_item_mapping(item) + item = self._artist_from_item_mapping(item) # enforce various artists name + id if compare_strings(item.name, VARIOUS_ARTISTS_NAME): item.mbid = VARIOUS_ARTISTS_ID_MBID @@ -508,3 +508,22 @@ class ArtistsController(MediaControllerBase[Artist]): await self._update_library_item(db_artist.item_id, prov_artist) return True return False + + def _artist_from_item_mapping(self, item: ItemMapping) -> Artist: + domain, instance_id = None, None + if prov := self.mass.get_provider(item.provider): + domain = prov.domain + instance_id = prov.instance_id + return Artist.from_dict( + { + **item.to_dict(), + "provider_mappings": [ + { + "item_id": item.item_id, + "provider_domain": domain, + "provider_instance": instance_id, + "available": item.available, + } + ], + } + ) -- 2.34.1