From c4e170daad4cf6ea3137d5c7b8b92a52bc07d0a0 Mon Sep 17 00:00:00 2001 From: Thomas Vander Stichele Date: Mon, 23 Jan 2012 10:09:24 +0000 Subject: [PATCH] * TODO: * morituri/common/program.py: * morituri/rip/cd.py: Add rip cd rip --release-id as an option to select the exact release this disc is a part of. Fixes Radiohead - Pablo Honey and U2 - Achtung Baby --- ChangeLog | 9 +++++++++ TODO | 1 - morituri/common/program.py | 20 +++++++++++++++++--- morituri/rip/cd.py | 9 ++++++--- 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index c17a9b0..93539bf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2012-01-23 Thomas Vander Stichele + + * TODO: + * morituri/common/program.py: + * morituri/rip/cd.py: + Add rip cd rip --release-id as an option to select the exact + release this disc is a part of. + Fixes Radiohead - Pablo Honey and U2 - Achtung Baby + 2012-01-22 Thomas Vander Stichele * morituri/rip/debug.py: diff --git a/TODO b/TODO index 4b1927c..e527b03 100644 --- a/TODO +++ b/TODO @@ -50,6 +50,5 @@ TODO: complain if it was, to not overwrite - if multiple releases with different artist match the disc id, stop and let user continue by choosing one -- on multiple hits with different titles/disc numbers, ask user to choose by specifying first few letters of correct release/album id; redo radiohead - pablo honey - artist-credit-phrase fabricated by musicbrainzngs only looks at name, not at artist-credit->name (see e.g. Gorky) - getting cache results should depend on same drive/offset diff --git a/morituri/common/program.py b/morituri/common/program.py index 531d435..0fa453f 100644 --- a/morituri/common/program.py +++ b/morituri/common/program.py @@ -223,7 +223,7 @@ class Program(log.Loggable): return None - def getMusicBrainz(self, ittoc, mbdiscid): + def getMusicBrainz(self, ittoc, mbdiscid, release=None): # look up disc on musicbrainz print 'Disc duration: %s' % common.formatTime( ittoc.duration() / 1000.0) @@ -272,6 +272,20 @@ class Program(log.Loggable): # If we have multiple, make sure they match metadatas = deltas[lowest] + + if release: + metadatas = [m for m in metadatas if m.url.endswith(release)] + self.debug('Asked for release %r, only kept %r', + release, metadatas) + if len(metadatas) == 1: + print + print 'Picked requested release id %s' % release + print 'Artist : %s' % metadatas[0].artist.encode('utf-8') + print 'Title : %s' % metadatas[0].title.encode('utf-8') + elif not metadatas: + print 'Requested release id %s but none match' % release + return + if len(metadatas) > 1: artist = metadatas[0].artist releaseTitle = metadatas[0].releaseTitle @@ -289,8 +303,8 @@ class Program(log.Loggable): print print 'Picked closest match in duration.' print 'Others may be wrong in musicbrainz, please correct.' - print 'Artist : %s' % artist - print 'Title : %s' % metadatas[0].title + print 'Artist : %s' % artist.encode('utf-8') + print 'Title : %s' % metadatas[0].title.encode('utf-8') # Select one of the returned releases. We just pick the first one. ret = metadatas[0] diff --git a/morituri/rip/cd.py b/morituri/rip/cd.py index a6dc57e..ff070a7 100644 --- a/morituri/rip/cd.py +++ b/morituri/rip/cd.py @@ -81,6 +81,10 @@ filling in the variables and expanding the file extension. Variables are: action="store", dest="disc_template", help="template for disc file naming (default %default)", default=DEFAULT_DISC_TEMPLATE) + self.parser.add_option('-R', '--release-id', + action="store", dest="release", + help="MusicBrainz release id to match to (if there are multiple)") + default = 'flac' # here to avoid import gst eating our options @@ -95,8 +99,6 @@ filling in the variables and expanding the file extension. Variables are: action="store_true", dest="unknown", help="whether to continue ripping if the CD is unknown (%default)", default=False) - default = 'flac' - def handleOptions(self, options): options.track_template = options.track_template.decode('utf-8') @@ -148,7 +150,8 @@ See http://sourceforge.net/tracker/?func=detail&aid=604751&group_id=2171&atid=1 print "MusicBrainz lookup URL", ittoc.getMusicBrainzSubmitURL() - prog.metadata = prog.getMusicBrainz(ittoc, mbdiscid) + prog.metadata = prog.getMusicBrainz(ittoc, mbdiscid, + self.options.release) if not prog.metadata: # fall back to FreeDB for lookup