def verifyImage(self, runner, table): """ verify table against accuraterip and cue_path track lengths Verify our image against the given AccurateRip responses. Needs an initialized self.result. Will set accurip and friends on each TrackResult. Populates self.result.tracks with above TrackResults. """ cueImage = image.Image(self.cuePath) # assigns track lengths verifytask = image.ImageVerifyTask(cueImage) runner.run(verifytask) if verifytask.exception: logger.error(verifytask.exceptionMessage) return False responses = accurip.get_db_entry(table.accuraterip_path()) logger.info('%d AccurateRip response(s) found', len(responses)) checksums = accurip.calculate_checksums([ os.path.join(os.path.dirname(self.cuePath), t.indexes[1].path) for t in [t for t in cueImage.cue.table.tracks if t.number != 0] ]) if not (checksums and any(checksums['v1']) and any(checksums['v2'])): return False return accurip.verify_result(self.result, responses, checksums)
def do(self): prog = program.Program(config.Config()) runner = task.SyncRunner() for arg in self.options.cuefile: arg = arg.decode('utf-8') cueImage = image.Image(arg) cueImage.setup(runner) # 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) verified = False try: verified = prog.verifyImage(runner, cueImage.table) except accurip.EntryNotFound: print('AccurateRip entry not found') accurip.print_report(prog.result) if not verified: sys.exit(1)
def do(self): prog = program.Program(config.Config(), stdout=sys.stdout) runner = task.SyncRunner() for arg in self.options.cuefile: sys.stdout.write('Retagging image %r\n' % arg) arg = arg.decode('utf-8') cueImage = image.Image(arg) cueImage.setup(runner) mbdiscid = cueImage.table.getMusicBrainzDiscId() sys.stdout.write('MusicBrainz disc id is %s\n' % mbdiscid) sys.stdout.write("MusicBrainz lookup URL %s\n" % cueImage.table.getMusicBrainzSubmitURL()) prog.metadata = prog.getMusicBrainz( cueImage.table, mbdiscid, release=self.options.release_id, # noqa: E501 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) logger.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 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. """ logger.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): prog = program.Program(config.Config()) runner = task.SyncRunner() cache = accurip.AccuCache() for arg in self.options.cuefile: 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 retagImage(self, runner, taglists): cueImage = image.Image(self.cuePath) t = image.ImageRetagTask(cueImage, taglists) runner.run(t)