mirror of
https://github.com/koreader/koreader.git
synced 2025-12-18 12:02:09 +01:00
273 lines
14 KiB
Lua
273 lines
14 KiB
Lua
local Device = require("device")
|
|
local Screensaver = require("ui/screensaver")
|
|
local lfs = require("libs/libkoreader-lfs")
|
|
local _ = require("gettext")
|
|
local T = require("ffi/util").template
|
|
|
|
local ui = require("apps/reader/readerui").instance or require("apps/filemanager/filemanager").instance
|
|
|
|
local function hasLastFile()
|
|
local last_file = G_reader_settings:readSetting("lastfile")
|
|
return last_file and lfs.attributes(last_file, "mode") == "file"
|
|
end
|
|
|
|
local function isReaderProgressEnabled()
|
|
return ui.statistics ~= nil
|
|
end
|
|
|
|
local function allowRandomImageFolder()
|
|
local may_ignore_book_cover = G_reader_settings:isTrue("screensaver_exclude_on_hold_books")
|
|
or G_reader_settings:isTrue("screensaver_exclude_finished_books")
|
|
or G_reader_settings:isTrue("screensaver_hide_cover_in_filemanager")
|
|
or Screensaver.isExcluded(ui)
|
|
return G_reader_settings:readSetting("screensaver_type") == "random_image"
|
|
or (G_reader_settings:readSetting("screensaver_type") == "cover" and may_ignore_book_cover)
|
|
end
|
|
|
|
local function genMenuItem(text, setting, value, enabled_func, separator)
|
|
return {
|
|
text = text,
|
|
enabled_func = enabled_func,
|
|
checked_func = function()
|
|
return G_reader_settings:readSetting(setting) == value
|
|
end,
|
|
callback = function()
|
|
G_reader_settings:saveSetting(setting, value)
|
|
end,
|
|
radio = true,
|
|
separator = separator,
|
|
}
|
|
end
|
|
|
|
return {
|
|
{
|
|
text = _("Wallpaper"),
|
|
sub_item_table = {
|
|
genMenuItem(_("Show book cover on sleep screen"), "screensaver_type", "cover", hasLastFile),
|
|
genMenuItem(_("Show custom image or cover on sleep screen"), "screensaver_type", "document_cover"),
|
|
genMenuItem(_("Show random image from folder on sleep screen"), "screensaver_type", "random_image"),
|
|
genMenuItem(_("Show reading progress on sleep screen"), "screensaver_type", "readingprogress", isReaderProgressEnabled),
|
|
genMenuItem(_("Show book status on sleep screen"), "screensaver_type", "bookstatus", hasLastFile),
|
|
genMenuItem(_("Leave screen as-is"), "screensaver_type", "disable", nil, true),
|
|
-- separator
|
|
{
|
|
text = _("Ignore book cover"),
|
|
help_text = _("Choose when to ignore showing book covers on the sleep screen."),
|
|
enabled_func = function()
|
|
return G_reader_settings:readSetting("screensaver_type") == "cover"
|
|
end,
|
|
checked_func = function()
|
|
return G_reader_settings:isTrue("screensaver_hide_cover_in_filemanager")
|
|
or G_reader_settings:isTrue("screensaver_exclude_finished_books")
|
|
or G_reader_settings:isTrue("screensaver_exclude_on_hold_books")
|
|
end,
|
|
sub_item_table = {
|
|
{
|
|
text = _("For books on hold"),
|
|
help_text = _("When the device is locked and the current book has been marked as on hold, both the cover and sleep screen message of the book will not be shown."),
|
|
checked_func = function()
|
|
return G_reader_settings:isTrue("screensaver_exclude_on_hold_books")
|
|
end,
|
|
callback = function()
|
|
G_reader_settings:flipNilOrFalse("screensaver_exclude_on_hold_books")
|
|
end,
|
|
},
|
|
{
|
|
text = _("For finished books"),
|
|
help_text = _("When the device is locked and the current book has been marked as finished, both the cover and sleep screen message of the book will not be shown."),
|
|
checked_func = function()
|
|
return G_reader_settings:isTrue("screensaver_exclude_finished_books")
|
|
end,
|
|
callback = function()
|
|
G_reader_settings:flipNilOrFalse("screensaver_exclude_finished_books")
|
|
end,
|
|
},
|
|
{
|
|
text = _("When in file browser"),
|
|
help_text = _("When the device is locked from the file browser, both the cover and sleep screen message of the last opened book will not be shown."),
|
|
checked_func = function()
|
|
return G_reader_settings:isTrue("screensaver_hide_cover_in_filemanager")
|
|
end,
|
|
callback = function()
|
|
G_reader_settings:flipNilOrFalse("screensaver_hide_cover_in_filemanager")
|
|
end,
|
|
},
|
|
},
|
|
separator = true,
|
|
},
|
|
{
|
|
text = _("Border fill, rotation, and fit"),
|
|
enabled_func = function()
|
|
return G_reader_settings:readSetting("screensaver_type") == "cover"
|
|
or G_reader_settings:readSetting("screensaver_type") == "document_cover"
|
|
or G_reader_settings:readSetting("screensaver_type") == "random_image"
|
|
end,
|
|
sub_item_table = {
|
|
genMenuItem(_("Black fill"), "screensaver_img_background", "black"),
|
|
genMenuItem(_("White fill"), "screensaver_img_background", "white"),
|
|
genMenuItem(_("No fill"), "screensaver_img_background", "none", nil, true),
|
|
-- separator
|
|
{
|
|
text_func = function()
|
|
local percentage = G_reader_settings:readSetting("screensaver_stretch_limit_percentage")
|
|
if G_reader_settings:isTrue("screensaver_stretch_images") and percentage then
|
|
return T(_("Stretch to fit screen (with limit: %1 %)"), percentage)
|
|
end
|
|
return _("Stretch cover to fit screen")
|
|
end,
|
|
checked_func = function()
|
|
return G_reader_settings:isTrue("screensaver_stretch_images")
|
|
end,
|
|
callback = function(touchmenu_instance)
|
|
Screensaver:setStretchLimit(touchmenu_instance)
|
|
end,
|
|
},
|
|
{
|
|
text = _("Rotate cover for best fit"),
|
|
checked_func = function()
|
|
return G_reader_settings:isTrue("screensaver_rotate_auto_for_best_fit")
|
|
end,
|
|
callback = function(touchmenu_instance)
|
|
G_reader_settings:flipNilOrFalse("screensaver_rotate_auto_for_best_fit")
|
|
touchmenu_instance:updateItems()
|
|
end,
|
|
}
|
|
},
|
|
},
|
|
{
|
|
text = _("Postpone screen update after wake-up"),
|
|
sub_item_table = {
|
|
genMenuItem(_("Never"), "screensaver_delay", "disable"),
|
|
genMenuItem(_("1 second"), "screensaver_delay", "1"),
|
|
genMenuItem(_("3 seconds"), "screensaver_delay", "3"),
|
|
genMenuItem(_("5 seconds"), "screensaver_delay", "5"),
|
|
genMenuItem(Device:isTouchDevice() and _("Until a tap") or _("Until a key press"), "screensaver_delay", "tap"),
|
|
Device:isTouchDevice() and genMenuItem(_("Until 'exit sleep screen' gesture"), "screensaver_delay", "gesture") or nil,
|
|
},
|
|
},
|
|
{
|
|
text = _("Custom images"),
|
|
enabled_func = function()
|
|
return allowRandomImageFolder() or G_reader_settings:readSetting("screensaver_type") == "document_cover"
|
|
end,
|
|
sub_item_table = {
|
|
{
|
|
text = _("Choose image or document cover"),
|
|
enabled_func = function()
|
|
return G_reader_settings:readSetting("screensaver_type") == "document_cover"
|
|
end,
|
|
keep_menu_open = true,
|
|
callback = Screensaver.chooseFile,
|
|
},
|
|
{
|
|
text = _("Choose random image folder"),
|
|
enabled_func = allowRandomImageFolder,
|
|
keep_menu_open = true,
|
|
callback = Screensaver.chooseFolder,
|
|
separator = true,
|
|
},
|
|
{
|
|
text = _("Cycle through images in order"),
|
|
help_text = _("When enabled, all images (up to 128) will be displayed at least once on the sleep screen in sequence before repeating the cycle."),
|
|
enabled_func = allowRandomImageFolder,
|
|
checked_func = function()
|
|
return G_reader_settings:isTrue("screensaver_cycle_images_alphabetically")
|
|
end,
|
|
callback = function()
|
|
G_reader_settings:flipNilOrFalse("screensaver_cycle_images_alphabetically")
|
|
end,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
text = _("Sleep screen message"),
|
|
sub_item_table = {
|
|
{
|
|
text = _("Add custom message to sleep screen"),
|
|
checked_func = function()
|
|
return G_reader_settings:isTrue("screensaver_show_message")
|
|
end,
|
|
callback = function()
|
|
G_reader_settings:toggle("screensaver_show_message")
|
|
end,
|
|
separator = true,
|
|
},
|
|
{
|
|
text = _("Edit sleep screen message"),
|
|
enabled_func = function()
|
|
return G_reader_settings:isTrue("screensaver_show_message")
|
|
end,
|
|
keep_menu_open = true,
|
|
callback = function()
|
|
Screensaver:setMessage()
|
|
end,
|
|
},
|
|
{
|
|
text = _("Container and position"),
|
|
enabled_func = function()
|
|
return G_reader_settings:isTrue("screensaver_show_message")
|
|
end,
|
|
sub_item_table = {
|
|
genMenuItem(_("Banner"), "screensaver_message_container", "banner"),
|
|
genMenuItem(_("Box"), "screensaver_message_container", "box", nil, true),
|
|
{
|
|
text_func = function()
|
|
local percent = G_reader_settings:readSetting("screensaver_message_vertical_position")
|
|
local value
|
|
if percent == 100 then
|
|
value = _("top")
|
|
elseif percent == 50 then
|
|
value = _("middle")
|
|
elseif percent == 0 then
|
|
value = _("bottom")
|
|
else
|
|
value = percent .. "\xE2\x80\xAF%" -- narrow no-break space
|
|
end
|
|
return T(_("Vertical position: %1"), value)
|
|
end,
|
|
help_text = _("Set a custom vertical position for the sleep screen message."),
|
|
keep_menu_open = true,
|
|
callback = function(touchmenu_instance)
|
|
Screensaver:setCustomPosition(touchmenu_instance)
|
|
end,
|
|
},
|
|
{
|
|
text_func = function()
|
|
local alpha = G_reader_settings:readSetting("screensaver_message_alpha", 100)
|
|
return T(_("Message opacity: %1"), alpha) .. "\xE2\x80\xAF%"
|
|
end,
|
|
help_text = _("Set the opacity level of the sleep screen message."),
|
|
keep_menu_open = true,
|
|
callback = function(touchmenu_instance)
|
|
Screensaver:setMessageOpacity(touchmenu_instance)
|
|
end,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
text = _("Background fill"),
|
|
help_text = _("This option will only become available, if you have selected 'Leave screen as-is' as wallpaper and have 'Sleep screen message' on."),
|
|
enabled_func = function()
|
|
return G_reader_settings:readSetting("screensaver_type") == "disable" and G_reader_settings:isTrue("screensaver_show_message")
|
|
end,
|
|
sub_item_table = {
|
|
genMenuItem(_("Black fill"), "screensaver_msg_background", "black"),
|
|
genMenuItem(_("White fill"), "screensaver_msg_background", "white"),
|
|
genMenuItem(_("No fill"), "screensaver_msg_background", "none"),
|
|
},
|
|
},
|
|
(Device:canReboot() and Device:canPowerOff()) and {
|
|
text = _("Hide reboot/poweroff message"),
|
|
checked_func = function()
|
|
return G_reader_settings:isTrue("screensaver_hide_fallback_msg")
|
|
end,
|
|
callback = function()
|
|
G_reader_settings:toggle("screensaver_hide_fallback_msg")
|
|
end,
|
|
} or nil,
|
|
},
|
|
},
|
|
}
|