From 79787cfd9785594a146cd0f29e54dfd86973cc3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0ar=C5=ABnas=20Nejus?= Date: Sat, 14 Sep 2024 04:11:52 +0100 Subject: [PATCH] tagging: fix list albumartists field --- beets/autotag/__init__.py | 23 +++++++++++------------ beets/importer/tasks.py | 19 +++++++++++-------- test/plugins/test_edit.py | 9 ++------- 3 files changed, 24 insertions(+), 27 deletions(-) diff --git a/beets/autotag/__init__.py b/beets/autotag/__init__.py index 216f7efee..5484edebe 100644 --- a/beets/autotag/__init__.py +++ b/beets/autotag/__init__.py @@ -307,21 +307,20 @@ def apply_metadata( # MusicBrainz IDs. item.mb_trackid = track_info.track_id - item.mb_releasetrackid = track_info.release_track_id - item.mb_albumid = album_info.album_id - if track_info.artist_id: - item.mb_artistid = track_info.artist_id - else: - item.mb_artistid = album_info.artist_id + item.mb_releasetrackid = track_info.release_track_id or item.mb_trackid - if track_info.artists_ids: - item.mb_artistids = track_info.artists_ids - else: - item.mb_artistids = album_info.artists_ids + item.mb_albumid = album_info.album_id + item.mb_releasegroupid = album_info.releasegroup_id item.mb_albumartistid = album_info.artist_id - item.mb_albumartistids = album_info.artists_ids - item.mb_releasegroupid = album_info.releasegroup_id + item.mb_albumartistids = album_info.artists_ids or ( + [ai] if (ai := item.mb_albumartistid) else [] + ) + + item.mb_artistid = track_info.artist_id or item.mb_albumartistid + item.mb_artistids = track_info.artists_ids or ( + [iai] if (iai := item.mb_artistid) else [] + ) # Compilation flag. item.comp = album_info.va diff --git a/beets/importer/tasks.py b/beets/importer/tasks.py index e56157ed0..f0ae710ef 100644 --- a/beets/importer/tasks.py +++ b/beets/importer/tasks.py @@ -430,14 +430,17 @@ class ImportTask(BaseImportTask): elif self.choice_flag in (Action.APPLY, Action.RETAG): # Applying autotagged metadata. Just get AA from the first # item. - if not self.items[0].albumartist: - changes["albumartist"] = self.items[0].artist - if not self.items[0].albumartists: - changes["albumartists"] = self.items[0].artists - if not self.items[0].mb_albumartistid: - changes["mb_albumartistid"] = self.items[0].mb_artistid - if not self.items[0].mb_albumartistids: - changes["mb_albumartistids"] = self.items[0].mb_artistids + first = self.items[0] + if not first.albumartist: + changes["albumartist"] = first.artist + if not first.albumartists: + changes["albumartists"] = first.artists or [first.artist] + if not first.mb_albumartistid: + changes["mb_albumartistid"] = first.mb_artistid + if not first.mb_albumartistids: + changes["mb_albumartistids"] = first.mb_artistids or [ + first.mb_artistid + ] # Apply new metadata. for item in self.items: diff --git a/test/plugins/test_edit.py b/test/plugins/test_edit.py index 06c7cad74..6bdcafea2 100644 --- a/test/plugins/test_edit.py +++ b/test/plugins/test_edit.py @@ -353,13 +353,8 @@ class EditDuringImporterNonSingletonTest(EditDuringImporterTestCase): self.assertItemFieldsModified( self.lib.items(), self.items_orig, - ["title"], - [ - *self.IGNORED, - "albumartist", - "mb_albumartistid", - "mb_albumartistids", - ], + ["title", "albumartist", "albumartists"], + [*self.IGNORED, "mb_albumartistid", "mb_albumartistids"], ) assert all("Edited Track" in i.title for i in self.lib.items())