mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
E-book viewer: Automatically save the current reading position every ten seconds. Prevents loss of reading position on crash/forced shutdown. Fixes #1473737 [Save page position in Viewer while open](https://bugs.launchpad.net/calibre/+bug/1473737)
This commit is contained in:
parent
9474a3ecef
commit
a9a5e39279
@ -78,12 +78,12 @@ class BookmarksMixin(object):
|
|||||||
raw = raw.decode('utf-8')
|
raw = raw.decode('utf-8')
|
||||||
self.parse_bookmarks(raw)
|
self.parse_bookmarks(raw)
|
||||||
|
|
||||||
def save_bookmarks(self, bookmarks=None):
|
def save_bookmarks(self, bookmarks=None, no_copy_to_file=False):
|
||||||
if bookmarks is None:
|
if bookmarks is None:
|
||||||
bookmarks = self.bookmarks
|
bookmarks = self.bookmarks
|
||||||
dat = self.serialize_bookmarks(bookmarks)
|
dat = self.serialize_bookmarks(bookmarks)
|
||||||
self.config['bookmarks_'+self.pathtoebook] = dat
|
self.config['bookmarks_'+self.pathtoebook] = dat
|
||||||
if self.copy_bookmarks_to_file and os.path.splitext(
|
if not no_copy_to_file and self.copy_bookmarks_to_file and os.path.splitext(
|
||||||
self.pathtoebook)[1].lower() == '.epub' and os.access(self.pathtoebook, os.W_OK):
|
self.pathtoebook)[1].lower() == '.epub' and os.access(self.pathtoebook, os.W_OK):
|
||||||
try:
|
try:
|
||||||
zf = open(self.pathtoebook, 'r+b')
|
zf = open(self.pathtoebook, 'r+b')
|
||||||
@ -93,11 +93,11 @@ class BookmarksMixin(object):
|
|||||||
BytesIO(dat.encode('utf-8')),
|
BytesIO(dat.encode('utf-8')),
|
||||||
add_missing=True)
|
add_missing=True)
|
||||||
|
|
||||||
def add_bookmark(self, bm):
|
def add_bookmark(self, bm, no_copy_to_file=False):
|
||||||
self.bookmarks = [x for x in self.bookmarks if x['title'] !=
|
self.bookmarks = [x for x in self.bookmarks if x['title'] !=
|
||||||
bm['title']]
|
bm['title']]
|
||||||
self.bookmarks.append(bm)
|
self.bookmarks.append(bm)
|
||||||
self.save_bookmarks()
|
self.save_bookmarks(no_copy_to_file=no_copy_to_file)
|
||||||
|
|
||||||
def set_bookmarks(self, bookmarks):
|
def set_bookmarks(self, bookmarks):
|
||||||
self.bookmarks = bookmarks
|
self.bookmarks = bookmarks
|
||||||
|
@ -74,6 +74,7 @@ class EbookViewer(MainWindow):
|
|||||||
'into pages like a paper book')
|
'into pages like a paper book')
|
||||||
PAGED_MODE_TT = _('Switch to flow mode - where the text is not broken up '
|
PAGED_MODE_TT = _('Switch to flow mode - where the text is not broken up '
|
||||||
'into pages')
|
'into pages')
|
||||||
|
AUTOSAVE_INTERVAL = 10 # seconds
|
||||||
|
|
||||||
def __init__(self, pathtoebook=None, debug_javascript=False, open_at=None,
|
def __init__(self, pathtoebook=None, debug_javascript=False, open_at=None,
|
||||||
start_in_fullscreen=False):
|
start_in_fullscreen=False):
|
||||||
@ -96,7 +97,11 @@ class EbookViewer(MainWindow):
|
|||||||
self.was_maximized = False
|
self.was_maximized = False
|
||||||
self.page_position_on_footnote_toggle = []
|
self.page_position_on_footnote_toggle = []
|
||||||
self.read_settings()
|
self.read_settings()
|
||||||
|
self.autosave_timer = t = QTimer(self)
|
||||||
|
t.setInterval(self.AUTOSAVE_INTERVAL * 1000), t.setSingleShot(True)
|
||||||
|
t.timeout.connect(self.autosave)
|
||||||
self.pos.value_changed.connect(self.update_pos_label)
|
self.pos.value_changed.connect(self.update_pos_label)
|
||||||
|
self.pos.value_changed.connect(self.autosave_timer.start)
|
||||||
self.pos.setMinimumWidth(150)
|
self.pos.setMinimumWidth(150)
|
||||||
self.setFocusPolicy(Qt.StrongFocus)
|
self.setFocusPolicy(Qt.StrongFocus)
|
||||||
self.view.set_manager(self)
|
self.view.set_manager(self)
|
||||||
@ -783,6 +788,9 @@ class EbookViewer(MainWindow):
|
|||||||
self.set_bookmarks(self.iterator.bookmarks)
|
self.set_bookmarks(self.iterator.bookmarks)
|
||||||
self.bookmarks.set_current_bookmark(bm)
|
self.bookmarks.set_current_bookmark(bm)
|
||||||
|
|
||||||
|
def autosave(self):
|
||||||
|
self.save_current_position(no_copy_to_file=True)
|
||||||
|
|
||||||
def bookmarks_edited(self, bookmarks):
|
def bookmarks_edited(self, bookmarks):
|
||||||
self.build_bookmarks_menu(bookmarks)
|
self.build_bookmarks_menu(bookmarks)
|
||||||
self.iterator.set_bookmarks(bookmarks)
|
self.iterator.set_bookmarks(bookmarks)
|
||||||
@ -816,12 +824,12 @@ class EbookViewer(MainWindow):
|
|||||||
bm['title'] = 'calibre_current_page_bookmark'
|
bm['title'] = 'calibre_current_page_bookmark'
|
||||||
return bm
|
return bm
|
||||||
|
|
||||||
def save_current_position(self):
|
def save_current_position(self, no_copy_to_file=False):
|
||||||
if not self.view.document.remember_current_page:
|
if not self.view.document.remember_current_page:
|
||||||
return
|
return
|
||||||
if hasattr(self, 'current_index'):
|
if hasattr(self, 'current_index'):
|
||||||
try:
|
try:
|
||||||
self.iterator.add_bookmark(self.current_page_bookmark)
|
self.iterator.add_bookmark(self.current_page_bookmark, no_copy_to_file=no_copy_to_file)
|
||||||
except:
|
except:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user