From 9ec2940174253d4780b066fc797f516e9f51dfbc Mon Sep 17 00:00:00 2001 From: GRiker Date: Sat, 27 Mar 2010 05:04:06 -0700 Subject: [PATCH] GwR revisions --- src/calibre/ebooks/mobi/reader.py | 38 ++++++++++++++++++------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/src/calibre/ebooks/mobi/reader.py b/src/calibre/ebooks/mobi/reader.py index 2260b981b6..f2856da4cf 100644 --- a/src/calibre/ebooks/mobi/reader.py +++ b/src/calibre/ebooks/mobi/reader.py @@ -127,7 +127,6 @@ class BookHeader(object): self.length, self.type, self.codepage, self.unique_id, \ self.version = struct.unpack('>LLLLL', raw[20:40]) - try: self.codec = { 1252: 'cp1252', @@ -154,24 +153,31 @@ class BookHeader(object): sublangid = (langcode >> 10) & 0xFF self.language = main_language.get(langid, 'ENGLISH') self.sublanguage = sub_language.get(sublangid, 'NEUTRAL') - self.mobi_version = struct.unpack('>I', raw[0x68:0x6c])[0] - self.first_image_index = struct.unpack('>L', raw[0x6c:0x6c + 4])[0] - self.exth_flag, = struct.unpack('>L', raw[0x80:0x84]) - self.exth = None - if not isinstance(self.title, unicode): - self.title = self.title.decode(self.codec, 'replace') - if self.exth_flag & 0x40: - try: - self.exth = EXTHHeader(raw[16 + self.length:], self.codec, self.title) - self.exth.mi.uid = self.unique_id + if ident == 'TEXTREAD': + self.mobi_version = 1 + self.first_image_index = -1 + self.exth_flag = 0 + self.exth = None + else: + self.mobi_version = struct.unpack('>I', raw[0x68:0x6c])[0] + self.first_image_index = struct.unpack('>L', raw[0x6c:0x6c + 4])[0] + self.exth_flag, = struct.unpack('>L', raw[0x80:0x84]) + + self.exth = None + if not isinstance(self.title, unicode): + self.title = self.title.decode(self.codec, 'replace') + if self.exth_flag & 0x40: try: - self.exth.mi.language = mobi2iana(langid, sublangid) + self.exth = EXTHHeader(raw[16 + self.length:], self.codec, self.title) + self.exth.mi.uid = self.unique_id + try: + self.exth.mi.language = mobi2iana(langid, sublangid) + except: + self.log.exception("'%s': Unknown language code" % getattr(stream, 'name', 'Unnamed stream')) except: - self.log.exception("'%s': Unknown language code" % getattr(stream, 'name', 'Unnamed stream')) - except: - self.log.exception("'%s': Invalid EXTH header" % getattr(stream, 'name', 'Unnamed stream')) - self.exth_flag = 0 + self.log.exception("'%s': Invalid EXTH header" % getattr(stream, 'name', 'Unnamed stream')) + self.exth_flag = 0 class MetadataHeader(BookHeader):