X-Git-Url: https://diplodocus.org/git/flac-archive/blobdiff_plain/4a4bfea044b16a7469c8cd5e38b08f41ce4652c9..cfd5982bbc4e0321c4bf6e13ac54337f38372066:/fa-rip diff --git a/fa-rip b/fa-rip index ac35bae..6b72980 100755 --- a/fa-rip +++ b/fa-rip @@ -86,26 +86,31 @@ import os, re, sys, tempfile, time, traceback from optparse import OptionParser import urllib -import musicbrainz2.disc -import musicbrainz2.webservice +import discid.disc +import musicbrainzngs.musicbrainz from org.diplodocus.util import catch_EnvironmentError as c +musicbrainzngs.musicbrainz.set_useragent( + 'flac-archive', '0.1', 'https://diplodocus.org/git/flac-archive') + +#import logging +#logging.basicConfig(level=logging.DEBUG) + # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=439790 MSF_OFFSET = 150 -def mkcue(disc, trackcount=None): - fp = c(file, 'cue', 'w') +def mkcue(fp, disc, trackcount=None): c(fp.write, 'FILE "dummy.wav" WAVE\n') if trackcount == None: - trackcount = disc.lastTrackNum + trackcount = len(disc.tracks) else: - trackcount = min(trackcount, disc.lastTrackNum) + trackcount = min(trackcount, len(disc.tracks)) - for i in xrange(disc.firstTrackNum, trackcount+1): - offset = disc.tracks[i-1][0] - offset -= MSF_OFFSET + for i in xrange(1, trackcount+1): + track = disc.tracks[i-1] + offset = track.offset - MSF_OFFSET minutes = seconds = 0 sectors = offset % 75 @@ -115,14 +120,12 @@ def mkcue(disc, trackcount=None): minutes = seconds / 60 seconds = seconds % 60 - c(fp.write, ' TRACK %02d AUDIO\n' % (i,)) + c(fp.write, ' TRACK %02d AUDIO\n' % (track.number,)) if i == 1 and offset > 0: c(fp.write, ' INDEX 00 00:00:00\n') c(fp.write, ' INDEX 01 %02d:%02d:%02d\n' % (minutes, seconds, sectors)) - c(fp.close) - return trackcount def tags_file(fn, trackcount, various, artist=None, album=None, @@ -168,12 +171,11 @@ def cover_art(i, asin): def tags(releases, trackcount): results = [] + seen_asins = set() seen_various = False tags_file('candidate-tags-0', trackcount, False) - include = musicbrainz2.webservice.ReleaseIncludes(artist=True, tracks=True) - i = 0 for release in releases: i += 1 @@ -193,7 +195,10 @@ def tags(releases, trackcount): # http://musicbrainz.org/ns/rel-1.0#Wikipedia # ... # http://musicbrainz.org/ns/rel-1.0#AmazonAsin - cover_art(str(i), release.asin) + asin = release.asin + if asin not in seen_asins: + seen_asins.add(asin) + cover_art(str(i), asin) def rip(device, trackcount, single_file): if device == None: @@ -236,8 +241,11 @@ def get_releases(filter_, tries=5): time.sleep(sleep) def releases_by_disc(disc_id): - filter_ = musicbrainz2.webservice.ReleaseFilter(discId=disc_id) - return (result.release for result in get_releases(filter_)) + try: + musicbrainzngs.musicbrainz.get_releases_by_discid(disc_id) + except musicbrainzngs.musicbrainz.ResponseError: + return [] + raise 'what now' def releases_by(q, title, artist=None): filter_ = musicbrainz2.webservice.ReleaseFilter(title=title) @@ -257,6 +265,7 @@ def main(argv): parser.add_option('--artist') parser.add_option('--discid') parser.add_option('--title') + parser.add_option('--print-discid', action='store_true', default=False) parser.add_option('-d', '--device') parser.add_option('-m', '--no-musicbrainz', action='store_true', default=False) @@ -293,12 +302,17 @@ def main(argv): elif options.discid != None: tags(releases_by_disc(options.discid), trackcount) else: - disc = musicbrainz2.disc.readDisc(device) - trackcount = mkcue(disc, trackcount) + disc = discid.disc.read(device) + if options.print_discid: + print disc.id + return 0 + fp = c(file, 'cue', 'w') + trackcount = mkcue(fp, disc, trackcount) + c(fp.close) if options.no_musicbrainz: releases = [] else: - releases = releases_by_disc(disc.getId()) + releases = releases_by_disc(disc.id) tags(releases, trackcount) rip(device, trackcount, options.single_file) except Exception, error: