Example #1
0
    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))
Example #2
0
    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
Example #3
0
    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
Example #4
0
    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]")
Example #5
0
    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
Example #6
0
    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))
Example #7
0
    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
Example #8
0
    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
Example #9
0
    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"
Example #10
0
    def testGetAccurateRipResults(self):
        prog = program.Program()
        prog.result = result.RipResult()
        prog.result.tracks = self._tracks

        prog.getAccurateRipResults()