Allow selecting a single image as screensaver (#4095)

pull/4097/head
Robert 6 years ago committed by poire-z
parent 19020b62c7
commit 00cfc469f1

@ -152,7 +152,7 @@ function ReaderMenu:setUpdateItemTable()
text = _("Screensaver"),
sub_item_table = require("ui/elements/screensaver_menu"),
}
table.remove(self.menu_items.screensaver.sub_item_table, 8)
table.remove(self.menu_items.screensaver.sub_item_table, 9)
table.insert(self.menu_items.screensaver.sub_item_table, ss_book_settings)
end
-- main menu tab
@ -320,10 +320,10 @@ end
function ReaderMenu:onCloseDocument()
if Device:supportsScreensaver() then
-- Remove the 8th item we added (which cleans up references to document
-- Remove the 9th item we added (which cleans up references to document
-- and doc_settings embedded in functions)
local screensaver_sub_item_table = require("ui/elements/screensaver_menu")
table.remove(screensaver_sub_item_table, 8)
table.remove(screensaver_sub_item_table, 9)
end
end

@ -55,6 +55,19 @@ return {
G_reader_settings:saveSetting("screensaver_type", "random_image")
end
},
{
text = _("Use image as screensaver"),
checked_func = function()
if screensaverType() == "image_file" then
return true
else
return false
end
end,
callback = function()
G_reader_settings:saveSetting("screensaver_type", "image_file")
end
},
{
text = _("Use reading progress as screensaver"),
enabled_func = function() return Screensaver.getReaderProgress ~= nil and lastFile() ~= nil end,
@ -104,6 +117,12 @@ return {
Screensaver:chooseFolder()
end,
},
{
text = _("Screensaver image"),
callback = function()
Screensaver:chooseFile()
end,
},
{
text = _("Screensaver message"),
callback = function()

@ -1,6 +1,7 @@
local Blitbuffer = require("ffi/blitbuffer")
local ButtonDialogTitle = require("ui/widget/buttondialogtitle")
local BookStatusWidget = require("ui/widget/bookstatuswidget")
local DataStorage = require("datastorage")
local Device = require("device")
local DocSettings = require("docsettings")
local DocumentRegistry = require("document/documentregistry")
@ -78,7 +79,6 @@ function Screensaver:chooseFolder()
})
local screensaver_dir = G_reader_settings:readSetting("screensaver_dir")
if screensaver_dir == nil then
local DataStorage = require("datastorage")
screensaver_dir = DataStorage:getDataDir() .. "/screenshots/"
end
self.choose_dialog = ButtonDialogTitle:new{
@ -88,6 +88,71 @@ function Screensaver:chooseFolder()
UIManager:show(self.choose_dialog)
end
function Screensaver:chooseFile()
local buttons = {}
table.insert(buttons, {
{
text = _("Choose screensaver image"),
callback = function()
UIManager:close(self.choose_dialog)
local FileChooser = require("ui/widget/filechooser")
local image_chooser = FileChooser:new{
title = _("Choose screensaver image"),
no_title = false,
path = self.root_path,
focused_path = self.focused_file,
collate = G_reader_settings:readSetting("collate") or "strcoll",
reverse_collate = G_reader_settings:isTrue("reverse_collate"),
show_parent = self.show_parent,
width = Screen:getWidth(),
height = Screen:getHeight(),
is_popout = false,
is_borderless = true,
has_close_button = true,
perpage = G_reader_settings:readSetting("items_per_page"),
file_filter = function(filename)
local util = require("util")
local suffix = util.getFileNameSuffix(filename)
if suffix == "jpeg" or suffix == "jpg" or suffix == "png" then
return true
end
end,
}
function image_chooser:onFileSelect(file) -- luacheck: ignore
local ConfirmBox = require("ui/widget/confirmbox")
UIManager:show(ConfirmBox:new{
text = T(_("Set screensaver image to:\n%1"), require("ffi/util").basename(file)),
ok_callback = function()
G_reader_settings:saveSetting("screensaver_image", file)
UIManager:close(image_chooser)
end
})
return true
end
UIManager:show(image_chooser)
end,
}
})
table.insert(buttons, {
{
text = _("Close"),
callback = function()
UIManager:close(self.choose_dialog)
end,
}
})
local screensaver_image = G_reader_settings:readSetting("screensaver_image")
if screensaver_image == nil then
screensaver_image = DataStorage:getDataDir() .. "/resources/koreader.png"
end
self.choose_dialog = ButtonDialogTitle:new{
title = T(_("Current screensaver image:\n %1"), screensaver_image),
buttons = buttons
}
UIManager:show(self.choose_dialog)
end
function Screensaver:stretchImages()
return G_reader_settings:isTrue("screensaver_stretch_images")
end
@ -229,8 +294,10 @@ function Screensaver:show(event, fallback_message)
end
if screensaver_type == "random_image" then
local screensaver_dir = G_reader_settings:readSetting(prefix.."screensaver_dir")
if screensaver_dir == nil and prefix ~= "" then
screensaver_dir = G_reader_settings:readSetting("screensaver_dir")
end
if screensaver_dir == nil then
local DataStorage = require("datastorage")
screensaver_dir = DataStorage:getDataDir() .. "/screenshots/"
end
local image_file = getRandomImage(screensaver_dir)
@ -250,6 +317,30 @@ function Screensaver:show(event, fallback_message)
end
end
end
if screensaver_type == "image_file" then
local screensaver_image = G_reader_settings:readSetting(prefix.."screensaver_image")
if screensaver_image == nil and prefix ~= "" then
screensaver_image = G_reader_settings:readSetting("screensaver_image")
end
if screensaver_image == nil then
screensaver_image = DataStorage:getDataDir() .. "/resources/koreader.png"
end
if lfs.attributes(screensaver_image, "mode") ~= "file" then
screensaver_type = "message"
else
widget = ImageWidget:new{
file = screensaver_image,
file_do_cache = false,
alpha = true,
height = Screen:getHeight(),
width = Screen:getWidth(),
scale_factor = not self:stretchImages() and 0 or nil,
}
if not self:whiteBackground() then
background = Blitbuffer.COLOR_BLACK
end
end
end
if screensaver_type == "readingprogress" then
if Screensaver.getReaderProgress ~= nil then
widget = Screensaver.getReaderProgress()
@ -263,6 +354,9 @@ function Screensaver:show(event, fallback_message)
background = nil -- no background filling, let book text visible
covers_fullscreen = false
end
if screensaver_message == nil and prefix ~= "" then
screensaver_message = G_reader_settings:readSetting("screensaver_message")
end
if screensaver_message == nil then
screensaver_message = fallback_message or default_screensaver_message
end

Loading…
Cancel
Save