mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-06-23 15:30:45 -04:00
Kobo driver: Update to handle changes to annotation processing in newer Kobo firmware.
The changed contentIds for kepubs meant not all annotations were being retrieved. This also meant that some annotations would be out of order. Fixes #1319819 [Annotations for kepubs now use different contentIds](https://bugs.launchpad.net/calibre/+bug/1319819)
This commit is contained in:
parent
9e0c91f4ec
commit
78bcc6eac8
@ -41,30 +41,48 @@ class Bookmark(): # {{{
|
|||||||
cursor = connection.cursor()
|
cursor = connection.cursor()
|
||||||
t = (self.contentid,)
|
t = (self.contentid,)
|
||||||
|
|
||||||
cursor.execute('select bm.bookmarkid, bm.contentid, bm.volumeid, '
|
kepub_chapter_query = (
|
||||||
'bm.text, bm.annotation, bm.ChapterProgress, '
|
'SELECT Title, volumeIndex '
|
||||||
'bm.StartContainerChildIndex, bm.StartOffset, c.BookTitle, '
|
'FROM content '
|
||||||
'c.TITLE, c.volumeIndex, c.___NumPages '
|
'WHERE ContentID LIKE ? '
|
||||||
'from Bookmark bm inner join Content c on '
|
)
|
||||||
'bm.contentid = c.contentid and '
|
bookmark_query = ('SELECT bm.bookmarkid, bm.ContentID, bm.text, bm.annotation, '
|
||||||
'bm.volumeid = ? order by bm.volumeid, bm.chapterprogress', t)
|
'bm.ChapterProgress, bm.StartContainerChildIndex, bm.StartOffset, '
|
||||||
|
'c.BookTitle, c.TITLE, c.volumeIndex, c.MimeType '
|
||||||
|
'FROM Bookmark bm LEFT OUTER JOIN Content c ON '
|
||||||
|
'c.ContentID = bm.ContentID '
|
||||||
|
'WHERE bm.Hidden = "false" '
|
||||||
|
'AND bm.volumeid = ? '
|
||||||
|
'ORDER BY bm.ContentID, bm.chapterprogress')
|
||||||
|
cursor.execute(bookmark_query, t)
|
||||||
|
|
||||||
previous_chapter = 0
|
previous_chapter = 0
|
||||||
bm_count = 0
|
bm_count = 0
|
||||||
for row in cursor:
|
for row in cursor:
|
||||||
current_chapter = row[10]
|
current_chapter = row[9]
|
||||||
|
chapter_title = row[8]
|
||||||
|
# For kepubs on newer firmware, the title needs to come from an 899 row.
|
||||||
|
if not row[10] or row[10] == 'application/xhtml+xml' or row[10] == 'application/x-kobo-epub+zip':
|
||||||
|
cursor2 = connection.cursor()
|
||||||
|
kepub_chapter_data = ('{0}-%'.format(row[1]), )
|
||||||
|
cursor2.execute(kepub_chapter_query, kepub_chapter_data)
|
||||||
|
kepub_chapter = cursor2.fetchone()
|
||||||
|
if kepub_chapter:
|
||||||
|
chapter_title = kepub_chapter[0]
|
||||||
|
current_chapter = kepub_chapter[1]
|
||||||
|
cursor2.close
|
||||||
if previous_chapter == current_chapter:
|
if previous_chapter == current_chapter:
|
||||||
bm_count = bm_count + 1
|
bm_count = bm_count + 1
|
||||||
else:
|
else:
|
||||||
bm_count = 0
|
bm_count = 0
|
||||||
|
|
||||||
text = row[3]
|
text = row[2]
|
||||||
annotation = row[4]
|
annotation = row[3]
|
||||||
|
|
||||||
# A dog ear (bent upper right corner) is a bookmark
|
# A dog ear (bent upper right corner) is a bookmark
|
||||||
if row[6] == row[7] == 0: # StartContainerChildIndex = StartOffset = 0
|
if row[5] == row[6] == 0: # StartContainerChildIndex = StartOffset = 0
|
||||||
e_type = 'Bookmark'
|
e_type = 'Bookmark'
|
||||||
text = row[9]
|
text = row[8]
|
||||||
# highlight is text with no annotation
|
# highlight is text with no annotation
|
||||||
elif text is not None and (annotation is None or annotation == ""):
|
elif text is not None and (annotation is None or annotation == ""):
|
||||||
e_type = 'Highlight'
|
e_type = 'Highlight'
|
||||||
@ -73,19 +91,19 @@ class Bookmark(): # {{{
|
|||||||
else:
|
else:
|
||||||
e_type = 'Unknown annotation type'
|
e_type = 'Unknown annotation type'
|
||||||
|
|
||||||
note_id = row[10] + bm_count
|
note_id = current_chapter * 1000 + bm_count
|
||||||
chapter_title = row[9]
|
|
||||||
# book_title = row[8]
|
# book_title = row[8]
|
||||||
chapter_progress = min(round(float(100*row[5]),2),100)
|
chapter_progress = min(round(float(100*row[4]),2),100)
|
||||||
user_notes[note_id] = dict(id=self.id,
|
user_notes[note_id] = dict(id=self.id,
|
||||||
displayed_location=note_id,
|
displayed_location=note_id,
|
||||||
type=e_type,
|
type=e_type,
|
||||||
text=text,
|
text=text,
|
||||||
annotation=annotation,
|
annotation=annotation,
|
||||||
chapter=row[10],
|
chapter=current_chapter,
|
||||||
chapter_title=chapter_title,
|
chapter_title=chapter_title,
|
||||||
chapter_progress=chapter_progress)
|
chapter_progress=chapter_progress)
|
||||||
previous_chapter = row[10]
|
previous_chapter = current_chapter
|
||||||
# debug_print("e_type:" , e_type, '\t', 'loc: ', note_id, 'text: ', text,
|
# debug_print("e_type:" , e_type, '\t', 'loc: ', note_id, 'text: ', text,
|
||||||
# 'annotation: ', annotation, 'chapter_title: ', chapter_title,
|
# 'annotation: ', annotation, 'chapter_title: ', chapter_title,
|
||||||
# 'chapter_progress: ', chapter_progress, 'date: ')
|
# 'chapter_progress: ', chapter_progress, 'date: ')
|
||||||
|
@ -64,7 +64,7 @@ class KOBO(USBMS):
|
|||||||
gui_name = 'Kobo Reader'
|
gui_name = 'Kobo Reader'
|
||||||
description = _('Communicate with the Kobo Reader')
|
description = _('Communicate with the Kobo Reader')
|
||||||
author = 'Timothy Legge and David Forrester'
|
author = 'Timothy Legge and David Forrester'
|
||||||
version = (2, 1, 6)
|
version = (2, 1, 7)
|
||||||
|
|
||||||
dbversion = 0
|
dbversion = 0
|
||||||
fwversion = 0
|
fwversion = 0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user