[SCM] morituri/master: * morituri/program/cdrdao.py: Convert ReadTableTask to a CDRDAOTask subclass. * examples/ARcalibrate.py: * morituri/program/cdparanoia.py: Adapt.

js at users.alioth.debian.org js at users.alioth.debian.org
Sun Oct 19 20:08:55 UTC 2014


The following commit has been merged in the master branch:
commit 3a75cb2d0ff364e3512af150295f11748ff608f9
Author: Thomas Vander Stichele <thomas (at) apestaart (dot) org>
Date:   Mon May 4 13:48:18 2009 +0000

    	* morituri/program/cdrdao.py:
    	  Convert ReadTableTask to a CDRDAOTask subclass.
    	* examples/ARcalibrate.py:
    	* morituri/program/cdparanoia.py:
    	  Adapt.

diff --git a/ChangeLog b/ChangeLog
index af2fad3..d944022 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,14 @@
 2009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
 
 	* morituri/program/cdrdao.py:
+	  Convert ReadTableTask to a CDRDAOTask subclass.
+	* examples/ARcalibrate.py:
+	* morituri/program/cdparanoia.py:
+	  Adapt.
+
+2009-05-04  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* morituri/program/cdrdao.py:
 	  Fix up index scanning's progress report.
 	  Add some debugging.
 
diff --git a/examples/ARcalibrate.py b/examples/ARcalibrate.py
index 2844e6d..24baa2a 100644
--- a/examples/ARcalibrate.py
+++ b/examples/ARcalibrate.py
@@ -63,8 +63,9 @@ def arcs(runner, function, table, track, offset):
         track, offset))
     os.close(fd)
 
-    track = table.tracks[track - 1]
-    t = cdparanoia.ReadTrackTask(path, table, track.start, track.end, offset)
+    table.getTrackLength
+    t = cdparanoia.ReadTrackTask(path, table, table.getTrackStart(track),
+        table.getTrackEnd(track), offset)
     t.description = 'Ripping with offset %d' % offset
     function(runner, t)
 
@@ -72,7 +73,7 @@ def arcs(runner, function, table, track, offset):
         trackCount=len(table.tracks))
     function(runner, t)
     
-    # os.unlink(path)
+    os.unlink(path)
     return "%08x" % t.checksum
  
 def main(argv):
diff --git a/morituri/program/cdparanoia.py b/morituri/program/cdparanoia.py
index b00b8a6..da6f4cc 100644
--- a/morituri/program/cdparanoia.py
+++ b/morituri/program/cdparanoia.py
@@ -101,12 +101,12 @@ class ReadTrackTask(task.Task):
         stopOffset = self._stop
 
         for i, t in enumerate(self._table.tracks):
-            if t.start <= self._start:
+            if self._table.getTrackStart(i + 1) <= self._start:
                 startTrack = i + 1
-                startOffset = self._start - t.start
-            if t.end <= self._stop:
+                startOffset = self._start - self._table.getTrackStart(i + 1)
+            if self._table.getTrackEnd(i + 1) <= self._stop:
                 stopTrack = i + 1
-                stopOffset = self._stop - t.start
+                stopOffset = self._stop - self._table.getTrackStart(i + 1)
 
         self.debug('Ripping from %d to %d (inclusive)', self._start, self._stop)
         self.debug('Starting at track %d, offset %d', startTrack, startOffset)
diff --git a/morituri/program/cdrdao.py b/morituri/program/cdrdao.py
index 2c093c4..b2985b7 100644
--- a/morituri/program/cdrdao.py
+++ b/morituri/program/cdrdao.py
@@ -238,7 +238,7 @@ class ReadTOCTask(CDRDAOTask):
     """
     I am a task that reads all indexes of a CD.
 
-    @ivar toc: the .toc object
+    @ivar toc: the .toc file object
     @type toc: L{toc.TOC}
     """
 
@@ -258,124 +258,33 @@ class ReadTOCTask(CDRDAOTask):
         self.parser.read(bytes)
 
     def done(self):
+        # FIXME: instead of reading only a TOC, output a complete IndexTable
+        # by merging the TOC info.
         self.toc = toc.TOC(self._toc)
         self.toc.parse()
         os.unlink(self._toc)
 
