Screenshot: set as book custom cover (#11227)

reviewable/pr11239/r1
hius07 5 months ago committed by GitHub
parent 0d2f8fbb3f
commit f765fe3070
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -295,12 +295,15 @@ function BookInfo:onShowBookInfo()
end end
function BookInfo:showBookProp(prop_key, prop_text) function BookInfo:showBookProp(prop_key, prop_text)
local text_type
if prop_key == "description" then if prop_key == "description" then
prop_text = util.htmlToPlainTextIfHtml(prop_text) prop_text = util.htmlToPlainTextIfHtml(prop_text)
text_type = "book_info"
end end
UIManager:show(TextViewer:new{ UIManager:show(TextViewer:new{
title = self.prop_text[prop_key], title = self.prop_text[prop_key],
text = prop_text, text = prop_text,
text_type = text_type,
}) })
end end
@ -406,6 +409,19 @@ function BookInfo:setCustomCover(file, book_props)
end end
end end
function BookInfo:setCustomCoverFromImage(file, image_file)
local custom_book_cover = DocSettings:findCustomCoverFile(file)
if custom_book_cover then
os.remove(custom_book_cover)
end
DocSettings:flushCustomCover(file, image_file)
if self.ui.doc_settings then
self.ui.doc_settings:getCustomCoverFile(true) -- reset cover file cache
end
UIManager:broadcastEvent(Event:new("InvalidateMetadataCache", file))
UIManager:broadcastEvent(Event:new("BookMetadataChanged"))
end
function BookInfo:setCustomMetadata(file, book_props, prop_key, prop_value) function BookInfo:setCustomMetadata(file, book_props, prop_key, prop_value)
-- in file -- in file
local custom_doc_settings, custom_props, display_title, no_custom_metadata local custom_doc_settings, custom_props, display_title, no_custom_metadata
@ -660,7 +676,6 @@ function BookInfo.showBooksWithHashBasedMetadata()
UIManager:show(TextViewer:new{ UIManager:show(TextViewer:new{
title = T(N_("1 document with hash-based metadata", "%1 documents with hash-based metadata", doc_nb), doc_nb), title = T(N_("1 document with hash-based metadata", "%1 documents with hash-based metadata", doc_nb), doc_nb),
title_multilines = true, title_multilines = true,
justified = false,
text = table.concat(file_info, "\n"), text = table.concat(file_info, "\n"),
}) })
end end

@ -9,6 +9,7 @@ local SetDefaults = require("apps/filemanager/filemanagersetdefaults")
local Size = require("ui/size") local Size = require("ui/size")
local UIManager = require("ui/uimanager") local UIManager = require("ui/uimanager")
local Screen = Device.screen local Screen = Device.screen
local filemanagerutil = require("apps/filemanager/filemanagerutil")
local dbg = require("dbg") local dbg = require("dbg")
local lfs = require("libs/libkoreader-lfs") local lfs = require("libs/libkoreader-lfs")
local logger = require("logger") local logger = require("logger")
@ -326,29 +327,14 @@ function FileManagerMenu:setUpdateItemTable()
{ {
text = _("Set home folder"), text = _("Set home folder"),
callback = function() callback = function()
local text local title_header = _("Current home folder:")
local home_dir = G_reader_settings:readSetting("home_dir") local current_path = G_reader_settings:readSetting("home_dir")
if home_dir then local default_path = filemanagerutil.getDefaultDir()
text = T(_("Home folder is set to:\n%1"), home_dir) local caller_callback = function(path)
else G_reader_settings:saveSetting("home_dir", path)
text = _("Home folder is not set.") self.ui:updateTitleBarPath()
home_dir = Device.home_dir
end end
UIManager:show(ConfirmBox:new{ filemanagerutil.showChooseDialog(title_header, caller_callback, current_path, default_path)
text = text .. "\n" .. _("Choose new folder to set as home?"),
ok_text = _("Choose folder"),
ok_callback = function()
local path_chooser = require("ui/widget/pathchooser"):new{
select_file = false,
show_files = false,
path = home_dir,
onConfirm = function(new_path)
G_reader_settings:saveSetting("home_dir", new_path)
end
}
UIManager:show(path_chooser)
end,
})
end, end,
}, },
{ {

@ -335,4 +335,60 @@ function filemanagerutil.genExecuteScriptButton(file, caller_callback)
} }
end end
function filemanagerutil.showChooseDialog(title_header, caller_callback, current_path, default_path, file_filter)
local is_file = file_filter and true or false
local path = current_path or default_path
local dialog
local buttons = {
{
{
text = is_file and _("Choose file") or _("Choose folder"),
callback = function()
UIManager:close(dialog)
if path then
if is_file then
path = path:match("(.*/)")
end
if lfs.attributes(path, "mode") ~= "directory" then
path = G_reader_settings:readSetting("home_dir") or filemanagerutil.getDefaultDir()
end
end
local PathChooser = require("ui/widget/pathchooser")
local path_chooser = PathChooser:new{
select_directory = not is_file,
select_file = is_file,
show_files = is_file,
file_filter = file_filter,
path = path,
onConfirm = function(new_path)
caller_callback(new_path)
end,
}
UIManager:show(path_chooser)
end,
},
}
}
if default_path then
table.insert(buttons, {
{
text = _("Use default"),
enabled = path ~= default_path,
callback = function()
UIManager:close(dialog)
caller_callback(default_path)
end,
},
})
end
local title_value = path and (is_file and BD.filepath(path) or BD.dirpath(path))
or _("not set")
local ButtonDialog = require("ui/widget/buttondialog")
dialog = ButtonDialog:new{
title = title_header .. "\n\n" .. title_value .. "\n",
buttons = buttons,
}
UIManager:show(dialog)
end
return filemanagerutil return filemanagerutil

@ -2515,7 +2515,7 @@ function ReaderFooter:onTimeFormatChanged()
end end
function ReaderFooter:onBookMetadataChanged(prop_updated) function ReaderFooter:onBookMetadataChanged(prop_updated)
if prop_updated.metadata_key_updated == "title" then if prop_updated and prop_updated.metadata_key_updated == "title" then
self:updateFooterText() self:updateFooterText()
end end
end end

@ -1,5 +1,3 @@
local BD = require("ui/bidi")
local ButtonDialogTitle = require("ui/widget/buttondialogtitle")
local ConfirmBox = require("ui/widget/confirmbox") local ConfirmBox = require("ui/widget/confirmbox")
local DataStorage = require("datastorage") local DataStorage = require("datastorage")
local DictQuickLookup = require("ui/widget/dictquicklookup") local DictQuickLookup = require("ui/widget/dictquicklookup")
@ -13,6 +11,7 @@ local Trapper = require("ui/trapper")
local Translator = require("ui/translator") local Translator = require("ui/translator")
local UIManager = require("ui/uimanager") local UIManager = require("ui/uimanager")
local Wikipedia = require("ui/wikipedia") local Wikipedia = require("ui/wikipedia")
local filemanagerutil = require("apps/filemanager/filemanagerutil")
local lfs = require("libs/libkoreader-lfs") local lfs = require("libs/libkoreader-lfs")
local logger = require("logger") local logger = require("logger")
local util = require("util") local util = require("util")
@ -175,109 +174,21 @@ function ReaderWikipedia:addToMainMenu(menu_items)
{ -- setting used by dictquicklookup { -- setting used by dictquicklookup
text = _("Set Wikipedia 'Save as EPUB' folder"), text = _("Set Wikipedia 'Save as EPUB' folder"),
keep_menu_open = true, keep_menu_open = true,
callback = function() help_text = _([[
local choose_directory = function()
-- Default directory as chosen by DictQuickLookup
local default_dir = G_reader_settings:readSetting("wikipedia_save_dir")
or G_reader_settings:readSetting("home_dir")
or require("apps/filemanager/filemanagerutil").getDefaultDir()
local dialog
dialog = ButtonDialogTitle:new{
title = T(_("Current Wikipedia 'Save as EPUB' folder:\n\n%1\n"), BD.dirpath(default_dir)),
buttons = {
{
{
text = _("Keep this folder"),
callback = function()
UIManager:close(dialog)
end,
},
},
{
{
text = _("Choose other folder"),
callback = function()
UIManager:close(dialog)
-- Use currently read book's directory as starting point,
-- so a user reading a wikipedia article can quickly select
-- it to save related new articles in the same directory
local dir = G_reader_settings:readSetting("wikipedia_save_dir")
or G_reader_settings:readSetting("home_dir")
or require("apps/filemanager/filemanagerutil").getDefaultDir()
or "/"
-- If this directory has no subdirectory, we would be displaying
-- a single "..", so use parent directory in that case.
local has_subdirectory = false
for f in lfs.dir(dir) do
local attributes = lfs.attributes(dir.."/"..f)
if attributes and attributes.mode == "directory" then
if f ~= "." and f ~= ".." and f:sub(-4) ~= ".sdr"then
has_subdirectory = true
break
end
end
end
if not has_subdirectory then
dir = dir:match("(.*)/")
end
local PathChooser = require("ui/widget/pathchooser")
local path_chooser = PathChooser:new{
select_directory = true,
select_file = false,
path = dir,
onConfirm = function(path)
G_reader_settings:saveSetting("wikipedia_save_dir", path)
UIManager:show(InfoMessage:new{
text = T(_("Wikipedia 'Save as EPUB' folder set to:\n%1"), BD.dirpath(path)),
})
end
}
UIManager:show(path_chooser)
end,
},
},
},
}
UIManager:show(dialog)
end
-- If wikipedia_save_dir has not yet been set, propose to use
-- home_dir/Wikipedia/
if not G_reader_settings:readSetting("wikipedia_save_dir") then
local home_dir = G_reader_settings:readSetting("home_dir")
if not home_dir or lfs.attributes(home_dir, "mode") ~= "directory" then
home_dir = require("apps/filemanager/filemanagerutil").getDefaultDir()
end
home_dir = home_dir:gsub("^(.-)/*$", "%1") -- remove trailing slash
if home_dir and lfs.attributes(home_dir, "mode") == "directory" then
local wikipedia_dir = home_dir.."/Wikipedia"
local text = _([[
Wikipedia articles can be saved as an EPUB for more comfortable reading. Wikipedia articles can be saved as an EPUB for more comfortable reading.
You can choose an existing folder, or use a default folder named "Wikipedia" in your reader's home folder. You can choose an existing folder, or use a default folder named "Wikipedia" in your reader's home folder.]]),
callback = function()
Where do you want them saved?]]) local title_header = _("Current Wikipedia 'Save as EPUB' folder:")
UIManager:show(ConfirmBox:new{ local current_path = G_reader_settings:readSetting("wikipedia_save_dir")
text = text, local default_path = DictQuickLookup.getWikiSaveEpubDefaultDir()
ok_text = _("Use ~/Wikipedia/"), local caller_callback = function(path)
ok_callback = function() G_reader_settings:saveSetting("wikipedia_save_dir", path)
if not util.pathExists(wikipedia_dir) then if not util.pathExists(path) then
lfs.mkdir(wikipedia_dir) lfs.mkdir(path)
end
G_reader_settings:saveSetting("wikipedia_save_dir", wikipedia_dir)
UIManager:show(InfoMessage:new{
text = T(_("Wikipedia 'Save as EPUB' folder set to:\n%1"), BD.dirpath(wikipedia_dir)),
})
end,
cancel_text = _("Choose folder"),
cancel_callback = function()
choose_directory()
end,
})
return
end end
end end
-- If setting exists, or no home_dir found, let user choose directory filemanagerutil.showChooseDialog(title_header, caller_callback, current_path, default_path)
choose_directory()
end, end,
}, },
{ -- setting used by dictquicklookup { -- setting used by dictquicklookup

@ -152,7 +152,7 @@ end
-- this might be overridden by a document implementation -- this might be overridden by a document implementation
function Document:getNativePageDimensions(pageno) function Document:getNativePageDimensions(pageno)
local hash = "pgdim|"..self.file.."|"..pageno local hash = "pgdim|"..self.file.."|"..self.mod_time.."|"..pageno
local cached = DocCache:check(hash) local cached = DocCache:check(hash)
if cached then if cached then
return cached[1] return cached[1]

@ -1,6 +1,4 @@
local BD = require("ui/bidi")
local Blitbuffer = require("ffi/blitbuffer") local Blitbuffer = require("ffi/blitbuffer")
local ButtonDialog = require("ui/widget/buttondialog")
local BookStatusWidget = require("ui/widget/bookstatuswidget") local BookStatusWidget = require("ui/widget/bookstatuswidget")
local BottomContainer = require("ui/widget/container/bottomcontainer") local BottomContainer = require("ui/widget/container/bottomcontainer")
local Device = require("device") local Device = require("device")
@ -29,7 +27,6 @@ local logger = require("logger")
local util = require("util") local util = require("util")
local _ = require("gettext") local _ = require("gettext")
local Screen = Device.screen local Screen = Device.screen
local T = ffiUtil.template
-- Default settings -- Default settings
if G_reader_settings:hasNot("screensaver_show_message") then if G_reader_settings:hasNot("screensaver_show_message") then
@ -256,99 +253,36 @@ local function addOverlayMessage(widget, widget_height, text)
end end
function Screensaver:chooseFolder() function Screensaver:chooseFolder()
local buttons = {} local title_header = _("Current screensaver folder:")
local choose_dialog local current_path = G_reader_settings:readSetting("screensaver_dir")
table.insert(buttons, { local caller_callback = function(path)
{ G_reader_settings:saveSetting("screensaver_dir", path)
text = _("Choose screensaver folder"), end
callback = function() filemanagerutil.showChooseDialog(title_header, caller_callback, current_path)
UIManager:close(choose_dialog)
require("ui/downloadmgr"):new{
onConfirm = function(path)
logger.dbg("set screensaver directory to", path)
G_reader_settings:saveSetting("screensaver_dir", path)
UIManager:show(InfoMessage:new{
text = T(_("Screensaver folder set to:\n%1"), BD.dirpath(path)),
timeout = 3,
})
end,
}:chooseDir()
end,
}
})
table.insert(buttons, {
{
text = _("Close"),
callback = function()
UIManager:close(choose_dialog)
end,
}
})
local screensaver_dir = G_reader_settings:readSetting("screensaver_dir")
or _("N/A")
choose_dialog = ButtonDialog:new{
title = T(_("Current screensaver image folder:\n%1"), BD.dirpath(screensaver_dir)),
buttons = buttons
}
UIManager:show(choose_dialog)
end end
function Screensaver:chooseFile(document_cover) function Screensaver:chooseFile(document_cover)
local text = document_cover and _("Choose document cover") or _("Choose screensaver image") local title_header, current_path, file_filter, caller_callback
local buttons = {} if document_cover then
local choose_dialog title_header = _("Current screensaver document cover:")
table.insert(buttons, { current_path = G_reader_settings:readSetting("screensaver_document_cover")
{ file_filter = function(filename)
text = text, return DocumentRegistry:hasProvider(filename)
callback = function() end
UIManager:close(choose_dialog) caller_callback = function(path)
local PathChooser = require("ui/widget/pathchooser") G_reader_settings:saveSetting("screensaver_document_cover", path)
local path_chooser = PathChooser:new{ end
select_directory = false, else
file_filter = function(filename) title_header = _("Current screensaver image:")
return document_cover and DocumentRegistry:hasProvider(filename) current_path = G_reader_settings:readSetting("screensaver_image")
or DocumentRegistry:isImageFile(filename) file_filter = function(filename)
end, return DocumentRegistry:isImageFile(filename)
path = self.root_path, end
onConfirm = function(file_path) caller_callback = function(path)
if document_cover then G_reader_settings:saveSetting("screensaver_image", path)
G_reader_settings:saveSetting("screensaver_document_cover", file_path) end
UIManager:show(InfoMessage:new{ end
text = T(_("Screensaver document cover set to:\n%1"), BD.filepath(file_path)), filemanagerutil.showChooseDialog(title_header, caller_callback, current_path, nil, file_filter)
timeout = 3,
})
else
G_reader_settings:saveSetting("screensaver_image", file_path)
UIManager:show(InfoMessage:new{
text = T(_("Screensaver image set to:\n%1"), BD.filepath(file_path)),
timeout = 3,
})
end
end
}
UIManager:show(path_chooser)
end,
}
})
table.insert(buttons, {
{
text = _("Close"),
callback = function()
UIManager:close(choose_dialog)
end,
}
})
local screensaver_image = G_reader_settings:readSetting("screensaver_image")
or _("N/A")
local screensaver_document_cover = G_reader_settings:readSetting("screensaver_document_cover")
or _("N/A")
local title = document_cover and T(_("Current screensaver document cover:\n%1"), BD.filepath(screensaver_document_cover))
or T(_("Current screensaver image:\n%1"), BD.filepath(screensaver_image))
choose_dialog = ButtonDialog:new{
title = title,
buttons = buttons
}
UIManager:show(choose_dialog)
end end
function Screensaver:isExcluded() function Screensaver:isExcluded()

@ -25,6 +25,8 @@ local UIManager = require("ui/uimanager")
local VerticalGroup = require("ui/widget/verticalgroup") local VerticalGroup = require("ui/widget/verticalgroup")
local VerticalSpan = require("ui/widget/verticalspan") local VerticalSpan = require("ui/widget/verticalspan")
local WidgetContainer = require("ui/widget/container/widgetcontainer") local WidgetContainer = require("ui/widget/container/widgetcontainer")
local filemanagerutil = require("apps/filemanager/filemanagerutil")
local lfs = require("libs/libkoreader-lfs")
local logger = require("logger") local logger = require("logger")
local util = require("util") local util = require("util")
local _ = require("gettext") local _ = require("gettext")
@ -68,6 +70,14 @@ local highlight_strings = {
unhighlight = _("Unhighlight"), unhighlight = _("Unhighlight"),
} }
function DictQuickLookup.getWikiSaveEpubDefaultDir()
local dir = G_reader_settings:readSetting("home_dir") or filemanagerutil.getDefaultDir()
if dir:sub(-1) ~= "/" then
dir = dir .. "/"
end
return dir .. "Wikipedia"
end
function DictQuickLookup:canSearch() function DictQuickLookup:canSearch()
if self.is_wiki then if self.is_wiki then
-- In the Wiki variant of this widget, the Search button is coopted to cycle between enabled languages. -- In the Wiki variant of this widget, the Search button is coopted to cycle between enabled languages.
@ -343,18 +353,11 @@ function DictQuickLookup:init()
local dir local dir
if G_reader_settings:isTrue("wikipedia_save_in_book_dir") and not self:isDocless() then if G_reader_settings:isTrue("wikipedia_save_in_book_dir") and not self:isDocless() then
local last_file = G_reader_settings:readSetting("lastfile") local last_file = G_reader_settings:readSetting("lastfile")
if last_file then dir = last_file and last_file:match("(.*)/")
dir = last_file:match("(.*)/")
end
end end
if not dir then dir = G_reader_settings:readSetting("wikipedia_save_dir") dir = dir or G_reader_settings:readSetting("wikipedia_save_dir") or DictQuickLookup.getWikiSaveEpubDefaultDir()
or G_reader_settings:readSetting("home_dir") if not util.pathExists(dir) then
or require("apps/filemanager/filemanagerutil").getDefaultDir() end lfs.mkdir(dir)
if not dir or not util.pathExists(dir) then
UIManager:show(InfoMessage:new{
text = _("No folder to save article to could be found."),
})
return
end end
-- Just to be safe (none of the invalid chars, except ':' for uninteresting -- Just to be safe (none of the invalid chars, except ':' for uninteresting
-- Portal: or File: wikipedia pages, should be in lookupword) -- Portal: or File: wikipedia pages, should be in lookupword)

@ -6,7 +6,6 @@ local BD = require("ui/bidi")
local Blitbuffer = require("ffi/blitbuffer") local Blitbuffer = require("ffi/blitbuffer")
local ButtonTable = require("ui/widget/buttontable") local ButtonTable = require("ui/widget/buttontable")
local CenterContainer = require("ui/widget/container/centercontainer") local CenterContainer = require("ui/widget/container/centercontainer")
local DataStorage = require("datastorage")
local Device = require("device") local Device = require("device")
local Event = require("ui/event") local Event = require("ui/event")
local Geom = require("ui/geometry") local Geom = require("ui/geometry")
@ -15,6 +14,7 @@ local FrameContainer = require("ui/widget/container/framecontainer")
local ImageWidget = require("ui/widget/imagewidget") local ImageWidget = require("ui/widget/imagewidget")
local InputContainer = require("ui/widget/container/inputcontainer") local InputContainer = require("ui/widget/container/inputcontainer")
local ProgressWidget = require("ui/widget/progresswidget") local ProgressWidget = require("ui/widget/progresswidget")
local Screenshoter = require("ui/widget/screenshoter")
local Size = require("ui/size") local Size = require("ui/size")
local TitleBar = require("ui/widget/titlebar") local TitleBar = require("ui/widget/titlebar")
local VerticalGroup = require("ui/widget/verticalgroup") local VerticalGroup = require("ui/widget/verticalgroup")
@ -156,7 +156,7 @@ function ImageViewer:init()
self.image = self._scaled_image_func(1) -- native image size, that we need to know self.image = self._scaled_image_func(1) -- native image size, that we need to know
end end
if G_reader_settings:isTrue("imageviewer_rotate_auto_for_best_fit") then if self.image and G_reader_settings:isTrue("imageviewer_rotate_auto_for_best_fit") then
self.rotated = (Screen:getWidth() > Screen:getHeight()) ~= (self.image:getWidth() > self.image:getHeight()) self.rotated = (Screen:getWidth() > Screen:getHeight()) ~= (self.image:getWidth() > self.image:getHeight())
end end
@ -811,8 +811,8 @@ function ImageViewer:onSaveImageView()
self:update() self:update()
UIManager:forceRePaint() UIManager:forceRePaint()
end end
local screenshots_dir = G_reader_settings:readSetting("screenshot_dir") or DataStorage:getDataDir() .. "/screenshots/" local screenshot_dir = Screenshoter:getScreenshotDir()
local screenshot_name = os.date(screenshots_dir .. "ImageViewer" .. "_%Y-%m-%d_%H%M%S.png") local screenshot_name = os.date(screenshot_dir .. "/ImageViewer_%Y-%m-%d_%H%M%S.png")
UIManager:sendEvent(Event:new("Screenshot", screenshot_name, restore_settings_func)) UIManager:sendEvent(Event:new("Screenshot", screenshot_name, restore_settings_func))
return true return true
end end

@ -1,16 +1,16 @@
local BD = require("ui/bidi") local BD = require("ui/bidi")
local ConfirmBox = require("ui/widget/confirmbox") local ButtonDialog = require("ui/widget/buttondialog")
local MultiConfirmBox = require("ui/widget/multiconfirmbox")
local DataStorage = require("datastorage") local DataStorage = require("datastorage")
local GestureRange = require("ui/gesturerange") local GestureRange = require("ui/gesturerange")
local InputContainer = require("ui/widget/container/inputcontainer") local InputContainer = require("ui/widget/container/inputcontainer")
local UIManager = require("ui/uimanager") local UIManager = require("ui/uimanager")
local filemanagerutil = require("apps/filemanager/filemanagerutil")
local Screen = require("device").screen local Screen = require("device").screen
local T = require("ffi/util").template
local _ = require("gettext") local _ = require("gettext")
local Screenshoter = InputContainer:extend{ local Screenshoter = InputContainer:extend{
prefix = 'Screenshot', prefix = "Screenshot",
default_dir = DataStorage:getFullDataDir() .. "/screenshots",
} }
function Screenshoter:init() function Screenshoter:init()
@ -33,41 +33,43 @@ function Screenshoter:init()
} }
end end
function Screenshoter:onScreenshot(filename, when_done_func) function Screenshoter:getScreenshotDir()
local screenshots_dir = G_reader_settings:readSetting("screenshot_dir") or DataStorage:getDataDir() .. "/screenshots/" local screenshot_dir = G_reader_settings:readSetting("screenshot_dir")
self.screenshot_fn_fmt = screenshots_dir .. self.prefix .. "_%Y-%m-%d_%H%M%S.png" return screenshot_dir and screenshot_dir:gsub("/$", "") or self.default_dir
local screenshot_name = filename or os.date(self.screenshot_fn_fmt) end
function Screenshoter:onScreenshot(screenshot_name, caller_callback)
if not screenshot_name then
screenshot_name = os.date(self:getScreenshotDir() .. "/" .. self.prefix .. "_%Y-%m-%d_%H%M%S.png")
end
Screen:shot(screenshot_name) Screen:shot(screenshot_name)
local confirm_box local file = self.ui and self.ui.document and self.ui.document.file -- currently opened book
confirm_box = ConfirmBox:new{ local dialog
text = T( _("Screenshot saved to:\n%1"), BD.filepath(screenshot_name)), local buttons = {
keep_dialog_open = true, {
flush_events_on_show = true, -- may be invoked with 2-fingers tap, accidental additional events can happen
cancel_text = _("Close"),
cancel_callback = function()
if when_done_func then when_done_func() end
end,
ok_text = _("Set as screensaver"),
ok_callback = function()
G_reader_settings:saveSetting("screensaver_type", "image_file")
G_reader_settings:saveSetting("screensaver_image", screenshot_name)
UIManager:close(confirm_box)
if when_done_func then when_done_func() end
end,
other_buttons_first = true,
other_buttons = {{
{ {
text = _("Delete"), text = _("Delete"),
callback = function() callback = function()
local __ = os.remove(screenshot_name) os.remove(screenshot_name)
UIManager:close(confirm_box) dialog:onClose()
if when_done_func then when_done_func() end end,
},
{
text = _("Set as book cover"),
enabled = file and true or false,
callback = function()
self.ui.bookinfo:setCustomCoverFromImage(file, screenshot_name)
os.remove(screenshot_name)
dialog:onClose()
end, end,
}, },
},
{
{ {
text = _("View"), text = _("View"),
callback = function() callback = function()
local image_viewer = require("ui/widget/imageviewer"):new{ local ImageViewer = require("ui/widget/imageviewer")
local image_viewer = ImageViewer:new{
file = screenshot_name, file = screenshot_name,
modal = true, modal = true,
with_title_bar = false, with_title_bar = false,
@ -76,37 +78,43 @@ function Screenshoter:onScreenshot(filename, when_done_func)
UIManager:show(image_viewer) UIManager:show(image_viewer)
end, end,
}, },
}}, {
text = _("Set as screensaver"),
callback = function()
G_reader_settings:saveSetting("screensaver_type", "image_file")
G_reader_settings:saveSetting("screensaver_image", screenshot_name)
dialog:onClose()
end,
},
},
}
dialog = ButtonDialog:new{
title = _("Screenshot saved to:") .. "\n\n" .. BD.filepath(screenshot_name) .. "\n",
buttons = buttons,
tap_close_callback = function()
if caller_callback then
caller_callback()
end
local current_path = self.ui and self.ui.file_chooser and self.ui.file_chooser.path
if current_path and current_path .. "/" == screenshot_name:match(".*/") then
self.ui.file_chooser:refreshPath()
end
end,
} }
UIManager:show(confirm_box) UIManager:show(dialog)
-- trigger full refresh -- trigger full refresh
UIManager:setDirty(nil, "full") UIManager:setDirty(nil, "full")
return true return true
end end
function Screenshoter:chooseFolder() function Screenshoter:chooseFolder()
local screenshot_dir_default = DataStorage:getFullDataDir() .. "/screenshots/" local title_header = _("Current screenshot folder:")
local screenshot_dir = G_reader_settings:readSetting("screenshot_dir") or screenshot_dir_default local current_path = G_reader_settings:readSetting("screenshot_dir")
local confirm_box = MultiConfirmBox:new{ local default_path = self.default_dir
text = T(_("Screenshot folder is set to:\n%1\n\nChoose a new folder for screenshots?"), screenshot_dir), local caller_callback = function(path)
choice1_text = _("Use default"), G_reader_settings:saveSetting("screenshot_dir", path)
choice1_callback = function() end
G_reader_settings:saveSetting("screenshot_dir", screenshot_dir_default) filemanagerutil.showChooseDialog(title_header, caller_callback, current_path, default_path)
end,
choice2_text = _("Choose folder"),
choice2_callback = function()
local path_chooser = require("ui/widget/pathchooser"):new{
select_file = false,
show_files = false,
path = screenshot_dir,
onConfirm = function(new_path)
G_reader_settings:saveSetting("screenshot_dir", new_path .. "/")
end
}
UIManager:show(path_chooser)
end,
}
UIManager:show(confirm_box)
end end
function Screenshoter:onTapDiagonal() function Screenshoter:onTapDiagonal()

@ -32,6 +32,7 @@ local MyClipping = require("clip")
local NetworkMgr = require("ui/network/manager") local NetworkMgr = require("ui/network/manager")
local UIManager = require("ui/uimanager") local UIManager = require("ui/uimanager")
local WidgetContainer = require("ui/widget/container/widgetcontainer") local WidgetContainer = require("ui/widget/container/widgetcontainer")
local filemanagerutil = require("apps/filemanager/filemanagerutil")
local T = require("ffi/util").template local T = require("ffi/util").template
local logger = require("logger") local logger = require("logger")
local _ = require("gettext") local _ = require("gettext")
@ -308,40 +309,17 @@ function Exporter:addToMainMenu(menu_items)
end end
function Exporter:chooseFolder() function Exporter:chooseFolder()
local function set_targets_clipping_dir(dir) local settings = G_reader_settings:readSetting("exporter", {})
for k in pairs(self.targets) do local title_header = _("Current export folder:")
self.targets[k].clipping_dir = dir local current_path = settings.clipping_dir
local default_path = DataStorage:getFullDataDir() .. "/clipboard"
local caller_callback = function(path)
settings.clipping_dir = path
for _, target in pairs(self.targets) do
target.clipping_dir = path
end end
end end
local clipping_dir_default = DataStorage:getFullDataDir() .. "/clipboard" filemanagerutil.showChooseDialog(title_header, caller_callback, current_path, default_path)
local settings = G_reader_settings:readSetting("exporter") or {}
local clipping_dir = settings.clipping_dir or clipping_dir_default
local MultiConfirmBox = require("ui/widget/multiconfirmbox")
local confirm_box = MultiConfirmBox:new{
text = T(_("Export folder is set to:\n%1\n\nChoose new export folder?"), clipping_dir),
choice1_text = _("Use default"),
choice1_callback = function()
settings.clipping_dir = nil
G_reader_settings:saveSetting("exporter", settings)
set_targets_clipping_dir(clipping_dir_default)
end,
choice2_text = _("Choose folder"),
choice2_callback = function()
local PathChooser = require("ui/widget/pathchooser")
local path_chooser = PathChooser:new{
select_file = false,
show_files = false,
path = clipping_dir,
onConfirm = function(new_path)
settings.clipping_dir = new_path
G_reader_settings:saveSetting("exporter", settings)
set_targets_clipping_dir(new_path)
end
}
UIManager:show(path_chooser)
end,
}
UIManager:show(confirm_box)
end end
return Exporter return Exporter

@ -787,6 +787,7 @@ function ReaderStatistics:getIdBookDB()
end end
function ReaderStatistics:onBookMetadataChanged(prop_updated) function ReaderStatistics:onBookMetadataChanged(prop_updated)
if not prop_updated then return end
local log_prefix = "Statistics metadata update:" local log_prefix = "Statistics metadata update:"
logger.dbg(log_prefix, "got", prop_updated) logger.dbg(log_prefix, "got", prop_updated)
-- Some metadata of a book (that we may or may not know about) has been modified -- Some metadata of a book (that we may or may not know about) has been modified

Loading…
Cancel
Save