From 8f3fff04e31b3046dde8a30ec0fa3c9f6b1e49c3 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 20 Nov 2011 08:13:11 +0530 Subject: [PATCH] Have downloaded periodicals recognized when transferred via USB to the Kindle Fire --- src/calibre/ebooks/mobi/writer2/main.py | 46 +++++++++++++------------ 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/src/calibre/ebooks/mobi/writer2/main.py b/src/calibre/ebooks/mobi/writer2/main.py index 655aa12c9e..760b444cd3 100644 --- a/src/calibre/ebooks/mobi/writer2/main.py +++ b/src/calibre/ebooks/mobi/writer2/main.py @@ -302,7 +302,19 @@ class MobiWriter(object): def generate_record0(self): # MOBI header {{{ metadata = self.oeb.metadata - exth = self.build_exth() + bt = 0x002 + if self.primary_index_record_idx is not None: + if False and self.indexer.is_flat_periodical: + # Disabled as setting this to 0x102 causes the Kindle to not + # auto archive the issues + bt = 0x102 + elif self.indexer.is_periodical: + # If you change this, remember to change the cdetype in the EXTH + # header as well + bt = {'newspaper':0x101}.get(self.publication_type, 0x103) + + + exth = self.build_exth(bt) first_image_record = None if self.image_records: first_image_record = len(self.records) @@ -351,17 +363,6 @@ class MobiWriter(object): # 0x10 - 0x13 : UID # 0x14 - 0x17 : Generator version - bt = 0x002 - if self.primary_index_record_idx is not None: - if False and self.indexer.is_flat_periodical: - # Disabled as setting this to 0x102 causes the Kindle to not - # auto archive the issues - bt = 0x102 - elif self.indexer.is_periodical: - # If you change this, remember to change the cdetype in the EXTH - # header as well - bt = {'newspaper':0x101}.get(self.publication_type, 0x103) - record0.write(pack(b'>IIIII', 0xe8, bt, 65001, uid, 6)) @@ -479,7 +480,7 @@ class MobiWriter(object): self.records[0] = align_block(record0) # }}} - def build_exth(self): # EXTH Header {{{ + def build_exth(self, mobi_doctype): # EXTH Header {{{ oeb = self.oeb exth = StringIO() nrecs = 0 @@ -535,16 +536,17 @@ class MobiWriter(object): nrecs += 1 # Write cdetype - if not self.is_periodical and not self.opts.share_not_sync: - exth.write(pack(b'>II', 501, 12)) - exth.write(b'EBOK') - nrecs += 1 + if not self.is_periodical: + if not self.opts.share_not_sync: + exth.write(pack(b'>II', 501, 12)) + exth.write(b'EBOK') + nrecs += 1 else: - # Should be b'NWPR' for doc type of 0x101 and b'MAGZ' for doctype - # of 0x103 but the old writer didn't write them, and I dont know - # what it should be for type 0x102 (b'BLOG'?) so write nothing - # instead - pass + ids = {0x101:b'NWPR', 0x103:b'MAGZ'}.get(mobi_doctype, None) + if ids: + exth.write(pack(b'>II', 501, 12)) + exth.write(ids) + nrecs += 1 # Add a publication date entry if oeb.metadata['date']: