[SCM] morituri/master: * morituri/image/image.py: Create a MultiTask base class, and make AudioRipCRCTask use it.

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


The following commit has been merged in the master branch:
commit d49b4fbaec234e9ab9c10452f69e71b38fcd2907
Author: Thomas Vander Stichele <thomas (at) apestaart (dot) org>
Date:   Sun Apr 12 11:06:23 2009 +0000

    	* morituri/image/image.py:
    	  Create a MultiTask base class, and make AudioRipCRCTask
    	  use it.

diff --git a/ChangeLog b/ChangeLog
index e1c94a5..6a898c6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,12 @@
 2009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
 
 	* morituri/image/image.py:
+	  Create a MultiTask base class, and make AudioRipCRCTask
+	  use it.
+
+2009-04-12  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* morituri/image/image.py:
 	* morituri/test/test_image_image.py:
 	  Add a task for calculating frame length of an audio file.
 	  Add a test for it.
diff --git a/morituri/image/image.py b/morituri/image/image.py
index 6a6ce73..fe65362 100644
--- a/morituri/image/image.py
+++ b/morituri/image/image.py
@@ -66,44 +66,38 @@ class Image:
         Do initial setup, like figuring out track lengths.
         """
 
-class AudioRipCRCTask(task.Task):
+class MultiTask(task.Task):
     """
-    I calculate the AudioRip CRC's of all tracks.
+    I perform multiple tasks.
+    I track progress of each individual task, going back to 0 for each task.
     """
-    def __init__(self, image):
-        self._image = image
-        cue = image.cue
-        self._tasks = []
-        self._track = 0
-        self._tracks = len(cue.tracks)
-        self.description = "CRC'ing %d tracks..." % len(cue.tracks)
-        self.crcs = []
 
-        for trackIndex, track in enumerate(cue.tracks):
-            index = track._indexes[1]
-            length = cue.getTrackLength(track)
-            file = index[1]
-            offset = index[0]
+    description = 'Doing various tasks'
+    tasks = None
 
-            path = image.getRealPath(file.path)
-            crctask = crc.CRCAudioRipTask(path,
-                trackNumber=trackIndex + 1, trackCount=len(cue.tracks),
-                frameStart=offset * crc.FRAMES_PER_DISC_FRAME,
-                frameLength=length * crc.FRAMES_PER_DISC_FRAME)
-
-            self._tasks.append(crctask)
+    def addTask(self, task):
+        if self.tasks is None:
+            self.tasks = []
+        self.tasks.append(task)
 
     def start(self, runner):
         task.Task.start(self, runner)
+
+        # initialize task tracking
+        self._task = 0
+        self._tasks = self.tasks[:]
+        self._generic = self.description
+
         self._next()
 
     def _next(self):
         # start next task
+        self.progress = 0.0 # reset progress for each task
         task = self._tasks[0]
         del self._tasks[0]
-        self._track += 1
-        self.description = "CRC'ing track %2d of %d..." % (
-            self._track, self._tracks)
+        self._task += 1
+        self.description = "%s (%d of %d) ..." % (
+            self._generic, self._task, len(self.tasks))
         task.addListener(self)
         task.start(self.runner)
         
@@ -115,13 +109,43 @@ class AudioRipCRCTask(task.Task):
         self.setProgress(value)
 
     def stopped(self, task):
-        self.crcs.append(task.crc)
         if not self._tasks:
             self.stop()
             return
 
         # pick another
-        self.start(self.runner)
+        self._next()
+
+
+class AudioRipCRCTask(MultiTask):
+    """
+    I calculate the AudioRip CRC's of all tracks.
+    """
+    
+    description = "CRC'ing tracks"
+
+    def __init__(self, image):
+        self._image = image
+        cue = image.cue
+        self.crcs = []
+
+        tasks = []
+        for trackIndex, track in enumerate(cue.tracks):
+            index = track._indexes[1]
+            length = cue.getTrackLength(track)
+            file = index[1]
+            offset = index[0]
+
+            path = image.getRealPath(file.path)
+            crctask = crc.CRCAudioRipTask(path,
+                trackNumber=trackIndex + 1, trackCount=len(cue.tracks),
+                frameStart=offset * crc.FRAMES_PER_DISC_FRAME,
+                frameLength=length * crc.FRAMES_PER_DISC_FRAME)
+            self.addTask(crctask)
+
+    def stop(self):
+        self.crcs = [t.crc for t in self.tasks]
+        MultiTask.stop(self)
 
 class AudioLengthTask(task.Task):
     """

-- 
morituri packaging



More information about the pkg-multimedia-commits mailing list