From 9ade743d63575c1da83ac5829f0abe561a2cd363 Mon Sep 17 00:00:00 2001 From: JoeLametta Date: Sun, 29 Nov 2015 16:25:38 +0100 Subject: [PATCH] Various short bugfixes thomasvs/morituri#139 --- morituri/common/checksum.py | 10 ++++++---- morituri/common/program.py | 2 +- morituri/image/image.py | 17 ++++++++++++++++- morituri/rip/image.py | 2 ++ 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/morituri/common/checksum.py b/morituri/common/checksum.py index e45550a..6fd60ad 100644 --- a/morituri/common/checksum.py +++ b/morituri/common/checksum.py @@ -311,16 +311,18 @@ class AccurateRipChecksumTask(ChecksumTask): self.debug('skipping frame %d', self._discFrameCounter) return checksum + # self._bytes is updated after do_checksum_buffer + factor = self._bytes / 4 + 1 values = struct.unpack("<%dI" % (len(buf) / 4), buf) - for i, value in enumerate(values): - # self._bytes is updated after do_checksum_buffer - checksum += (self._bytes / 4 + i + 1) * value - checksum &= 0xFFFFFFFF + for value in values: + checksum += factor * value + factor += 1 # offset = self._bytes / 4 + i + 1 # if offset % common.SAMPLES_PER_FRAME == 0: # print 'frame %d, ends before %d, last value %08x, CRC %08x' % ( # offset / common.SAMPLES_PER_FRAME, offset, value, sum) + checksum &= 0xFFFFFFFF return checksum diff --git a/morituri/common/program.py b/morituri/common/program.py index 7dc8da1..96633c2 100644 --- a/morituri/common/program.py +++ b/morituri/common/program.py @@ -479,7 +479,7 @@ class Program(log.Loggable): # gst-python 0.10.15.1 does not handle unicode -> utf8 string # conversion # see http://bugzilla.gnome.org/show_bug.cgi?id=584445 - if self.metadata and self.metadata.various: + if self.metadata and not self.metadata.various: ret["album-artist"] = albumArtist.encode('utf-8') ret[gst.TAG_ARTIST] = trackArtist.encode('utf-8') ret[gst.TAG_TITLE] = title.encode('utf-8') diff --git a/morituri/image/image.py b/morituri/image/image.py index 5d16f3a..1a4da5b 100644 --- a/morituri/image/image.py +++ b/morituri/image/image.py @@ -79,7 +79,10 @@ class Image(object, log.Loggable): # CD's have a standard lead-in time of 2 seconds; # checksums that use it should add it there - offset = self.cue.table.tracks[0].getIndex(1).relative + if verify.lengths.has_key(0): + offset = verify.lengths[0] + else: + offset = self.cue.table.tracks[0].getIndex(1).relative tracks = [] @@ -211,6 +214,18 @@ class ImageVerifyTask(log.Loggable, task.MultiSeparateTask): self._tasks = [] self.lengths = {} + try: + htoa = cue.table.tracks[0].indexes[0] + track = cue.table.tracks[0] + path = image.getRealPath(htoa.path) + assert type(path) is unicode, "%r is not unicode" % path + self.debug('schedule scan of audio length of %r', path) + taskk = AudioLengthTask(path) + self.addTask(taskk) + self._tasks.append((0, track, taskk)) + except (KeyError, IndexError): + self.debug('no htoa track') + for trackIndex, track in enumerate(cue.table.tracks): self.debug('verifying track %d', trackIndex + 1) index = track.indexes[1] diff --git a/morituri/rip/image.py b/morituri/rip/image.py index 67f2d4c..d611342 100644 --- a/morituri/rip/image.py +++ b/morituri/rip/image.py @@ -134,6 +134,8 @@ class Retag(logcommand.LogCommand): print 'Not in MusicBrainz database, skipping' continue + prog.metadata.discid = mbdiscid + # FIXME: this feels like we're poking at internals. prog.cuePath = arg prog.result = result.RipResult()