Skip to content

Commit 757ffaf

Browse files
committed
fix(autotag): only write mb_* fields when data source is MusicBrainz
1 parent 79787cf commit 757ffaf

1 file changed

Lines changed: 43 additions & 19 deletions

File tree

beets/autotag/__init__.py

Lines changed: 43 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ def __getattr__(name: str):
6363
# Global logger.
6464
log = logging.getLogger("beets")
6565

66+
# The data_source value produced by MusicBrainzPlugin.
67+
_MUSICBRAINZ_SOURCE = "MusicBrainz"
68+
6669
# Metadata fields that are already hardcoded, or where the tag name changes.
6770
SPECIAL_FIELDS = {
6871
"album": (
@@ -199,12 +202,18 @@ def apply_item_metadata(item: Item, track_info: TrackInfo):
199202
item.artist_credit = track_info.artist_credit
200203
item.artists_credit = track_info.artists_credit
201204
item.title = track_info.title
202-
item.mb_trackid = track_info.track_id
203-
item.mb_releasetrackid = track_info.release_track_id
204-
if track_info.artist_id:
205-
item.mb_artistid = track_info.artist_id
206-
if track_info.artists_ids:
207-
item.mb_artistids = track_info.artists_ids
205+
if track_info.data_source == _MUSICBRAINZ_SOURCE:
206+
item.mb_trackid = track_info.track_id
207+
item.mb_releasetrackid = track_info.release_track_id
208+
if track_info.artist_id:
209+
item.mb_artistid = track_info.artist_id
210+
if track_info.artists_ids:
211+
item.mb_artistids = track_info.artists_ids
212+
else:
213+
item.mb_trackid = ""
214+
item.mb_releasetrackid = ""
215+
item.mb_artistid = ""
216+
item.mb_artistids = []
208217

209218
_apply_metadata(track_info, item)
210219
correct_list_fields(item)
@@ -305,22 +314,37 @@ def apply_metadata(
305314
item.disc = track_info.medium
306315
item.disctotal = album_info.mediums
307316

308-
# MusicBrainz IDs.
309-
item.mb_trackid = track_info.track_id
310-
item.mb_releasetrackid = track_info.release_track_id or item.mb_trackid
317+
# MusicBrainz IDs: only write when the data source is MusicBrainz,
318+
# to avoid storing service-specific IDs (Spotify, Deezer, etc.) in
319+
# MusicBrainz fields. When the source is not MusicBrainz, clear any
320+
# stale values so retagging does not leave invalid IDs behind.
321+
if album_info.data_source == _MUSICBRAINZ_SOURCE:
322+
item.mb_trackid = track_info.track_id
323+
item.mb_releasetrackid = (
324+
track_info.release_track_id or item.mb_trackid
325+
)
311326

312-
item.mb_albumid = album_info.album_id
313-
item.mb_releasegroupid = album_info.releasegroup_id
327+
item.mb_albumid = album_info.album_id
328+
item.mb_releasegroupid = album_info.releasegroup_id
314329

315-
item.mb_albumartistid = album_info.artist_id
316-
item.mb_albumartistids = album_info.artists_ids or (
317-
[ai] if (ai := item.mb_albumartistid) else []
318-
)
330+
item.mb_albumartistid = album_info.artist_id
331+
item.mb_albumartistids = album_info.artists_ids or (
332+
[ai] if (ai := item.mb_albumartistid) else []
333+
)
319334

320-
item.mb_artistid = track_info.artist_id or item.mb_albumartistid
321-
item.mb_artistids = track_info.artists_ids or (
322-
[iai] if (iai := item.mb_artistid) else []
323-
)
335+
item.mb_artistid = track_info.artist_id or item.mb_albumartistid
336+
item.mb_artistids = track_info.artists_ids or (
337+
[iai] if (iai := item.mb_artistid) else []
338+
)
339+
else:
340+
item.mb_trackid = ""
341+
item.mb_releasetrackid = ""
342+
item.mb_albumid = ""
343+
item.mb_releasegroupid = ""
344+
item.mb_albumartistid = ""
345+
item.mb_albumartistids = []
346+
item.mb_artistid = ""
347+
item.mb_artistids = []
324348

325349
# Compilation flag.
326350
item.comp = album_info.va

0 commit comments

Comments
 (0)