diff --git a/beetsplug/listenbrainz.py b/beetsplug/listenbrainz.py index f885966fa..fe2e9216f 100644 --- a/beetsplug/listenbrainz.py +++ b/beetsplug/listenbrainz.py @@ -122,24 +122,31 @@ class ListenBrainzPlugin(BeetsPlugin): print(json.dumps(track, indent=4, sort_keys=True)) if mbid_mapping.get("recording_mbid") is None: # search for the track using title and release - resp = musicbrainzngs.search_recordings( - query=track["track_metadata"].get("track_name"), - release=track["track_metadata"].get("release_name"), - artist=track["track_metadata"].get("artist_name"), - ) - print(json.dumps(resp, indent=4, sort_keys=True)) + mbid = self.get_mb_recording_id(track) tracks.append( { "release_name": track["track_metadata"].get("release_name"), "name": track["track_metadata"].get("track_name"), "artist": {"name": track["track_metadata"].get("artist_name")}, - "mbid": mbid_mapping.get("recording_mbid"), + "mbid": mbid, "release_mbid": mbid_mapping.get("release_mbid"), "listened_at": track.get("listened_at"), } ) return tracks + def get_mb_recording_id(self, track): + """Returns the MusicBrainz recording ID for a track.""" + resp = musicbrainzngs.search_recordings( + query=track["track_metadata"].get("track_name"), + release=track["track_metadata"].get("release_name"), + strict=True + ) + if resp.get("recording-count") == "1": + return resp.get("recording-list")[0].get("id") + else: + self._log.debug(f"Invalid Search Error: {resp}") + return None def get_playlists_createdfor(self, username): """Returns a list of playlists created by a user."""