Пример #1
0
    def start(self, runner):
        task.Task.start(self, runner)

        # find on which track the range starts and stops
        startTrack = 0
        startOffset = 0
        stopTrack = 0
        stopOffset = self._stop

        for i, t in enumerate(self._table.tracks):
            if self._table.getTrackStart(i + 1) <= self._start:
                startTrack = i + 1
                startOffset = self._start - self._table.getTrackStart(i + 1)
            if self._table.getTrackEnd(i + 1) <= self._stop:
                stopTrack = i + 1
                stopOffset = self._stop - self._table.getTrackStart(i + 1)

        logger.debug('Ripping from %d to %d (inclusive)',
                     self._start, self._stop)
        logger.debug('Starting at track %d, offset %d',
                     startTrack, startOffset)
        logger.debug('Stopping at track %d, offset %d',
                     stopTrack, stopOffset)

        bufsize = 1024
        if self._overread:
            argv = ["cd-paranoia", "--stderr-progress",
                    "--sample-offset=%d" % self._offset, "--force-overread", ]
        else:
            argv = ["cd-paranoia", "--stderr-progress",
                    "--sample-offset=%d" % self._offset, ]
        if self._device:
            argv.extend(["--force-cdrom-device", self._device, ])
        argv.extend(["%d[%s]-%d[%s]" % (
            startTrack, common.framesToHMSF(startOffset),
            stopTrack, common.framesToHMSF(stopOffset)),
            self.path])
        logger.debug('Running %s' % (" ".join(argv), ))
        try:
            self._popen = asyncsub.Popen(argv,
                                         bufsize=bufsize,
                                         stdin=subprocess.PIPE,
                                         stdout=subprocess.PIPE,
                                         stderr=subprocess.PIPE,
                                         close_fds=True)
        except OSError as e:
            import errno
            if e.errno == errno.ENOENT:
                raise common.MissingDependencyException('cd-paranoia')

            raise

        self._start_time = time.time()
        self.schedule(1.0, self._read, runner)
Пример #2
0
    def start(self, runner):
        task.Task.start(self, runner)

        try:
            self._popen = asyncsub.Popen(self.command,
                bufsize=self.bufsize,
                stdin=subprocess.PIPE, stdout=subprocess.PIPE,
                stderr=subprocess.PIPE, close_fds=True, cwd=self.cwd)
        except OSError, e:
            import errno
            if e.errno == errno.ENOENT:
                self.commandMissing()

            raise
Пример #3
0
    def start(self, runner):
        task.Task.start(self, runner)
        os.close(self.fd)
        os.unlink(self.tocfile)

        cmd = ([CDRDAO, 'read-toc'] +
               (['--fast-toc'] if self.fast_toc else []) +
               ['--device', self.device, self.tocfile])

        self._popen = asyncsub.Popen(cmd,
                                     bufsize=1024,
                                     stdin=subprocess.PIPE,
                                     stdout=subprocess.PIPE,
                                     stderr=subprocess.PIPE,
                                     close_fds=True)

        self.schedule(0.01, self._read, runner)
Пример #4
0
    def get(self):
        version = "(Unknown)"

        try:
            p = asyncsub.Popen(self._args,
                               stdin=subprocess.PIPE, stdout=subprocess.PIPE,
                               stderr=subprocess.PIPE, close_fds=True)
            p.wait()
            output = asyncsub.recv_some(p, e=0, stderr=1)
            vre = self._regexp.search(output)
            if vre:
                version = self._expander % vre.groupdict()
        except OSError, e:
            import errno
            if e.errno == errno.ENOENT:
                raise MissingDependencyException(self._dep)
            raise
Пример #5
0
    def start(self, runner):
        task.Task.start(self, runner)

        try:
            self._popen = asyncsub.Popen(self.command,
                                         bufsize=self.bufsize,
                                         stdin=subprocess.PIPE,
                                         stdout=subprocess.PIPE,
                                         stderr=subprocess.PIPE,
                                         close_fds=True, cwd=self.cwd)
        except OSError as e:
            import errno
            if e.errno == errno.ENOENT:
                self.commandMissing()

            raise

        logger.debug('started %r with pid %d', self.command, self._popen.pid)

        self.schedule(1.0, self._read, runner)
Пример #6
0
    def start(self, runner):
        task.Task.start(self, runner)

        # find on which track the range starts and stops
        startTrack = 0
        startOffset = 0
        stopTrack = 0
        stopOffset = self._stop

        for i, _ in enumerate(self._table.tracks):
            if self._table.getTrackStart(i + 1) <= self._start:
                startTrack = i + 1
                startOffset = self._start - self._table.getTrackStart(i + 1)
            if self._table.getTrackEnd(i + 1) <= self._stop:
                stopTrack = i + 1
                stopOffset = self._stop - self._table.getTrackStart(i + 1)

        logger.debug('ripping from %d to %d (inclusive)', self._start,
                     self._stop)
        logger.debug('starting at track %d, offset %d', startTrack,
                     startOffset)
        logger.debug('stopping at track %d, offset %d', stopTrack, stopOffset)

        bufsize = 1024
        if self._overread:
            argv = [
                "cd-paranoia",
                "--stderr-progress",
                "--sample-offset=%d" % self._offset,
                "--force-overread",
            ]
        else:
            argv = [
                "cd-paranoia",
                "--stderr-progress",
                "--sample-offset=%d" % self._offset,
            ]
        if self._device:
            argv.extend([
                "--force-cdrom-device",
                self._device,
            ])
        argv.extend([
            "%d[%s]-%d[%s]" % (startTrack, common.framesToHMSF(startOffset),
                               stopTrack, common.framesToHMSF(stopOffset)),
            self.path
        ])
        logger.debug('running %s', (" ".join(argv), ))
        if self._offset > 587:
            logger.warning(
                "because of a cd-paranoia upstream bug whipper may fail to "
                "work correctly when using offset values > 587 (current "
                "value: %d) and print warnings like this: 'file size 0 did "
                "not match expected size'. For more details please check the "
                "following issues: "
                "https://github.com/whipper-team/whipper/issues/234 and "
                "https://github.com/rocky/libcdio-paranoia/issues/14",
                self._offset)
        if stopTrack == 99:
            logger.warning(
                "because of a cd-paranoia upstream bug whipper may fail to "
                "rip the last track of a CD when it has got 99 of them. "
                "For more details please check the following issue: "
                "https://github.com/whipper-team/whipper/issues/302")
        try:
            self._popen = asyncsub.Popen(argv,
                                         bufsize=bufsize,
                                         stdin=subprocess.PIPE,
                                         stdout=subprocess.PIPE,
                                         stderr=subprocess.PIPE,
                                         close_fds=True)
        except OSError as e:
            if e.errno == errno.ENOENT:
                raise common.MissingDependencyException('cd-paranoia')

            raise

        self._start_time = time.time()
        self.schedule(1.0, self._read, runner)