From: Marvin Schenkel Date: Wed, 6 Jul 2022 14:24:38 +0000 (+0200) Subject: Merge branch 'music-assistant:master' into master X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=8152e95884c3eb2dbd8024e56f4ca8e07a311aa0;p=music-assistant-server.git Merge branch 'music-assistant:master' into master --- 8152e95884c3eb2dbd8024e56f4ca8e07a311aa0 diff --cc music_assistant/controllers/music/artists.py index aeac4cd7,2a1fb7b5..9b4ba3b8 --- a/music_assistant/controllers/music/artists.py +++ b/music_assistant/controllers/music/artists.py @@@ -176,34 -176,33 +176,36 @@@ class ArtistsController(MediaController self, item: Artist, overwrite_existing: bool = False ) -> Artist: """Add a new item record to the database.""" - assert item.provider_ids, "Album is missing provider id(s)" - # always try to grab existing item by musicbrainz_id - cur_item = None - if item.musicbrainz_id: - match = {"musicbrainz_id": item.musicbrainz_id} - cur_item = await self.mass.database.get_row(self.db_table, match) - if not cur_item: - # fallback to exact name match - # NOTE: we match an artist by name which could theoretically lead to collisions - # but the chance is so small it is not worth the additional overhead of grabbing - # the musicbrainz id upfront - match = {"sort_name": item.sort_name} - for row in await self.mass.database.get_rows(self.db_table, match): - row_artist = Artist.from_db_row(row) - if row_artist.sort_name == item.sort_name: - # just to be sure ?! - cur_item = row_artist - break - if cur_item: - # update existing - return await self.update_db_item( - cur_item.item_id, item, overwrite=overwrite_existing - ) + assert item.provider_ids, "Artist is missing provider id(s)" + async with self.mass.database.get_db(db) as db: + # always try to grab existing item by musicbrainz_id + cur_item = None + if item.musicbrainz_id: + match = {"musicbrainz_id": item.musicbrainz_id} + cur_item = await self.mass.database.get_row(self.db_table, match, db=db) + if not cur_item: + # fallback to matching + # NOTE: we match an artist by name which could theoretically lead to collisions + # but the chance is so small it is not worth the additional overhead of grabbing + # the musicbrainz id upfront + match = {"sort_name": item.sort_name} + for row in await self.mass.database.get_rows( + self.db_table, match, db=db + ): + row_artist = Artist.from_db_row(row) + if row_artist.sort_name == item.sort_name: + # just to be sure ?! + cur_item = row_artist + break + if cur_item: + # update existing + return await self.update_db_item( + cur_item.item_id, item, overwrite=overwrite_existing, db=db + ) # insert item + if item.in_library and not item.timestamp: + item.timestamp = int(time()) new_item = await self.mass.database.insert(self.db_table, item.to_db_row()) item_id = new_item["item_id"] self.logger.debug("added %s to database", item.name)