Add Work MBIDs to ripped files
See https://musicbrainz.org/doc/Work Third and final and thus closes https://github.com/whipper-team/whipper/issues/200 Signed-off-by: Frederik “Freso” S. Olesen <freso.dk@gmail.com>
This commit is contained in:
@@ -53,6 +53,7 @@ class TrackMetadata(object):
|
||||
sortName = None
|
||||
mbidArtist = None
|
||||
mbidRecording = None
|
||||
mbidWorks = []
|
||||
|
||||
|
||||
class DiscMetadata(object):
|
||||
@@ -146,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}
|
||||
@@ -234,6 +248,7 @@ def _getMetadata(releaseShort, release, discid, country=None):
|
||||
track.title = t['recording']['title']
|
||||
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))
|
||||
@@ -308,6 +323,7 @@ def musicbrainz(discid, country=None, record=False):
|
||||
res = musicbrainzngs.get_release_by_id(
|
||||
release['id'], includes=["artists", "artist-credits",
|
||||
"recordings", "discids", "labels",
|
||||
"recording-level-rels", "work-rels",
|
||||
"release-groups"])
|
||||
_record(record, 'release', release['id'], res)
|
||||
releaseDetail = res['release']
|
||||
|
||||
@@ -397,6 +397,7 @@ class Program:
|
||||
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
|
||||
@@ -428,6 +429,8 @@ class Program:
|
||||
tags['MUSICBRAINZ_ALBUMID'] = mbidRelease
|
||||
tags['MUSICBRAINZ_RELEASEGROUPID'] = mbidReleaseGroup
|
||||
tags['MUSICBRAINZ_ALBUMARTISTID'] = mbidReleaseArtist
|
||||
if len(mbidWorks) > 0:
|
||||
tags['MUSICBRAINZ_WORKID'] = mbidWorks
|
||||
|
||||
# TODO/FIXME: ISRC tag
|
||||
|
||||
|
||||
@@ -243,3 +243,5 @@ class MetadataTestCase(unittest.TestCase):
|
||||
u'4d56eb9f-13b3-4f05-9db7-50195378d49f')
|
||||
self.assertEqual(track1.mbidRecording,
|
||||
u'b191794d-b7c6-4d6f-971e-0a543959b5ad')
|
||||
self.assertEqual(track1.mbidWorks,
|
||||
[u'90d5be68-0b29-45a3-ba01-c27ad78e3625'])
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user