From 682d80aca64d6ba67acb5172642d5c66788f4df3 Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Thu, 21 Apr 2022 19:42:59 +0200 Subject: [PATCH] allow track data to be updated --- music_assistant/controllers/music/tracks.py | 23 ++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/music_assistant/controllers/music/tracks.py b/music_assistant/controllers/music/tracks.py index 4330e383..736f4dfc 100644 --- a/music_assistant/controllers/music/tracks.py +++ b/music_assistant/controllers/music/tracks.py @@ -179,7 +179,7 @@ class TracksController(MediaControllerBase[Track]): return await self.get_db_item(item_id) async def update_db_track(self, item_id: int, track: Track) -> Track: - """Update Track record in the database.""" + """Update Track record in the database, merging data.""" cur_item = await self.get_db_item(item_id) metadata = merge_dict(cur_item.metadata, track.metadata) provider_ids = merge_list(cur_item.provider_ids, track.provider_ids) @@ -216,6 +216,27 @@ class TracksController(MediaControllerBase[Track]): self.logger.debug("updated %s in database: %s", track.name, item_id) return await self.get_db_item(item_id) + async def edit_db_track(self, item_id: int, track: Track) -> Track: + """Update Track record in the database, overwriting data.""" + cur_item = await self.get_db_item(item_id) + # delete any existing provider mappings + await self.mass.database.delete( + "provider_mappings", + {"item_id": item_id, "media_type": MediaType.TRACK.value}, + ) + # overwrite the entire row with new data + track_artists = await self._get_track_artists(track, cur_item.artists) + await self.mass.database.update( + self.db_table, + {"item_id": item_id}, + { + **track.to_db_row(), + "artists": json_serializer(track_artists), + }, + ) + # use regular update logic for the albumtracks logic etc. + return await self.update_db_track(item_id, track) + async def _get_track_artists( self, track: Track, cur_artists: List[ItemMapping] | None = None ) -> List[ItemMapping]: -- 2.34.1