[feat] Add percentage read (and other book information) to sleep message (#5121)

Add checking for escape sequences for current/total page, percentage read, and document title.
pull/5124/head
sladflob 5 years ago committed by Frans de Jonge
parent 93b6335421
commit 912e617377

@ -174,6 +174,7 @@ function Screensaver:setMessage()
end
self.input_dialog = InputDialog:new{
title = "Screensaver message",
description = _("Enter the message to be displayed by the screensaver. The following escape sequences can be used:\n %p percentage read\n %c current page number\n %t total number of pages\n %T title"),
input = screensaver_message,
buttons = {
{
@ -349,9 +350,14 @@ function Screensaver:show(event, fallback_message)
if screensaver_message == nil and prefix ~= "" then
screensaver_message = G_reader_settings:readSetting("screensaver_message")
end
local fallback = fallback_message or default_screensaver_message
if screensaver_message == nil then
screensaver_message = fallback_message or default_screensaver_message
screensaver_message = fallback
else
screensaver_message = self:expandSpecial(screensaver_message, fallback)
end
widget = InfoMessage:new{
text = screensaver_message,
readonly = true,
@ -377,6 +383,38 @@ function Screensaver:show(event, fallback_message)
end
end
function Screensaver:expandSpecial(message, fallback)
-- Expand special character sequences in given message. Use fallback string if there is no document instance
-- %p percentage read
-- %c current page
-- %t total pages
-- %T document title
local ret = message
local lastfile = G_reader_settings:readSetting("lastfile")
local doc = DocumentRegistry:openDocument(lastfile)
local instance = require("apps/reader/readerui"):_getRunningInstance()
if instance ~= nil then
local currentpage = instance.view.state.page
ret = string.gsub(ret, "%%c", currentpage)
local totalpages = doc:getPageCount()
ret = string.gsub(ret, "%%t", totalpages)
local percent = math.floor(((currentpage * 100) / totalpages) + 0.5)
ret = string.gsub(ret, "%%p", percent)
local props = doc:getProps()
ret = string.gsub(ret, "%%T", props.title)
else
ret = fallback
end
doc:close()
return ret
end
function Screensaver:close()
if self.left_msg == nil then return end
local screensaver_delay = G_reader_settings:readSetting("screensaver_delay")

Loading…
Cancel
Save