From 049496a8b1570df82204f9fd49bf56a6460c1744 Mon Sep 17 00:00:00 2001 From: Thomas Vander Stichele Date: Tue, 5 May 2009 22:40:26 +0000 Subject: [PATCH] * morituri/image/toc.py: * morituri/test/test_image_toc.py: * morituri/test/test_program_cdrdao.py: After careful vetting, fix up the expected values after toc parsing. Fix (untested) INDEX handling. Fix handling of START. --- ChangeLog | 8 ++++++++ morituri/image/toc.py | 30 ++++++++++++++++++++-------- morituri/test/test_image_toc.py | 11 ++++++---- morituri/test/test_program_cdrdao.py | 2 +- 4 files changed, 38 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6ef7f81..db89e54 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2009-05-06 Thomas Vander Stichele + + * morituri/image/toc.py: + * morituri/test/test_image_toc.py: + * morituri/test/test_program_cdrdao.py: + After careful vetting, fix up the expected values after toc parsing. + Fix (untested) INDEX handling. Fix handling of START. + 2009-05-05 Thomas Vander Stichele * morituri/image/table.py: diff --git a/morituri/image/toc.py b/morituri/image/toc.py index 879e5d3..6a9592e 100644 --- a/morituri/image/toc.py +++ b/morituri/image/toc.py @@ -100,16 +100,20 @@ class TocFile(object, log.Loggable): if m: state = 'TRACK' - # handle index 1 of previous track, if any + # set index 1 of previous track if there was one, using + # pregapLength if applicable if currentTrack: currentTrack.index(1, path=currentFile.path, relative=currentOffset + pregapLength, counter=counter) + self.debug('track %d, added index %r', + currentTrack.number, currentTrack.getIndex(1)) trackNumber += 1 currentOffset += currentLength currentLength = 0 indexNumber = 1 trackMode = m.group('mode') + pregapLength = 0 # FIXME: track mode currentTrack = table.ITTrack(trackNumber) @@ -153,24 +157,34 @@ class TocFile(object, log.Loggable): length = common.msfToFrames(m.group('length')) currentTrack.index(0, path=currentFile.path, - relative=currentOffset - length, counter=counter) - #currentLength += length + relative=currentOffset, counter=counter) + self.debug('track %d, added index %r', + currentTrack.number, currentTrack.getIndex(0)) + # store the pregapLength to add it when we index 1 for this + # track on the next iteration pregapLength = length - # look for INDEX lines + # look for INDEX lines m = _INDEX_RE.search(line) if m: if not currentTrack: self.message(number, 'INDEX without preceding TRACK') - indexNumber += 1 - offset = common.msfToFrames(m.group('offset')) - currentTrack.index(indexNumber, path=currentFile.path, - relative=offset, counter=counter) + print 'ouch' + continue + + indexNumber += 1 + offset = common.msfToFrames(m.group('offset')) + currentTrack.index(indexNumber, path=currentFile.path, + relative=offset, counter=counter) + self.debug('track %d, added index %r', + currentTrack.number, currentTrack.getIndex(indexNumber)) # handle index 1 of final track, if any if currentTrack: currentTrack.index(1, path=currentFile.path, relative=currentOffset + pregapLength, counter=counter) + self.debug('track %d, added index %r', + currentTrack.number, currentTrack.getIndex(1)) def message(self, number, message): """ diff --git a/morituri/test/test_image_toc.py b/morituri/test/test_image_toc.py index 1c9971a..535c964 100644 --- a/morituri/test/test_image_toc.py +++ b/morituri/test/test_image_toc.py @@ -22,7 +22,8 @@ class CureTestCase(unittest.TestCase): self.assertEquals(self.toc.getTrackLength(t), -1) def testIndexes(self): - # track 2, index 0 is at 06:16:45 + # track 2, index 0 is at 06:16:45 or 28245 + # track 2, index 1 is at 06:17:49 or 28324 # FIXME: cdrdao seems to get length of FILE 1 frame too many, # and START value one frame less t = self.toc.table.tracks[1] @@ -60,7 +61,7 @@ class CureTestCase(unittest.TestCase): self.toc.table.clearFiles() self._assertAbsolute(1, 1, 0) - self._assertAbsolute(2, 0, 28166) + self._assertAbsolute(2, 0, 28245) self._assertAbsolute(2, 1, 28324) self._assertAbsolute(3, 1, 46110) self._assertAbsolute(4, 1, 66767) @@ -72,7 +73,7 @@ class CureTestCase(unittest.TestCase): self._assertPath(1, 1, 'track01.wav') self._assertRelative(1, 1, 0) self._assertPath(2, 0, 'track01.wav') - self._assertAbsolute(2, 0, 28166) + self._assertRelative(2, 0, 28245) self._assertPath(2, 1, None) self._assertRelative(2, 1, None) @@ -88,7 +89,9 @@ class BlocTestCase(unittest.TestCase): def testGetTrackLength(self): t = self.toc.table.tracks[0] # first track has known length because the .toc is a single file - self.assertEquals(self.toc.getTrackLength(t), 50089) + # the length is from Track 1, Index 1 to Track 2, Index 1, so + # does not include the htoa + self.assertEquals(self.toc.getTrackLength(t), 19649) # last track has unknown length t = self.toc.table.tracks[-1] self.assertEquals(self.toc.getTrackLength(t), -1) diff --git a/morituri/test/test_program_cdrdao.py b/morituri/test/test_program_cdrdao.py index dd79ab8..7c8b5eb 100644 --- a/morituri/test/test_program_cdrdao.py +++ b/morituri/test/test_program_cdrdao.py @@ -26,5 +26,5 @@ class ParseTestCase(unittest.TestCase): for i, offset in enumerate( [0, 13864, 31921, 48332, 61733, 80961, 100219, 116291, 136188, 157504, 175275]): - track = self._parser.toc.tracks[i] + track = self._parser.table.tracks[i] self.assertEquals(track.getIndex(1).absolute, offset)