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:
JoeLametta
2019-02-13 21:35:02 +01:00
committed by GitHub
11 changed files with 95 additions and 11 deletions

View File

@@ -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)

View File

@@ -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