From 17f07e755f861d44d0c62b0cc66facc263e2ce9d Mon Sep 17 00:00:00 2001 From: poire-z Date: Thu, 14 Mar 2019 13:59:32 +0100 Subject: [PATCH] CoverBrowser: speedup "View full size cover" It was doing a full document load to get the cover. It now does the faster "only metadata" load. Also move the trick of setting a default font in CreDocument, so that all callers of document:loadDocument(false) benefit from it. Prevent crash when no cover image is available (even if the cache says it has one, the file may have been updated and doesn't have it anymore). --- frontend/document/credocument.lua | 5 +++ .../coverbrowser.koplugin/bookinfomanager.lua | 3 -- plugins/coverbrowser.koplugin/covermenu.lua | 44 +++++++++++++------ 3 files changed, 36 insertions(+), 16 deletions(-) diff --git a/frontend/document/credocument.lua b/frontend/document/credocument.lua index 71812058e..d16e9f938 100644 --- a/frontend/document/credocument.lua +++ b/frontend/document/credocument.lua @@ -177,6 +177,11 @@ function CreDocument:loadDocument(full_document) if not self._loaded then local only_metadata = full_document == false logger.dbg("CreDocument: loading document...") + if only_metadata then + -- Setting a default font before loading document + -- actually do prevent some crashes + self:setFontFace(self.default_font) + end if self._document:loadDocument(self.file, only_metadata) then self._loaded = true logger.dbg("CreDocument: loading done.") diff --git a/plugins/coverbrowser.koplugin/bookinfomanager.lua b/plugins/coverbrowser.koplugin/bookinfomanager.lua index 44b8e170d..1f5eec5a9 100644 --- a/plugins/coverbrowser.koplugin/bookinfomanager.lua +++ b/plugins/coverbrowser.koplugin/bookinfomanager.lua @@ -391,9 +391,6 @@ function BookInfoManager:extractBookInfo(filepath, cover_specs) if document then local pages if document.loadDocument then -- needed for crengine - -- Setting a default font before loading document - -- actually do prevent some crashes - document:setFontFace(document.default_font) if not document:loadDocument(false) then -- load only metadata -- failed loading, calling other methods would segfault loaded = false diff --git a/plugins/coverbrowser.koplugin/covermenu.lua b/plugins/coverbrowser.koplugin/covermenu.lua index e9d5d9e54..f2b160307 100644 --- a/plugins/coverbrowser.koplugin/covermenu.lua +++ b/plugins/coverbrowser.koplugin/covermenu.lua @@ -1,6 +1,7 @@ local DocumentRegistry = require("document/documentregistry") local FileManagerBookInfo = require("apps/filemanager/filemanagerbookinfo") local ImageViewer = require("ui/widget/imageviewer") +local InfoMessage = require("ui/widget/infomessage") local Menu = require("ui/widget/menu") local TextViewer = require("ui/widget/textviewer") local UIManager = require("ui/uimanager") @@ -127,7 +128,6 @@ function CoverMenu:updateItems(select_number) UIManager:unschedule(self.items_update_action) self.items_update_action = nil end - local InfoMessage = require("ui/widget/infomessage") UIManager:show(InfoMessage:new{ text = _("Start-up of background extraction job failed.\nPlease restart KOReader or your device.") }) @@ -232,13 +232,22 @@ function CoverMenu:updateItems(select_number) callback = function() local document = DocumentRegistry:openDocument(file) if document then + if document.loadDocument then -- needed for crengine + document:loadDocument(false) -- load only metadata + end local cover_bb = document:getCoverPageImage() - local imgviewer = ImageViewer:new{ - image = cover_bb, - with_title_bar = false, - fullscreen = true, - } - UIManager:show(imgviewer) + if cover_bb then + local imgviewer = ImageViewer:new{ + image = cover_bb, + with_title_bar = false, + fullscreen = true, + } + UIManager:show(imgviewer) + else + UIManager:show(InfoMessage:new{ + text = _("No cover image available."), + }) + end UIManager:close(self.file_dialog) DocumentRegistry:closeDocument(file) end @@ -352,13 +361,22 @@ function CoverMenu:onHistoryMenuHold(item) callback = function() local document = DocumentRegistry:openDocument(file) if document then + if document.loadDocument then -- needed for crengine + document:loadDocument(false) -- load only metadata + end local cover_bb = document:getCoverPageImage() - local imgviewer = ImageViewer:new{ - image = cover_bb, - with_title_bar = false, - fullscreen = true, - } - UIManager:show(imgviewer) + if cover_bb then + local imgviewer = ImageViewer:new{ + image = cover_bb, + with_title_bar = false, + fullscreen = true, + } + UIManager:show(imgviewer) + else + UIManager:show(InfoMessage:new{ + text = _("No cover image available."), + }) + end UIManager:close(self.histfile_dialog) DocumentRegistry:closeDocument(file) end