def setUp(self): self.logger = cresult.EACLogger(frompath=u'/tmp') self.result = result.RipResult() self.result.artist = 'Pixies' self.result.title = 'Planet of Sound' self.result.offset = 102 self.result.vendor = 'MATSHITA' self.result.model = 'DVD/CDRW UJDA775' tocfile = toc.TocFile(os.path.join(os.path.dirname(__file__), u'pixies.toc')) tocfile.parse() self.result.table = tocfile.table self.result.tracks.append(self._track( 1, 'Pixies - Planet of Sound/01. Pixies - Planet of Sound.flac', 12, 0.622, 0x14d38ce0, 0xca121fb9, 7)) self.result.tracks.append(self._track( 2, 'Pixies - Planet of Sound/02. Pixies - Theme from Narc.flac', 145, 0.625, 0x4493ea28, 0xd05b2ce9, 8)) self.result.tracks.append(self._track( 3, 'Pixies - Planet of Sound/03. Pixies - Build High.flac', 72, 0.526, 0x157099ed, 0x83507b5e, 8)) self.result.tracks.append(self._track( 4, 'Pixies - Planet of Sound/04. Pixies - Evil Hearted You.flac', 70, 0.683, 0x7462c71b, 0x39b9c184, 8))
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 getRipResult(self, cddbdiscid): """ Retrieve the persistable RipResult either from our cache (from a previous, possibly aborted rip), or return a new one. @rtype: L{result.RipResult} """ assert self.result is None path = self._getResultCachePath() pcache = common.PersistedCache(path) presult = pcache.get(cddbdiscid) if not presult.object: self.debug('result for cddbdiscid %r not in cache, creating', cddbdiscid) presult.object = result.RipResult() presult.persist(self.result) else: self.debug('result for cddbdiscid %r found in cache, reusing', cddbdiscid) self.result = presult.object self._presult = presult return self.result
def testVerify(self): path = os.path.join(os.path.dirname(__file__), 'dBAR-020-002e5023-029d8e49-040eaa14.bin') data = open(path, "rb").read() responses = accurip.getAccurateRipResponses(data) # these crc's were calculated from an actual rip checksums = [ 1644890007, 2945205445, 3983436658, 1528082495, 1203704270, 1163423644, 3649097244, 100524219, 1583356174, 373652058, 1842579359, 2850056507, 1329730252, 2526965856, 2525886806, 209743350, 3184062337, 2099956663, 2943874164, 2321637196 ] prog = program.Program() prog.result = result.RipResult() # fill it with empty trackresults for i, c in enumerate(checksums): r = result.TrackResult() r.number = i + 1 prog.result.tracks.append(r) prog._verifyImageWithChecksums(responses, checksums) # now check if the results were filled in properly tr = prog.result.getTrackResult(1) self.assertEquals(tr.accurip, False) self.assertEquals(tr.ARDBMaxConfidence, 0) self.assertEquals(tr.ARDBCRC, 0) self.assertEquals(tr.ARDBCRC, 0) tr = prog.result.getTrackResult(2) self.assertEquals(tr.accurip, True) self.assertEquals(tr.ARDBMaxConfidence, 2) self.assertEquals(tr.ARDBCRC, checksums[2 - 1]) tr = prog.result.getTrackResult(10) self.assertEquals(tr.accurip, False) self.assertEquals(tr.ARDBMaxConfidence, 2) # we know track 10 was ripped wrong self.assertNotEquals(tr.ARDBCRC, checksums[10 - 1]) res = prog.getAccurateRipResults() self.assertEquals( res[1 - 1], "Track 1: rip NOT accurate (not found) " "[620b0797], DB [notfound]") self.assertEquals( res[2 - 1], "Track 2: rip accurate (max confidence 2) " "[af8c44c5], DB [af8c44c5]") self.assertEquals( res[10 - 1], "Track 10: rip NOT accurate (max confidence 2) " "[16457a5a], DB [eb6e55b4]")
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 setUp(self): self.logger = whatcd.WhatCDLogger() self.result = result.RipResult() self.result.artist = 'Pixies' self.result.title = 'Planet of Sound' self.result.offset = 102 self.result.vendor = 'MATSHITA' self.result.model = 'DVD/CDRW UJDA775' self.result.cdparanoiaVersion = 'III 10.2' self.result.cdparanoiaDefeatsCache = True self.result.cdrdaoVersion = '1.2.3' self.result.profileName = 'flac' self.result.profilePipeline = 'flacenc name=tagger quality=8' self.result.gstreamerVersion = '0.10.36' self.result.gstPythonVersion = '0.10.22' self.result.encoderVersion = '0.10.31' tocfile = toc.TocFile( os.path.join(os.path.dirname(__file__), u'pixies.toc')) tocfile.parse() self.result.table = tocfile.table self.result.tracks.append( self._track( 1, 'Pixies - Planet of Sound/01. Pixies - Planet of Sound.flac', 12, 0.622, 0x14d38ce0, 0xca121fb9, 7)) self.result.tracks.append( self._track( 2, 'Pixies - Planet of Sound/02. Pixies - Theme from Narc.flac', 145, 0.625, 0x4493ea28, 0xd05b2ce9, 8)) self.result.tracks.append( self._track( 3, 'Pixies - Planet of Sound/03. Pixies - Build High.flac', 72, 0.526, 0x157099ed, 0x83507b5e, 8)) self.result.tracks.append( self._track( 4, 'Pixies - Planet of Sound/04. Pixies - Evil Hearted You.flac', 70, 0.683, 0x7462c71b, 0x39b9c184, 8))
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 getRipResult(self, cddbdiscid, create=True): """ Retrieve the persistable RipResult either from our cache (from a previous, possibly aborted rip), or return a new one. @rtype: L{Persistable} for L{result.RipResult} """ presult = self._pcache.get(cddbdiscid) if not presult.object: self.debug('result for cddbdiscid %r not in cache', cddbdiscid) if not create: self.debug('returning None') return None self.debug('creating result') presult.object = result.RipResult() presult.persist(presult.object) else: self.debug('result for cddbdiscid %r found in cache, reusing', cddbdiscid) return presult
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 testGetAccurateRipResults(self): prog = program.Program() prog.result = result.RipResult() prog.result.tracks = self._tracks prog.getAccurateRipResults()