diff --git a/ChangeLog b/ChangeLog index 5ac296a..ec62ae5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2012-01-21 Thomas Vander Stichele + + * morituri/common/musicbrainzngs.py: + Get the artist credit for a track/album; Fixes Gorky - Gorky. + 2012-01-21 Thomas Vander Stichele * morituri/common/checksum.py: diff --git a/morituri/common/musicbrainzngs.py b/morituri/common/musicbrainzngs.py index e596548..783ce06 100644 --- a/morituri/common/musicbrainzngs.py +++ b/morituri/common/musicbrainzngs.py @@ -105,7 +105,11 @@ def _getMetadata(release, discid): log.warning('musicbrainzngs', 'artist-credit more than 1: %r', release['artist-credit']) - artist = release['artist-credit'][0]['artist'] + credit = release['artist-credit'] + + artist = credit[0]['artist'] + albumArtistName = credit[0].get( + 'name', credit[0]['artist'].get('name', None)) # FIXME: is there a better way to check for VA metadata.various = False @@ -114,7 +118,7 @@ def _getMetadata(release, discid): isSingleArtist = not metadata.various # getUniqueName gets disambiguating names like Muse (UK rock band) - metadata.artist = artist['name'] + metadata.artist = albumArtistName metadata.sortName = artist['sort-name'] # FIXME: is format str ? if not release.has_key('date'): @@ -146,20 +150,25 @@ def _getMetadata(release, discid): metadata.title = title for t in medium['track-list']: track = TrackMetadata() + if len(t['recording']['artist-credit']) > 1: + # FIXME: do something sensible for multiple artists + log.warning('musicbrainzngs', 'artist-credit more than 1: %r', + t['recording']['artist-credit']) - if isSingleArtist or not t['recording'].has_key('artist-credit'): + + credit = t['recording']['artist-credit'] + trackArtistName = credit[0].get( + 'name', credit[0]['artist'].get('name', None)) + + if not artist: track.artist = metadata.artist track.sortName = metadata.sortName track.mbidArtist = metadata.mbidArtist else: # various artists discs can have tracks with no artist - if len(t['recording']['artist-credit']) > 1: - log.warning('musicbrainzngs', 'artist-credit more than 1: %r', - t['recording']['artist-credit']) - artist = t['recording']['artist-credit'][0]['artist'] - track.artist = artist and artist['name'] or metadata.artist.name - track.sortName = artist and artist['sort-name'] or metadata.artist.sortName - track.mbidArtist = artist and artist['id'] or metadata.artist.mbid + track.artist = trackArtistName + track.sortName = artist['sort-name'] + track.mbidArtist = artist['id'] track.title = t['recording']['title'] track.mbid = t['recording']['id']