mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
Allow selecting a single image as screensaver (#4095)
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user