From 38808d490271c0afc62000b1977e904c21bdc995 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 4 Aug 2011 12:13:38 -0600 Subject: [PATCH] ... --- src/calibre/ebooks/mobi/debug.py | 8 +++++--- src/calibre/ebooks/mobi/writer2/indexer.py | 3 ++- src/calibre/ebooks/mobi/writer2/main.py | 10 ++++++---- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/calibre/ebooks/mobi/debug.py b/src/calibre/ebooks/mobi/debug.py index fb1b92cd42..e038ffa63d 100644 --- a/src/calibre/ebooks/mobi/debug.py +++ b/src/calibre/ebooks/mobi/debug.py @@ -320,7 +320,7 @@ class MOBIHeader(object): # {{{ self.exth = EXTHHeader(self.raw[self.exth_offset:]) self.end_of_exth = self.exth_offset + self.exth.length - self.bytes_after_exth = self.fullname_offset - self.end_of_exth + self.bytes_after_exth = self.raw[self.end_of_exth:self.fullname_offset] def __str__(self): ans = ['*'*20 + ' MOBI Header '+ '*'*20] @@ -386,7 +386,9 @@ class MOBIHeader(object): # {{{ if self.has_exth: ans += '\n\n' + str(self.exth) - ans += '\n\nBytes after EXTH: %d'%self.bytes_after_exth + ans += '\n\nBytes after EXTH (%d bytes): %s'%( + len(self.bytes_after_exth), + format_bytes(self.bytes_after_exth)) ans += '\nNumber of bytes after full name: %d' % (len(self.raw) - (self.fullname_offset + self.fullname_length)) @@ -588,7 +590,7 @@ class IndexHeader(object): # {{{ def __str__(self): - ans = ['*'*20 + ' Index Header '+ '*'*20] + ans = ['*'*20 + ' Index Header (%d bytes)'%len(self.record.raw)+ '*'*20] a = ans.append def u(w): a('Unknown: %r (%d bytes) (All zeros: %r)'%(w, diff --git a/src/calibre/ebooks/mobi/writer2/indexer.py b/src/calibre/ebooks/mobi/writer2/indexer.py index 04bd85aff5..2238601a72 100644 --- a/src/calibre/ebooks/mobi/writer2/indexer.py +++ b/src/calibre/ebooks/mobi/writer2/indexer.py @@ -246,7 +246,8 @@ class SecondaryIndexEntry(IndexEntry): tag = self.INDEX_MAP[index] # The values for this index entry - self.secondary = [len(self.INDEX_MAP) if tag == min( + # I dont know what the 5 means, it is not the number of entries + self.secondary = [5 if tag == min( self.INDEX_MAP.itervalues()) else 0, 0, tag] @property diff --git a/src/calibre/ebooks/mobi/writer2/main.py b/src/calibre/ebooks/mobi/writer2/main.py index cc03430144..ef6fc3485e 100644 --- a/src/calibre/ebooks/mobi/writer2/main.py +++ b/src/calibre/ebooks/mobi/writer2/main.py @@ -334,7 +334,9 @@ class MobiWriter(object): if self.indexer.is_flat_periodical: bt = 0x102 elif self.indexer.is_periodical: - bt = 0x101 + # If you change this, remember to change the cdetype in the EXTH + # header as well + bt = 0x103 record0.write(pack(b'>IIIII', 0xe8, bt, 65001, uid, 6)) @@ -509,7 +511,9 @@ class MobiWriter(object): # Write cdetype if self.is_periodical: - data = b'NWPR' + # If you set the book type header field to 0x101 use NWPR here if + # you use 0x103 use MAGZ + data = b'MAGZ' else: data = b'EBOK' exth.write(pack(b'>II', 501, len(data)+8)) @@ -533,8 +537,6 @@ class MobiWriter(object): exth.write(pack(b'>II', EXTH_CODES['lastupdatetime'], len(datestr) + 8)) exth.write(datestr) nrecs += 1 - exth.write(pack(b'>III', EXTH_CODES['versionnumber'], 12, 7)) - nrecs += 1 if self.is_periodical: # Pretend to be amazon's super secret periodical generator