def do(self, args): prog = program.Program() runner = task.SyncRunner() for arg in args: print 'Retagging image %r' % arg arg = arg.decode('utf-8') cueImage = image.Image(arg) cueImage.setup(runner) mbdiscid = cueImage.table.getMusicBrainzDiscId() prog.metadata = prog.getMusicBrainz(cueImage.table, mbdiscid) if not prog.metadata: print 'Not in MusicBrainz database, skipping' continue # FIXME: this feels like we're poking at internals. prog.cuePath = arg prog.result = result.RipResult() for track in cueImage.table.tracks: path = track.indexes[1].path taglist = prog.getTagList(track.number) self.debug('possibly retagging %r with taglist %r', path, taglist) t = encode.SafeRetagTask(path, taglist) runner.run(t) path = os.path.basename(path) if t.changed: print 'Retagged %s' % path else: print '%s already tagged correctly' % path print
def main(argv): log.init() parser = optparse.OptionParser() default = 'cli' parser.add_option('-r', '--runner', action="store", dest="runner", help="runner ('cli' or 'gtk', defaults to %s)" % default, default=default) options, args = parser.parse_args(argv[1:]) path = 'test.cue' try: path = sys.argv[1] except IndexError: pass cueImage = image.Image(path) verifytask = image.ImageVerifyTask(cueImage) cuetask = image.AccurateRipChecksumTask(cueImage) if options.runner == 'cli': runner = task.SyncRunner() function = climain elif options.runner == 'gtk': runner = taskgtk.GtkProgressRunner() function = gtkmain cueImage.setup(runner) print print "CDDB disc id", cueImage.table.getCDDBDiscId() url = cueImage.table.getAccurateRipURL() print "AccurateRip URL", url # FIXME: download url as a task too responses = [] import urllib2 try: handle = urllib2.urlopen(url) data = handle.read() responses = accurip.getAccurateRipResponses(data) except urllib2.HTTPError, e: if e.code == 404: print 'Album not found in AccurateRip database' else: raise
def do(self, args): # here to avoid import gst eating our options from morituri.common import encode prog = program.Program(self.getRootCommand().config, stdout=self.stdout) runner = task.SyncRunner() for arg in args: self.stdout.write('Retagging image %r\n' % arg) arg = arg.decode('utf-8') cueImage = image.Image(arg) cueImage.setup(runner) mbdiscid = cueImage.table.getMusicBrainzDiscId() self.stdout.write('MusicBrainz disc id is %s\n' % mbdiscid) self.stdout.write("MusicBrainz lookup URL %s\n" % cueImage.table.getMusicBrainzSubmitURL()) prog.metadata = prog.getMusicBrainz( cueImage.table, mbdiscid, release=self.options.release_id, country=self.options.country, prompt=self.options.prompt) if not prog.metadata: print 'Not in MusicBrainz database, skipping' continue prog.metadata.discid = mbdiscid # FIXME: this feels like we're poking at internals. prog.cuePath = arg prog.result = result.RipResult() for track in cueImage.table.tracks: path = cueImage.getRealPath(track.indexes[1].path) taglist = prog.getTagList(track.number) self.debug( 'possibly retagging %r from cue path %r with taglist %r', path, arg, taglist) t = encode.SafeRetagTask(path, taglist) runner.run(t) path = os.path.basename(path) if t.changed: print 'Retagged %s' % path else: print '%s already tagged correctly' % path print
def do(self, args): prog = program.Program(self.getRootCommand().config) prog.outdir = (self.options.output_directory or os.getcwd()) prog.outdir = prog.outdir.decode('utf-8') # here to avoid import gst eating our options from morituri.common import encode profile = encode.ALL_PROFILES[self.options.profile]() runner = task.SyncRunner() for arg in args: arg = arg.decode('utf-8') indir = os.path.dirname(arg) cueImage = image.Image(arg) cueImage.setup(runner) # FIXME: find a decent way to get an album-specific outdir root = os.path.basename(indir) outdir = os.path.join(prog.outdir, root) try: os.makedirs(outdir) except: # FIXME: handle other exceptions than OSError Errno 17 pass # FIXME: handle this nicer assert outdir != indir taskk = image.ImageEncodeTask(cueImage, profile, outdir) runner.run(taskk) # FIXME: translate .m3u file if it exists root, ext = os.path.splitext(arg) m3upath = root + '.m3u' if os.path.exists(m3upath): self.debug('translating .m3u file') inm3u = open(m3upath) outm3u = open(os.path.join(outdir, os.path.basename(m3upath)), 'w') for line in inm3u.readlines(): root, ext = os.path.splitext(line) if ext: # newline is swallowed by splitext here outm3u.write('%s.%s\n' % (root, profile.extension)) else: outm3u.write('%s' % root) outm3u.close()
def verifyImage(self, runner, responses): """ Verify our image against the given AccurateRip responses. Needs an initialized self.result. Will set accurip and friends on each TrackResult. """ self.debug('verifying Image against %d AccurateRip responses', len(responses or [])) cueImage = image.Image(self.cuePath) verifytask = image.ImageVerifyTask(cueImage) cuetask = image.AccurateRipChecksumTask(cueImage) runner.run(verifytask) runner.run(cuetask) self._verifyImageWithChecksums(responses, cuetask.checksums)
def do(self, args): prog = program.Program(self.getRootCommand.config(), stdout=self.stdout) runner = task.SyncRunner() for arg in args: self.stdout.write('Renaming image %r\n' % arg) arg = arg.decode('utf-8') cueImage = image.Image(arg) cueImage.setup(runner) mbdiscid = cueImage.table.getMusicBrainzDiscId() operator = renamer.Operator(statePath, mbdiscid) self.stdout.write('MusicBrainz disc id is %s\n' % mbdiscid) prog.metadata = prog.getMusicBrainz( cueImage.table, mbdiscid, release=self.options.release_id) if not prog.metadata: print 'Not in MusicBrainz database, skipping' continue # FIXME: this feels like we're poking at internals. prog.cuePath = arg prog.result = result.RipResult() for track in cueImage.table.tracks: path = cueImage.getRealPath(track.indexes[1].path) taglist = prog.getTagList(track.number) self.debug( 'possibly retagging %r from cue path %r with taglist %r', path, arg, taglist) t = encode.SafeRetagTask(path, taglist) runner.run(t) path = os.path.basename(path) if t.changed: print 'Retagged %s' % path else: print '%s already tagged correctly' % path print
def do(self, args): prog = program.Program(self.getRootCommand().config) runner = task.SyncRunner() cache = accurip.AccuCache() for arg in args: arg = arg.decode('utf-8') cueImage = image.Image(arg) cueImage.setup(runner) url = cueImage.table.getAccurateRipURL() responses = cache.retrieve(url) # FIXME: this feels like we're poking at internals. prog.cuePath = arg prog.result = result.RipResult() for track in cueImage.table.tracks: tr = result.TrackResult() tr.number = track.number prog.result.tracks.append(tr) prog.verifyImage(runner, responses) print "\n".join(prog.getAccurateRipResults()) + "\n"
def setUp(self): self.image = image.Image( os.path.join(os.path.dirname(__file__), u'track-separate.cue')) self.runner = task.SyncRunner(verbose=False) self.image.setup(self.runner)
def retagImage(self, runner, taglists): cueImage = image.Image(self.cuePath) t = image.ImageRetagTask(cueImage, taglists) runner.run(t)
if e.code == 404: print 'Album not found in AccurateRip database' else: raise if responses: print '%d AccurateRip responses found' % len(responses) if responses[0].cddbDiscId != itable.getCDDBDiscId(): print "AccurateRip response discid different: %s" % \ responses[0].cddbDiscId # FIXME: put accuraterip verification into a separate task/function # and apply here cueImage = image.Image(cuePath) verifytask = image.ImageVerifyTask(cueImage) cuetask = image.AccurateRipChecksumTask(cueImage) function(runner, verifytask) function(runner, cuetask) response = None # track which response matches, for all tracks # loop over tracks for i, sum in enumerate(cuetask.checksums): status = 'rip NOT accurate' confidence = None arsum = None # match against each response's checksum