Merge pull request #366 from whipper-team/feature/issue-200-add-more-musicbrainz-identifiers
Add Track, Release Group, and Work MBIDs to ripped files
This commit is contained in:
@@ -52,6 +52,8 @@ class TrackMetadata(object):
|
||||
mbid = None
|
||||
sortName = None
|
||||
mbidArtist = None
|
||||
mbidRecording = None
|
||||
mbidWorks = []
|
||||
|
||||
|
||||
class DiscMetadata(object):
|
||||
@@ -75,6 +77,7 @@ class DiscMetadata(object):
|
||||
releaseType = None
|
||||
|
||||
mbid = None
|
||||
mbidReleaseGroup = None
|
||||
mbidArtist = None
|
||||
url = None
|
||||
|
||||
@@ -144,6 +147,19 @@ class _Credit(list):
|
||||
joinString=";")
|
||||
|
||||
|
||||
def _getWorks(recording):
|
||||
"""Get "performance of" works out of a recording."""
|
||||
works = []
|
||||
valid_work_rel_types = [
|
||||
u'a3005666-a872-32c3-ad06-98af558e99b0', # "Performance"
|
||||
]
|
||||
if 'work-relation-list' in recording:
|
||||
for work in recording['work-relation-list']:
|
||||
if work['type-id'] in valid_work_rel_types:
|
||||
works.append(work['work']['id'])
|
||||
return works
|
||||
|
||||
|
||||
def _getMetadata(releaseShort, release, discid, country=None):
|
||||
"""
|
||||
@type release: C{dict}
|
||||
@@ -165,7 +181,7 @@ def _getMetadata(releaseShort, release, discid, country=None):
|
||||
|
||||
discMD = DiscMetadata()
|
||||
|
||||
discMD.releaseType = releaseShort.get('release-group', {}).get('type')
|
||||
discMD.releaseType = release['release-group']['type']
|
||||
discCredit = _Credit(release['artist-credit'])
|
||||
|
||||
# FIXME: is there a better way to check for VA ?
|
||||
@@ -188,6 +204,7 @@ def _getMetadata(releaseShort, release, discid, country=None):
|
||||
discMD.release = release['date']
|
||||
|
||||
discMD.mbid = release['id']
|
||||
discMD.mbidReleaseGroup = release['release-group']['id']
|
||||
discMD.mbidArtist = discCredit.getIds()
|
||||
discMD.url = 'https://musicbrainz.org/release/' + release['id']
|
||||
|
||||
@@ -229,7 +246,9 @@ def _getMetadata(releaseShort, release, discid, country=None):
|
||||
track.mbidArtist = trackCredit.getIds()
|
||||
|
||||
track.title = t['recording']['title']
|
||||
track.mbid = t['recording']['id']
|
||||
track.mbid = t['id']
|
||||
track.mbidRecording = t['recording']['id']
|
||||
track.mbidWorks = _getWorks(t['recording'])
|
||||
|
||||
# FIXME: unit of duration ?
|
||||
track.duration = int(t['recording'].get('length', 0))
|
||||
@@ -304,7 +323,9 @@ def musicbrainz(discid, country=None, record=False):
|
||||
|
||||
res = musicbrainzngs.get_release_by_id(
|
||||
release['id'], includes=["artists", "artist-credits",
|
||||
"recordings", "discids", "labels"])
|
||||
"recordings", "discids", "labels",
|
||||
"recording-level-rels", "work-rels",
|
||||
"release-groups"])
|
||||
_record(record, 'release', release['id'], res)
|
||||
releaseDetail = res['release']
|
||||
formatted = json.dumps(releaseDetail, sort_keys=False, indent=4)
|
||||
|
||||
@@ -386,6 +386,7 @@ class Program:
|
||||
releaseArtist = self.metadata.artist
|
||||
disc = self.metadata.title
|
||||
mbidRelease = self.metadata.mbid
|
||||
mbidReleaseGroup = self.metadata.mbidReleaseGroup
|
||||
mbidReleaseArtist = self.metadata.mbidArtist
|
||||
|
||||
if number > 0:
|
||||
@@ -393,8 +394,10 @@ class Program:
|
||||
track = self.metadata.tracks[number - 1]
|
||||
trackArtist = track.artist
|
||||
title = track.title
|
||||
mbidRecording = track.mbid
|
||||
mbidRecording = track.mbidRecording
|
||||
mbidTrack = track.mbid
|
||||
mbidTrackArtist = track.mbidArtist
|
||||
mbidWorks = track.mbidWorks
|
||||
except IndexError as e:
|
||||
logger.error('no track %d found, %r', number, e)
|
||||
raise
|
||||
@@ -420,10 +423,14 @@ class Program:
|
||||
tags['DATE'] = self.metadata.release
|
||||
|
||||
if number > 0:
|
||||
tags['MUSICBRAINZ_RELEASETRACKID'] = mbidTrack
|
||||
tags['MUSICBRAINZ_TRACKID'] = mbidRecording
|
||||
tags['MUSICBRAINZ_ARTISTID'] = mbidTrackArtist
|
||||
tags['MUSICBRAINZ_ALBUMID'] = mbidRelease
|
||||
tags['MUSICBRAINZ_RELEASEGROUPID'] = mbidReleaseGroup
|
||||
tags['MUSICBRAINZ_ALBUMARTISTID'] = mbidReleaseArtist
|
||||
if len(mbidWorks) > 0:
|
||||
tags['MUSICBRAINZ_WORKID'] = mbidWorks
|
||||
|
||||
# TODO/FIXME: ISRC tag
|
||||
|
||||
|
||||
Reference in New Issue
Block a user