-class ReadTableTask(task.Task):
+class ReadTableTask(CDRDAOTask):
     """
     I am a task that reads the TOC of a CD, without pregaps.
     """
 
     description = "Reading TOC..."
-
+    table = None
 
     def __init__(self):
-        self._buffer = "" # accumulate characters
-        self._lines = [] # accumulate lines
-        self._errors = [] # accumulate error lines
-        self._state = 'START'
-        self._frames = None # number of frames
-        self._starts = [] # start of each track, in frames
-        self._track = None # which track are we analyzing?
-        self._toc = None # path to temporary .toc file
-        self._table = table.Table()
-
-        self.toc = None # result
-
-    def start(self, runner):
-        task.Task.start(self, runner)
+        CDRDAOTask.__init__(self)
+        self.parser = OutputParser(self)
 
-        # FIXME: create a temporary file instead
         (fd, self._toc) = tempfile.mkstemp(suffix='.morituri')
         os.close(fd)
         os.unlink(self._toc)
 
-        bufsize = 1024
-        self._popen = asyncsub.Popen(["cdrdao", "read-toc", "--fast-toc",
-            self._toc],
-                  bufsize=bufsize,
-                  stdin=subprocess.PIPE, stdout=subprocess.PIPE,
-                  stderr=subprocess.PIPE, close_fds=True)
-
-        self.runner.schedule(1.0, self._read, runner)
-
-    def _read(self, runner):
-        ret = self._popen.recv_err()
-        self.log(ret)
-        if not ret:
-            # could be finished now
-            self.runner.schedule(1.0, self._poll, runner)
-            return
-
-        self._buffer += ret
-
-        # parse buffer into lines if possible, and parse them
-        if "\n" in self._buffer:
-            lines = self._buffer.split('\n')
-            if lines[-1] != "\n":
-                # last line didn't end yet
-                self._buffer = lines[-1]
-                del lines[-1]
-            else:
-                self._buffer = ""
-            for line in lines:
-                self.log('Parsing %s', line)
-                if line.startswith('ERROR:'):
-                    self._errors.append(line)
-
-            self._parse(lines)
-            self._lines.extend(lines)
-
-        self.runner.schedule(1.0, self._read, runner)
-
-    def _poll(self, runner):
-        if self._popen.poll() is None:
-            self.runner.schedule(1.0, self._poll, runner)
-            return
-
-        self._done()
-
-    def _done(self):
-            self.setProgress(1.0)
-            if self._popen.returncode != 0:
-                if self._errors:
-                    print "\n".join(self._errors)
-                else:
-                    print 'ERROR: exit code %r' % self._popen.returncode
-            else:
-                self.table = self._table
-                os.unlink(self._toc)
-                
-            self.stop()
-            return
+        self.options = ['read-toc', '--fast-toc', self._toc]
 
-    def _parse(self, lines):
-        for line in lines:
-            methodName = "_parse_" + self._state
-            getattr(self, methodName)(line)
-
-    def _parse_START(self, line):
-        if line.startswith('Track'):
-            self.debug('Found possible track line')
-        if line == "Track   Mode    Flags  Start                Length":
-            self.debug('Found track line, moving to TRACK state')
-            self._state = 'TRACK'
-
-    def _parse_TRACK(self, line):
-        if line.startswith('---'):
-            return
+    def readbytes(self, bytes):
+        self.parser.read(bytes)
 
-        m = _TRACK_RE.search(line)
-        if m:
-            self._tracks = int(m.group('track'))
-            start = int(m.group('start'))
-            self._starts.append(start)
-            mode = m.group('mode')
-            length = int(m.group('length'))
-            self.debug('Found track %d', self._tracks)
-            track = table.Track(self._tracks, start, start + length - 1,
-                mode == "AUDIO") 
-            self.debug('Track %d, start offset %d, length %d',
-                self._tracks, start, length)
-            self._table.tracks.append(track)
+    def done(self):
+        os.unlink(self._toc)
+        self.table = self.parser.toc

-- 
morituri packaging



More information about the pkg-multimedia-commits mailing list