Fix errors while updating existing items (#264)
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Sat, 23 Apr 2022 23:53:47 +0000 (01:53 +0200)
committerGitHub <noreply@github.com>
Sat, 23 Apr 2022 23:53:47 +0000 (01:53 +0200)
* fix errors when existing records are updated

* fix typo

* fix keyerror in tunein provider

music_assistant/controllers/music/albums.py
music_assistant/controllers/music/artists.py
music_assistant/controllers/music/radio.py
music_assistant/controllers/music/tracks.py
music_assistant/providers/tunein.py

index 06363c1e69b95e009a36a73bf48fa4be58da8ceb..8b865a2f1ad6530a671c4a1027ff36c70d55fdfe 100644 (file)
@@ -178,7 +178,7 @@ class AlbumsController(MediaControllerBase[Album]):
                 or cur_item.artist
             )
 
-        if cur_item.album_type == AlbumType.UNKNOWN:
+        if album.album_type != AlbumType.UNKNOWN:
             album_type = album.album_type
         else:
             album_type = cur_item.album_type
@@ -187,9 +187,13 @@ class AlbumsController(MediaControllerBase[Album]):
             self.db_table,
             {"item_id": item_id},
             {
-                **album.to_db_row(),
-                "artist": json_serializer(album_artist),
+                "name": album.name if overwrite else cur_item.name,
+                "sort_name": album.sort_name if overwrite else cur_item.sort_name,
+                "version": album.version if overwrite else cur_item.version,
+                "year": album.year or cur_item.year,
+                "upc": album.upc or cur_item.upc,
                 "album_type": album_type.value,
+                "artist": json_serializer(album_artist),
                 "metadata": json_serializer(metadata),
                 "provider_ids": json_serializer(provider_ids),
             },
@@ -260,7 +264,7 @@ class AlbumsController(MediaControllerBase[Album]):
                         prov_artist = await self.mass.music.artists.get_provider_item(
                             prov_album.artist.item_id, prov_album.artist.provider
                         )
-                        await self.mass.music.artists.update_db_artist(
+                        await self.mass.music.artists.update_db_item(
                             db_album.artist.item_id, prov_artist
                         )
 
index 6231a56ca0db59843e8521a683661e551d4e4185..5df58d2483fea8bfa0337e996ca761b8317e5eed 100644 (file)
@@ -185,7 +185,9 @@ class ArtistsController(MediaControllerBase[Artist]):
             self.db_table,
             {"item_id": item_id},
             {
-                **artist.to_db_row(),
+                "name": artist.name if overwrite else cur_item.name,
+                "sort_name": artist.sort_name if overwrite else cur_item.sort_name,
+                "musicbrainz_id": artist.musicbrainz_id or cur_item.musicbrainz_id,
                 "metadata": json_serializer(metadata),
                 "provider_ids": json_serializer(provider_ids),
             },
index ac1bd7f9b9f49506a62f015938afd9cc0ec0e1bf..a1aebf9605642f5bcb6e621c84a13013eee81451 100644 (file)
@@ -84,7 +84,6 @@ class RadioController(MediaControllerBase[Radio]):
             self.db_table,
             match,
             {
-                **radio.to_db_row(),
                 "name": radio.name,
                 "sort_name": radio.sort_name,
                 "metadata": json_serializer(metadata),
index 06b8fa317072bbea98253fe1833ab9e03096c208..cb859c8dc208247c813d879568e9aa724d02ba05 100644 (file)
@@ -187,9 +187,11 @@ class TracksController(MediaControllerBase[Track]):
         if overwrite:
             metadata = track.metadata
             provider_ids = track.provider_ids
+            track_artists = track.artists
         else:
             metadata = merge_dict(cur_item.metadata, track.metadata)
             provider_ids = {*cur_item.provider_ids, *track.provider_ids}
+            track_artists = await self._get_track_artists(track, cur_item.artists)
 
         # we store a mapping to artists on the track for easier access/listings
         track_artists = await self._get_track_artists(track, cur_item.artists)
@@ -197,12 +199,14 @@ class TracksController(MediaControllerBase[Track]):
             self.db_table,
             {"item_id": item_id},
             {
-                **track.to_db_row(),
+                "name": track.name if overwrite else cur_item.name,
+                "sort_name": track.sort_name if overwrite else cur_item.sort_name,
+                "version": track.version if overwrite else cur_item.version,
+                "duration": track.duration if overwrite else cur_item.duration,
                 "artists": json_serializer(track_artists),
                 "metadata": json_serializer(metadata),
                 "provider_ids": json_serializer(provider_ids),
                 "isrc": track.isrc or cur_item.isrc,
-                "duration": track.duration or cur_item.duration,
             },
         )
         await self.mass.music.set_provider_mappings(
index 013148d528974da81df4c3a0c293c42ac2228700..ac97e00fd1b2bb0f26274a00e7851d4ba9b421e6 100644 (file)
@@ -55,7 +55,7 @@ class TuneInProvider(MusicProvider):
             return [
                 await self._parse_radio(item)
                 for item in result["body"]
-                if item["type"] == "audio"
+                if item.get("type", "") == "audio"
             ]
         return []