From b8792909b1e9bad1c204bfc81b2f2c120989578c Mon Sep 17 00:00:00 2001 From: GRiker Date: Fri, 5 Mar 2010 11:15:50 -0800 Subject: [PATCH 1/2] GwR MAGIC constants --- src/calibre/devices/kindle/driver.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/calibre/devices/kindle/driver.py b/src/calibre/devices/kindle/driver.py index 8bdfec8ed8..07816e05c4 100644 --- a/src/calibre/devices/kindle/driver.py +++ b/src/calibre/devices/kindle/driver.py @@ -187,6 +187,7 @@ class Bookmark(): from calibre.ebooks.metadata.mobi import StreamSlicer user_notes = {} if self.bookmark_extension == 'mbp': + MAGIC_MOBI_CONSTANT with open(path,'rb') as f: stream = StringIO(f.read()) data = StreamSlicer(stream) @@ -194,7 +195,7 @@ class Bookmark(): bpar_offset, = unpack('>I', data[0x4e:0x52]) lrlo = bpar_offset + 0x0c self.last_read = int(unpack('>I', data[lrlo:lrlo+4])[0]) - self.last_read_location = self.last_read/150 + 1 + self.last_read_location = self.last_read/MAGIC_MOBI_CONSTANT + 1 entries, = unpack('>I', data[0x4a:0x4e]) # Store the annotations/locations @@ -206,7 +207,6 @@ class Bookmark(): # Walk bookmark entries #print " --- %s --- " % path - #print " last_read_location: %d" % self.magicKindleLocationCalculator(last_read_location) current_entry = 1 sig = data[eo:eo+4] previous_block = None @@ -231,7 +231,7 @@ class Bookmark(): text = data[eo+8:eo+8+rec_len].decode('utf-16-be') if entry_type: - displayed_location = location/150 + 1 + displayed_location = location/MAGIC_MOBI_CONSTANT + 1 user_notes[location] = dict(id=self.id, displayed_location=displayed_location, type=entry_type, @@ -258,7 +258,7 @@ class Bookmark(): # be the same - cheat by nudging -1 # Skip bookmark for last_read_location if end_loc != self.last_read: - displayed_location = end_loc/150 + 1 + displayed_location = end_loc/MAGIC_MOBI_CONSTANT + 1 user_notes[end_loc - 1] = dict(id=self.id, displayed_location=displayed_location, type='Bookmark', @@ -269,12 +269,13 @@ class Bookmark(): elif self.bookmark_extension == 'tan': # TAN bookmarks + MAGIC_TOPAZ_CONSTANT = 33.33 self.timestamp = os.path.getmtime(path) with open(path,'rb') as f: stream = StringIO(f.read()) data = StreamSlicer(stream) self.last_read = int(unpack('>I', data[5:9])[0]) - self.last_read_location = self.last_read/33.33 + 1 + self.last_read_location = self.last_read/MAGIC_TOPAZ_CONSTANT + 1 entries, = unpack('>I', data[9:13]) current_entry = 0 e_base = 0x0d @@ -296,7 +297,7 @@ class Bookmark(): if self.book_format in ['tpz','azw1']: # *** This needs fine-tuning - displayed_location = location/33.33 + 1 + displayed_location = location/MAGIC_TOPAZ_CONSTANT + 1 elif self.book_format == 'pdf': # *** This needs testing displayed_location = location From 978940d2cb3d23a2effcab2394960ba56fb7e094 Mon Sep 17 00:00:00 2001 From: GRiker Date: Fri, 5 Mar 2010 12:09:24 -0800 Subject: [PATCH 2/2] GwR fix for mbp annotation parsing --- src/calibre/devices/kindle/driver.py | 11 +++++------ src/calibre/library/catalog.py | 4 ---- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/calibre/devices/kindle/driver.py b/src/calibre/devices/kindle/driver.py index 8714bb87da..b1ec52d214 100644 --- a/src/calibre/devices/kindle/driver.py +++ b/src/calibre/devices/kindle/driver.py @@ -185,7 +185,7 @@ class Bookmark(): from calibre.ebooks.metadata.mobi import StreamSlicer user_notes = {} if self.bookmark_extension == 'mbp': - MAGIC_MOBI_CONSTANT + MAGIC_MOBI_CONSTANT = 150 with open(path,'rb') as f: stream = StringIO(f.read()) data = StreamSlicer(stream) @@ -234,9 +234,6 @@ class Bookmark(): displayed_location=displayed_location, type=entry_type, text=text) - #print " %2d: %s %s" % (current_entry, entry_type,'at %d' % location if location else '') - #if current_block == 'text_block': - #self.textdump(text) eo += rec_len + 8 current_entry += 1 @@ -246,11 +243,13 @@ class Bookmark(): while sig == 'BKMK': # Fix start location for Highlights using BKMK data end_loc, = unpack('>I', data[eo+0x10:eo+0x14]) - if end_loc in user_notes and user_notes[end_loc]['type'] != 'Note': + if end_loc in user_notes and user_notes[end_loc]['type'] == 'Highlight': start, = unpack('>I', data[eo+8:eo+12]) user_notes[start] = user_notes[end_loc] user_notes.pop(end_loc) - #print "changing start location of %d to %d" % (end_loc,start) + elif end_loc in user_notes and user_notes[end_loc]['type'] == 'Note': + # Skip duplicate bookmarks for notes + pass else: # If a bookmark coincides with a user annotation, the locs could # be the same - cheat by nudging -1 diff --git a/src/calibre/library/catalog.py b/src/calibre/library/catalog.py index 64523a87d5..78b50dda58 100644 --- a/src/calibre/library/catalog.py +++ b/src/calibre/library/catalog.py @@ -13,7 +13,6 @@ from calibre.customize import CatalogPlugin from calibre.customize.conversion import OptionRecommendation, DummyReporter from calibre.ebooks.BeautifulSoup import BeautifulSoup, BeautifulStoneSoup, Tag, NavigableString from calibre.ptempfile import PersistentTemporaryDirectory -from calibre.utils.logging import Log from calibre.utils.date import isoformat, now as nowf FIELDS = ['all', 'author_sort', 'authors', 'comments', @@ -3929,9 +3928,6 @@ class EPUB_MOBI(CatalogPlugin): return result.renderContents(encoding=None) - def magicKindleLocationCalculator(self,offset): - return offset/150 + 1 - def processSpecialTags(self, tags, this_title, opts): tag_list = [] for tag in tags: