From 017930dd9918446ce7fd755e74bcbfa3e66dce60 Mon Sep 17 00:00:00 2001 From: asardaes Date: Sun, 20 Jul 2025 10:44:40 +0200 Subject: [PATCH] Use pseudo-release's track titles for its recordings --- beetsplug/musicbrainz.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/beetsplug/musicbrainz.py b/beetsplug/musicbrainz.py index 8e259e94b..75cc063b8 100644 --- a/beetsplug/musicbrainz.py +++ b/beetsplug/musicbrainz.py @@ -871,11 +871,34 @@ class MusicBrainzPlugin(MetadataSourcePlugin): # should be None unless we're dealing with a pseudo release if actual_res is not None: - actual_release = self.album_info(actual_res["release"]) + actual_release = self._get_actual_release(res, actual_res) return _merge_pseudo_and_actual_album(release, actual_release) else: return release + def _get_actual_release( + self, + res: JSONDict, + actual_res: JSONDict, + ) -> beets.autotag.hooks.AlbumInfo: + medium_list = res["release"]["medium-list"] + for medium in medium_list: + for track in medium.get("track-list", []): + if "recording" not in track: + continue + + recording_overrides = { + k: v + for k, v in track.items() + if (k != "id" and k != "recording") + } + track["recording"].update(recording_overrides) + + actual_res = actual_res["release"] + actual_res["medium-list"] = medium_list + actual_release = self.album_info(actual_res) + return actual_release + def track_for_id( self, track_id: str ) -> beets.autotag.hooks.TrackInfo | None: