From db2336440f8718591a2ad92fea7efbde4adf8bcb Mon Sep 17 00:00:00 2001 From: hius07 <62179190+hius07@users.noreply.github.com> Date: Sun, 18 Feb 2024 08:06:50 +0200 Subject: [PATCH] Alt status bar: custom metadata support (#11463) --- .../reader/modules/readercoptlistener.lua | 21 +++++++++++++++++++ frontend/apps/reader/modules/readerfont.lua | 7 ++----- .../apps/reader/modules/readerrolling.lua | 12 ++--------- frontend/document/credocument.lua | 15 +++++++++++++ 4 files changed, 40 insertions(+), 15 deletions(-) diff --git a/frontend/apps/reader/modules/readercoptlistener.lua b/frontend/apps/reader/modules/readercoptlistener.lua index 75f27218c..02c718440 100644 --- a/frontend/apps/reader/modules/readercoptlistener.lua +++ b/frontend/apps/reader/modules/readercoptlistener.lua @@ -64,6 +64,27 @@ function ReaderCoptListener:onReadSettings(config) self:rescheduleHeaderRefreshIfNeeded() -- schedule (or not) first refresh end +function ReaderCoptListener:onReaderReady() + -- custom metadata support for alt status bar and cre synthetic cover + for prop_key in pairs(self.document.prop_to_cre_prop) do + local orig_prop_value = self.ui.doc_settings:readSetting(prop_key) + local custom_prop_key = prop_key == "title" and "display_title" or prop_key + local custom_prop_value = self.ui.doc_props[custom_prop_key] + if custom_prop_value ~= orig_prop_value then + self.document:setAltDocumentProp(prop_key, custom_prop_value) + end + end +end + +function ReaderCoptListener:onBookMetadataChanged(prop_updated) + -- custom metadata support for alt status bar and cre synthetic cover + local prop_key = prop_updated and prop_updated.metadata_key_updated + if prop_key and self.document.prop_to_cre_prop[prop_key] then + self.document:setAltDocumentProp(prop_key, prop_updated.doc_props[prop_key]) + self:updateHeader() + end +end + function ReaderCoptListener:onConfigChange(option_name, option_value) -- font_size and line_spacing are historically and sadly shared by both mupdf and cre reader modules, -- but fortunately they can be distinguished by their different ranges diff --git a/frontend/apps/reader/modules/readerfont.lua b/frontend/apps/reader/modules/readerfont.lua index ac72bd32b..741185a9c 100644 --- a/frontend/apps/reader/modules/readerfont.lua +++ b/frontend/apps/reader/modules/readerfont.lua @@ -171,10 +171,8 @@ function ReaderFont:onReadSettings(config) or self.ui.document.default_font self.ui.document:setFontFace(self.font_face) - self.header_font_face = config:readSetting("header_font_face") - or G_reader_settings:readSetting("header_font") - or self.ui.document.header_font - self.ui.document:setHeaderFont(self.header_font_face) + local header_font = G_reader_settings:readSetting("header_font") or self.ui.document.header_font + self.ui.document:setHeaderFont(header_font) self.ui.document:setFontSize(Screen:scaleBySize(self.configurable.font_size)) self.ui.document:setFontBaseWeight(self.configurable.font_base_weight) @@ -311,7 +309,6 @@ end function ReaderFont:onSaveSettings() self.ui.doc_settings:saveSetting("font_face", self.font_face) - self.ui.doc_settings:saveSetting("header_font_face", self.header_font_face) self.ui.doc_settings:saveSetting("font_family_fonts", self.font_family_fonts) end diff --git a/frontend/apps/reader/modules/readerrolling.lua b/frontend/apps/reader/modules/readerrolling.lua index 3bcd60332..91270f46f 100644 --- a/frontend/apps/reader/modules/readerrolling.lua +++ b/frontend/apps/reader/modules/readerrolling.lua @@ -313,8 +313,6 @@ function ReaderRolling:onReadSettings(config) end) end --- in scroll mode percent_finished must be save before close document --- we cannot do it in onSaveSettings() because getLastPercent() uses self.ui.document function ReaderRolling:onCloseDocument() self:tearDownRerenderingAutomation() -- Unschedule anything that might still somehow be... @@ -328,6 +326,7 @@ function ReaderRolling:onCloseDocument() UIManager:unschedule(self.onUpdatePos) self.current_header_height = nil -- show unload progress bar at top + -- we cannot do it in onSaveSettings() because getLastPercent() uses self.ui.document self.ui.doc_settings:saveSetting("percent_finished", self:getLastPercent()) local cache_file_path = self.ui.document:getCacheFilePath() -- nil if no cache file @@ -375,15 +374,8 @@ function ReaderRolling:onCheckDomStyleCoherence() end function ReaderRolling:onSaveSettings() - -- remove last_percent config since its deprecated - self.ui.doc_settings:delSetting("last_percent") + self.ui.doc_settings:delSetting("last_percent") -- deprecated self.ui.doc_settings:saveSetting("last_xpointer", self.xpointer) - -- in scrolling mode, the document may already be closed, - -- so we have to check the condition to avoid crash function self:getLastPercent() - -- that uses self.ui.document - if self.ui.document then - self.ui.doc_settings:saveSetting("percent_finished", self:getLastPercent()) - end self.ui.doc_settings:saveSetting("hide_nonlinear_flows", self.hide_nonlinear_flows) self.ui.doc_settings:saveSetting("partial_rerendering", self.partial_rerendering) end diff --git a/frontend/document/credocument.lua b/frontend/document/credocument.lua index 82d9952ff..723056584 100644 --- a/frontend/document/credocument.lua +++ b/frontend/document/credocument.lua @@ -33,6 +33,13 @@ local CreDocument = Document:extend{ monospace_font = "Droid Sans Mono", header_font = "Noto Sans", + prop_to_cre_prop = { -- see cre lvtinydom.h + title = "doc.title", + authors = "doc.authors", + series = "doc.series.name", + series_index = "doc.series.number", + }, + -- Reasons for the fallback font ordering: -- - Noto Sans CJK SC before FreeSans/Serif, as it has nice and larger -- symbol glyphs for Wikipedia EPUB headings than both Free fonts) @@ -216,6 +223,14 @@ function CreDocument:getDocumentProps() return self._document:getDocumentProps() end +function CreDocument:setAltDocumentProp(prop, value) + logger.dbg("CreDocument: set alt document prop", prop, value) + if type(value) == "number" then -- series index + value = tostring(value) + end + self._document:setAltDocumentProp(self.prop_to_cre_prop[prop], value) +end + function CreDocument:setupDefaultView() if self.loaded then -- Don't apply defaults if the document has already been loaded