Пример #1
0
    def do(self, args):
        prog = program.Program(self.getRootCommand().config)
        runner = ctask.SyncRunner()

        device = self.options.device

        # if necessary, load and unmount
        self.stdout.write('Checking device %s\n' % device)

        prog.loadDevice(device)
        prog.unmountDevice(device)

        # first get the Table Of Contents of the CD
        t = cdrdao.ReadTOCTask(device)
        table = t.table

        self.debug("CDDB disc id: %r", table.getCDDBDiscId())
        url = table.getAccurateRipURL()
        self.debug("AccurateRip URL: %s", 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:
                self.stdout.write(
                    'Album not found in AccurateRip database.\n')
                return 1
            else:
                raise
Пример #2
0
    def do(self):
        prog = program.Program(config.Config())
        runner = ctask.SyncRunner()

        device = self.options.device

        # if necessary, load and unmount
        sys.stdout.write('Checking device %s\n' % device)

        utils.load_device(device)
        utils.unmount_device(device)

        # first get the Table Of Contents of the CD
        t = cdrdao.ReadTOCTask(device)
        table = t.table

        logger.debug("CDDB disc id: %r", table.getCDDBDiscId())
        url = table.getAccurateRipURL()
        logger.debug("AccurateRip URL: %s", 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:
                sys.stdout.write(
                    'Album not found in AccurateRip database.\n')
                return 1
            else:
                raise
Пример #3
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]")
Пример #4
0
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
Пример #5
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(config.Config())
        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]")
Пример #6
0
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 testResponse(self):
        path = os.path.join(os.path.dirname(__file__),
                            'dBAR-011-0010e284-009228a3-9809ff0b.bin')
        data = open(path, "rb").read()

        responses = accurip.getAccurateRipResponses(data)
        self.assertEquals(len(responses), 3)

        response = responses[0]

        self.assertEquals(response.trackCount, 11)
        self.assertEquals(response.discId1, "0010e284")
        self.assertEquals(response.discId2, "009228a3")
        self.assertEquals(response.cddbDiscId, "9809ff0b")

        for i in range(11):
            self.assertEquals(response.confidences[i], 35)
        self.assertEquals(response.checksums[0], "beea32c8")
        self.assertEquals(response.checksums[10], "acee98ca")
Пример #8
0
    def testResponse(self):
        path = os.path.join(os.path.dirname(__file__),
            'dBAR-011-0010e284-009228a3-9809ff0b.bin')
        data = open(path, "rb").read()

        responses = accurip.getAccurateRipResponses(data)
        self.assertEquals(len(responses), 3)


        response = responses[0]

        self.assertEquals(response.trackCount, 11)
        self.assertEquals(response.discId1, "0010e284")
        self.assertEquals(response.discId2, "009228a3")
        self.assertEquals(response.cddbDiscId, "9809ff0b")

        for i in range(11):
            self.assertEquals(response.confidences[i], 35)
        self.assertEquals(response.checksums[0], "beea32c8")
        self.assertEquals(response.checksums[10], "acee98ca")
Пример #9
0
class Find(logcommand.LogCommand):
    summary = "find drive read offset"
    description = """Find drive's read offset by ripping tracks from a
CD in the AccurateRip database."""

    def addOptions(self):
        default = OFFSETS
        self.parser.add_option('-o',
                               '--offsets',
                               action="store",
                               dest="offsets",
                               help="list of offsets, comma-separated, "
                               "colon-separated for ranges (defaults to %s)" %
                               default,
                               default=default)
        self.parser.add_option('-d',
                               '--device',
                               action="store",
                               dest="device",
                               help="CD-DA device")

    def handleOptions(self, options):
        self.options = options
        self._offsets = []
        blocks = options.offsets.split(',')
        for b in blocks:
            if ':' in b:
                a, b = b.split(':')
                self._offsets.extend(range(int(a), int(b) + 1))
            else:
                self._offsets.append(int(b))

        self.debug('Trying with offsets %r', self._offsets)

        if not options.device:
            drives = drive.getAllDevicePaths()
            if not drives:
                self.error('No CD-DA drives found!')
                return 3

            # pick the first
            self.options.device = drives[0]

        # this can be a symlink to another device

    def do(self, args):
        prog = program.Program(self.getRootCommand().config)
        runner = ctask.SyncRunner()

        device = self.options.device

        # if necessary, load and unmount
        self.stdout.write('Checking device %s\n' % device)

        prog.loadDevice(device)
        prog.unmountDevice(device)

        # first get the Table Of Contents of the CD
        t = cdrdao.ReadTOCTask(device=device)

        try:
            runner.run(t)
        except cdrdao.DeviceOpenException, e:
            self.error(e.msg)
            return 3

        table = t.table

        self.debug("CDDB disc id: %r", table.getCDDBDiscId())
        url = table.getAccurateRipURL()
        self.debug("AccurateRip URL: %s", 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:
                self.stdout.write('Album not found in AccurateRip database.\n')
                return 1
            else:
                raise