[SCM] morituri/master: * examples/readtoc.py: * morituri/program/cdrdao.py (added): Move the ReadTocTask to the new cdrdao 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 8286bf9b22f3d6a101efa53dbcd8281c0c0839dd
Author: Thomas Vander Stichele <thomas (at) apestaart (dot) org>
Date: Fri May 1 18:57:28 2009 +0000
* examples/readtoc.py:
* morituri/program/cdrdao.py (added):
Move the ReadTocTask to the new cdrdao module.
diff --git a/ChangeLog b/ChangeLog
index 3ddf613..0eb76f3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2009-05-01 Thomas Vander Stichele <thomas at apestaart dot org>
+ * examples/readtoc.py:
+ * morituri/program/cdrdao.py (added):
+ Move the ReadTocTask to the new cdrdao module.
+
+2009-05-01 Thomas Vander Stichele <thomas at apestaart dot org>
+
* examples/readtrack.py:
* morituri/program/cdparanoia.py:
Move ReadTrackTask to cdparanoia module.
diff --git a/examples/readtoc.py b/examples/readtoc.py
index 4bcc47a..6e76c6f 100644
--- a/examples/readtoc.py
+++ b/examples/readtoc.py
@@ -1,192 +1,13 @@
# -*- Mode: Python -*-
# vi:si:et:sw=4:sts=4:ts=4
-import re
-import os
-import subprocess
-import tempfile
-
from morituri.common import task, log
-from morituri.image import toc
-from morituri.extern import asyncsub
-
-states = ['START', 'TRACK', 'LEADOUT', 'DONE']
-
-_ANALYZING_RE = re.compile(r'^Analyzing track (?P<track>\d+).*')
-_TRACK_RE = re.compile(r"""
- ^(?P<track>[\d\s]{2})\s+ # Track
- \w+\s+ # Mode
- \d\s+ # Flags
- \d\d:\d\d:\d\d # Start in HH:MM:FF
- \((?P<start>.+)\)\s+ # Start in frames
- \d\d:\d\d:\d\d # Length in HH:MM:FF
- \(.+\) # Length in frames
-""", re.VERBOSE)
-_LEADOUT_RE = re.compile(r"""
- ^Leadout\s
- \w+\s+ # Mode
- \d\s+ # Flags
- \d\d:\d\d:\d\d # Start in HH:MM:FF
- \((?P<start>.+)\) # Start in frames
-""", re.VERBOSE)
-
-# FIXME: handle errors
-
-class ReadTOCTask(task.Task):
- """
- I am a task that reads the TOC of a CD, including pregaps.
- """
-
- description = "Reading TOC..."
-
-
- def __init__(self):
- self._buffer = "" # accumulate characters
- self._lines = [] # accumulate lines
- self._errors = [] # accumulate error lines
- self._lineIndex = 0 # where we are
- 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.toc = None # result
-
- def start(self, runner):
- task.Task.start(self, runner)
-
- # 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", 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
-
- # find counter in LEADOUT state
- if self._buffer and self._state == 'LEADOUT':
- # split on lines that end in \r, which reset cursor to counter start
- # this misses the first one, but that's ok:
- # length 03:40:71...\n00:01:00
- times = self._buffer.split('\r')
- position = ""
- while times and len(position) != 8:
- position = times.pop()
-
- # we need both a position reported and an Analyzing line
- # to have been parsed to report progress
- if position and self._track is not None:
- frame = self._starts[self._track - 1] or 0 \
- + int(position[0:2]) * 60 * 75 \
- + int(position[3:5]) * 75 \
- + int(position[6:8])
- self.setProgress(float(frame) / self._frames)
-
- # 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.toc = toc.TOC(self._toc)
- self.toc.parse()
- os.unlink(self._toc)
-
- self.stop()
- return
-
- def _parse(self, lines):
- for line in lines:
- #print 'parsing', len(line), line
- 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
-
- m = _TRACK_RE.search(line)
- if m:
- self._tracks = int(m.group('track'))
- self._starts.append(int(m.group('start')))
- self.debug('Found track %d', self._tracks)
-
- m = _LEADOUT_RE.search(line)
- if m:
- self.debug('Found leadout line, moving to LEADOUT state')
- self._state = 'LEADOUT'
- self._frames = int(m.group('start'))
- self.debug('Found leadout at offset %r', self._frames)
- self.info('%d tracks found', self._tracks)
- return
-
-
- def _parse_LEADOUT(self, line):
- m = _ANALYZING_RE.search(line)
- if m:
- self.debug('Found analyzing line')
- track = int(m.group('track'))
- self.description = 'Analyzing track %d...' % track
- self._track = track
- #self.setProgress(float(track - 1) / self._tracks)
- #print 'analyzing', track
-
+from morituri.program import cdrdao
def main():
log.init()
runner = task.SyncRunner()
- t = ReadTOCTask()
+ t = cdrdao.ReadTOCTask()
runner.run(t)
print 'runner done', t.toc
diff --git a/examples/readtoc.py b/morituri/program/cdrdao.py
similarity index 89%
copy from examples/readtoc.py
copy to morituri/program/cdrdao.py
index 4bcc47a..0fe9280 100644
--- a/examples/readtoc.py
+++ b/morituri/program/cdrdao.py
@@ -1,6 +1,26 @@
# -*- Mode: Python -*-
# vi:si:et:sw=4:sts=4:ts=4
+# Morituri - for those about to RIP
+
+# Copyright (C) 2009 Thomas Vander Stichele
+
+# This file is part of morituri.
+#
+# morituri is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# morituri is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with morituri. If not, see <http://www.gnu.org/licenses/>.
+
+
import re
import os
import subprocess
@@ -181,17 +201,3 @@ class ReadTOCTask(task.Task):
self._track = track
#self.setProgress(float(track - 1) / self._tracks)
#print 'analyzing', track
-
-
-def main():
- log.init()
- runner = task.SyncRunner()
- t = ReadTOCTask()
- runner.run(t)
- print 'runner done', t.toc
-
- for track in t.toc.tracks:
- print track._indexes
-
-
-main()
--
morituri packaging
More information about the pkg-multimedia-commits
mailing list