From 26def92983afae54fb6a8cc064706825d5e71c62 Mon Sep 17 00:00:00 2001 From: poire-z Date: Tue, 3 Oct 2017 00:31:14 +0200 Subject: [PATCH] credocument reader optimisation (avoid multiple TOC builds) (#3292) Avoid unnecessary work in ReaderView:onSetViewMode() and ReaderRolling:updatePos() that would result in TOC being reset and rebuilt (which can take time on books with huge TOC) during reader setup. --- frontend/apps/reader/modules/readerrolling.lua | 2 ++ frontend/apps/reader/modules/readerview.lua | 8 +++++--- frontend/document/credocument.lua | 6 +++--- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/frontend/apps/reader/modules/readerrolling.lua b/frontend/apps/reader/modules/readerrolling.lua index 3c72e65df..c000ac541 100644 --- a/frontend/apps/reader/modules/readerrolling.lua +++ b/frontend/apps/reader/modules/readerrolling.lua @@ -94,6 +94,8 @@ function ReaderRolling:init() table.insert(self.ui.postInitCallback, function() self.doc_height = self.ui.document.info.doc_height self.old_doc_height = self.doc_height + self.ui.document:_readMetadata() + self.old_page = self.ui.document.info.number_of_pages end) self.ui.menu:registerToMainMenu(self) end diff --git a/frontend/apps/reader/modules/readerview.lua b/frontend/apps/reader/modules/readerview.lua index 2e564d364..25626d0f7 100644 --- a/frontend/apps/reader/modules/readerview.lua +++ b/frontend/apps/reader/modules/readerview.lua @@ -746,9 +746,11 @@ function ReaderView:onMarginUpdate() end function ReaderView:onSetViewMode(new_mode) - self.view_mode = new_mode - self.ui.document:setViewMode(new_mode) - self.ui:handleEvent(Event:new("ChangeViewMode")) + if new_mode ~= self.view_mode then + self.view_mode = new_mode + self.ui.document:setViewMode(new_mode) + self.ui:handleEvent(Event:new("ChangeViewMode")) + end return true end diff --git a/frontend/document/credocument.lua b/frontend/document/credocument.lua index 6fc331afa..9f3623b49 100644 --- a/frontend/document/credocument.lua +++ b/frontend/document/credocument.lua @@ -96,9 +96,9 @@ function CreDocument:init() -- @TODO check the default view_mode to a global user configurable -- variable 22.12 2012 (houqp) local ok - ok, self._document = pcall(cre.newDocView, - Screen:getWidth(), Screen:getHeight(), self.PAGE_VIEW_MODE - ) + ok, self._document = pcall(cre.newDocView, Screen:getWidth(), Screen:getHeight(), + DCREREADER_VIEW_MODE == "scroll" and self.SCROLL_VIEW_MODE or self.PAGE_VIEW_MODE + ) -- this mode must be the same as the default one set as ReaderView.view_mode if not ok then error(self._document) -- will contain error message end