[SCM] morituri/master: * examples/readtrack.py: * morituri/program/cdparanoia.py: Move ReadTrackTask to cdparanoia module.

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


The following commit has been merged in the master branch:
commit 54c7322a0426fa4e3c66b5b3455c1e0eec96fd44
Author: Thomas Vander Stichele <thomas (at) apestaart (dot) org>
Date:   Fri May 1 18:52:51 2009 +0000

    	* examples/readtrack.py:
    	* morituri/program/cdparanoia.py:
    	  Move ReadTrackTask to cdparanoia module.

diff --git a/ChangeLog b/ChangeLog
index 2b5299b..3ddf613 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
 
+	* examples/readtrack.py:
+	* morituri/program/cdparanoia.py:
+	  Move ReadTrackTask to cdparanoia module.
+
+2009-05-01  Thomas Vander Stichele  <thomas at apestaart dot org>
+
 	* examples/readtrack.py (added):
 	  Add an example that reads a track using cdparanoia.
 
diff --git a/examples/readtrack.py b/examples/readtrack.py
index 26f1e28..0301496 100644
--- a/examples/readtrack.py
+++ b/examples/readtrack.py
@@ -6,122 +6,40 @@ import os
 import subprocess
 import tempfile
 
-from morituri.common import task, log, common
+from morituri.common import task, checksum, log
 from morituri.program import cdparanoia
-from morituri.extern import asyncsub
 
-# FIXME: handle errors
+import gobject
+gobject.threads_init()
 
-class ReadTrackTask(task.Task):
-    """
-    I am a task that reads a track using cdparanoia.
-    """
-
-    description = "Reading Track..."
-
-
-    def __init__(self, path, start, stop, offset=0):
-        """
-        Read the given track.
-
-        @param path:   where to store the ripped track
-        @type  path:   str
-        @param start:  first frame to rip
-        @type  start:  int
-        @param stop:   last frame to rip (inclusive)
-        @type  stop:   int
-        @param offset: read offset, in samples
-        @type  offset: int
-        """
-        self.path = path
-        self._start = start
-        self._stop = stop
-        self._offset = offset
-        self._parser = cdparanoia.ProgressParser()
-
-        self._buffer = "" # accumulate characters
-
-    def start(self, runner):
-        task.Task.start(self, runner)
-
-        bufsize = 1024
-        argv = ["cdparanoia",
-            "--sample-offset=%d" % self._offset,
-            "--stderr-progress",
-            "[%s]-[%s]" % (
-                common.framesToHMSF(self._start),
-                common.framesToHMSF(self._stop)), self.path]
-        self.debug('Running %s' % (" ".join(argv), ))
-        self._popen = asyncsub.Popen(argv,
-            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()
-        if not ret:
-            if self._popen.poll() is not None:
-                self._done()
-                return
-            self.runner.schedule(0.01, self._read, runner)
-            return
-
-        self._buffer += ret
+def main():
+    log.init()
+    runner = task.SyncRunner()
 
-        # 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 = ""
+    checksums = []
+    for i in range(2):
+        fd, path = tempfile.mkstemp(suffix='.morituri')
+        os.close(fd)
 
-            for line in lines:
-                self._parser.parse(line)
-            # FIXME: self._parser.read *will* go past self._stop,
-            # and only indicates read frames, not written frames.
-            # but we can't rely on anything else.
-            num = float(self._parser.read) - self._start
-            den = float(self._stop) - self._start
-            progress = num / den
-            if progress < 1.0:
-                self.setProgress(progress)
+        t = cdparanoia.ReadTrackTask(path, 1000, 3000, offset=0)
+        if i == 1:
+            t.description = 'Verifying track...'
 
-        # 0 does not give us output before we complete, 1.0 gives us output
-        # too late
-        self.runner.schedule(0.01, self._read, runner)
+        runner.run(t)
 
-    def _poll(self, runner):
-        if self._popen.poll() is None:
-            self.runner.schedule(1.0, self._poll, runner)
-            return
+        t = checksum.CRC32Task(path)
+        runner.run(t)
 
-        self._done()
+        if i == 0:
+            os.unlink(path)
 
-    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:
-                print
-                print 'done'
-                
-            self.stop()
-            return
+        checksums.append(t.checksum)
 
-def main():
-    log.init()
-    runner = task.SyncRunner()
-    t = ReadTrackTask('/tmp/track.wav', 1000, 3000, offset=0)
-    runner.run(t)
     print 'runner done'
+    if checksums[0] == checksums[1]:
+        print 'Checksums match'
+    else:
+        print 'Checksums do not match'
 
 
 main()
diff --git a/morituri/program/cdparanoia.py b/morituri/program/cdparanoia.py
index 268f2dd..aaf7aab 100644
--- a/morituri/program/cdparanoia.py
+++ b/morituri/program/cdparanoia.py
@@ -21,6 +21,10 @@
 # along with morituri.  If not, see <http://www.gnu.org/licenses/>.
 
 import re
+import subprocess
+
+from morituri.common import task, log, common
+from morituri.extern import asyncsub
 
 _PROGRESS_RE = re.compile(r"""
     ^\#\#: (?P<code>.+)\s      # function code
@@ -48,3 +52,105 @@ class ProgressParser(object):
                     print line
                 else:
                     self.read = offset / 1176
+
+# FIXME: handle errors
+class ReadTrackTask(task.Task):
+    """
+    I am a task that reads a track using cdparanoia.
+    """
+
+    description = "Reading Track..."
+
+
+    def __init__(self, path, start, stop, offset=0):
+        """
+        Read the given track.
+
+        @param path:   where to store the ripped track
+        @type  path:   str
+        @param start:  first frame to rip
+        @type  start:  int
+        @param stop:   last frame to rip (inclusive)
+        @type  stop:   int
+        @param offset: read offset, in samples
+        @type  offset: int
+        """
+        self.path = path
+        self._start = start
+        self._stop = stop
+        self._offset = offset
+        self._parser = ProgressParser()
+
+        self._buffer = "" # accumulate characters
+
+    def start(self, runner):
+        task.Task.start(self, runner)
+
+        bufsize = 1024
+        argv = ["cdparanoia",
+            "--sample-offset=%d" % self._offset,
+            "--stderr-progress",
+            "[%s]-[%s]" % (
+                common.framesToHMSF(self._start),
+                common.framesToHMSF(self._stop)), self.path]
+        self.debug('Running %s' % (" ".join(argv), ))
+        self._popen = asyncsub.Popen(argv,
+            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()
+        if not ret:
+            if self._popen.poll() is not None:
+                self._done()
+                return
+            self.runner.schedule(0.01, self._read, 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._parser.parse(line)
+            # FIXME: self._parser.read *will* go past self._stop,
+            # and only indicates read frames, not written frames.
+            # but we can't rely on anything else.
+            num = float(self._parser.read) - self._start
+            den = float(self._stop) - self._start
+            progress = num / den
+            if progress < 1.0:
+                self.setProgress(progress)
+
+        # 0 does not give us output before we complete, 1.0 gives us output
+        # too late
+        self.runner.schedule(0.01, 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
+                
+            self.stop()
+            return

-- 
morituri packaging



More information about the pkg-multimedia-commits mailing list