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
function BookInfo:showBookProp(prop_key, prop_text)
local text_type
if prop_key == "description" then
prop_text = util.htmlToPlainTextIfHtml(prop_text)
text_type = "book_info"
end
UIManager:show(TextViewer:new{
title = self.prop_text[prop_key],
text = prop_text,
text_type = text_type,
})
end
@ -406,6 +409,19 @@ function BookInfo:setCustomCover(file, book_props)
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)
-- in file
local custom_doc_settings, custom_props, display_title, no_custom_metadata
@ -660,7 +676,6 @@ function BookInfo.showBooksWithHashBasedMetadata()
UIManager:show(TextViewer:new{
title = T(N_("1 document with hash-based metadata", "%1 documents with hash-based metadata", doc_nb), doc_nb),
title_multilines = true,
justified = false,
text = table.concat(file_info, "\n"),
})
end

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

@ -335,4 +335,60 @@ function filemanagerutil.genExecuteScriptButton(file, caller_callback)
}
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

@ -2515,7 +2515,7 @@ function ReaderFooter:onTimeFormatChanged()
end
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()
end
end

@ -1,5 +1,3 @@
local BD = require("ui/bidi")
local ButtonDialogTitle = require("ui/widget/buttondialogtitle")
local ConfirmBox = require("ui/widget/confirmbox")
local DataStorage = require("datastorage")
local DictQuickLookup = require("ui/widget/dictquicklookup")
@ -13,6 +11,7 @@ local Trapper = require("ui/trapper")
local Translator = require("ui/translator")
local UIManager = require("ui/uimanager")
local Wikipedia = require("ui/wikipedia")
local filemanagerutil = require("apps/filemanager/filemanagerutil")
local lfs = require("libs/libkoreader-lfs")
local logger = require("logger")
local util = require("util")
@ -175,109 +174,21 @@ function ReaderWikipedia:addToMainMenu(menu_items)
{ -- setting used by dictquicklookup
text = _("Set Wikipedia 'Save as EPUB' folder"),
keep_menu_open = true,
callback = function()
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 = _([[
help_text = _([[
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.
Where do you want them saved?]])
UIManager:show(ConfirmBox:new{
text = text,
ok_text = _("Use ~/Wikipedia/"),
ok_callback = function()
if not util.pathExists(wikipedia_dir) then
lfs.mkdir(wikipedia_dir)
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
You can choose an existing folder, or use a default folder named "Wikipedia" in your reader's home folder.]]),
callback = function()
local title_header = _("Current Wikipedia 'Save as EPUB' folder:")
local current_path = G_reader_settings:readSetting("wikipedia_save_dir")
local default_path = DictQuickLookup.getWikiSaveEpubDefaultDir()
local caller_callback = function(path)
G_reader_settings:saveSetting("wikipedia_save_dir", path)
if not util.pathExists(path) then
lfs.mkdir(path)
end
end
-- If setting exists, or no home_dir found, let user choose directory
choose_directory()
filemanagerutil.showChooseDialog(title_header, caller_callback, current_path, default_path)
end,
},
{ -- setting used by dictquicklookup

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

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

@ -25,6 +25,8 @@ local UIManager = require("ui/uimanager")
local VerticalGroup = require("ui/widget/verticalgroup")
local VerticalSpan = require("ui/widget/verticalspan")
local WidgetContainer = require("ui/widget/container/widgetcontainer")
local filemanagerutil = require("apps/filemanager/filemanagerutil")
local lfs = require("libs/libkoreader-lfs")
local logger = require("logger")
local util = require("util")
local _ = require("gettext")
@ -68,6 +70,14 @@ local highlight_strings = {
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()
if self.is_wiki then
-- 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
if G_reader_settings:isTrue("wikipedia_save_in_book_dir") and not self:isDocless() then
local last_file = G_reader_settings:readSetting("lastfile")
if last_file then
dir = last_file:match("(.*)/")
end
dir = last_file and last_file:match("(.*)/")
end
if not dir then dir = G_reader_settings:readSetting("wikipedia_save_dir")
or G_reader_settings:readSetting("home_dir")
or require("apps/filemanager/filemanagerutil").getDefaultDir() end
if not dir or not util.pathExists(dir) then
UIManager:show(InfoMessage:new{
text = _("No folder to save article to could be found."),
})
return
dir = dir or G_reader_settings:readSetting("wikipedia_save_dir") or DictQuickLookup.getWikiSaveEpubDefaultDir()
if not util.pathExists(dir) then
lfs.mkdir(dir)
end
-- Just to be safe (none of the invalid chars, except ':' for uninteresting
-- Portal: or File: wikipedia pages, should be in lookupword)

@ -6,7 +6,6 @@ local BD = require("ui/bidi")
local Blitbuffer = require("ffi/blitbuffer")
local ButtonTable = require("ui/widget/buttontable")
local CenterContainer = require("ui/widget/container/centercontainer")
local DataStorage = require("datastorage")
local Device = require("device")
local Event = require("ui/event")
local Geom = require("ui/geometry")
@ -15,6 +14,7 @@ local FrameContainer = require("ui/widget/container/framecontainer")
local ImageWidget = require("ui/widget/imagewidget")
local InputContainer = require("ui/widget/container/inputcontainer")
local ProgressWidget = require("ui/widget/progresswidget")
local Screenshoter = require("ui/widget/screenshoter")
local Size = require("ui/size")
local TitleBar = require("ui/widget/titlebar")
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
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())
end
@ -811,8 +811,8 @@ function ImageViewer:onSaveImageView()
self:update()
UIManager:forceRePaint()
end
local screenshots_dir = G_reader_settings:readSetting("screenshot_dir") or DataStorage:getDataDir() .. "/screenshots/"
local screenshot_name = os.date(screenshots_dir .. "ImageViewer" .. "_%Y-%m-%d_%H%M%S.png")
local screenshot_dir = Screenshoter:getScreenshotDir()
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))
return true
end

@ -1,16 +1,16 @@
local BD = require("ui/bidi")
local ConfirmBox = require("ui/widget/confirmbox")
local MultiConfirmBox = require("ui/widget/multiconfirmbox")
local ButtonDialog = require("ui/widget/buttondialog")
local DataStorage = require("datastorage")
local GestureRange = require("ui/gesturerange")
local InputContainer = require("ui/widget/container/inputcontainer")
local UIManager = require("ui/uimanager")
local filemanagerutil = require("apps/filemanager/filemanagerutil")
local Screen = require("device").screen
local T = require("ffi/util").template
local _ = require("gettext")
local Screenshoter = InputContainer:extend{
prefix = 'Screenshot',
prefix = "Screenshot",
default_dir = DataStorage:getFullDataDir() .. "/screenshots",
}
function Screenshoter:init()
@ -33,41 +33,43 @@ function Screenshoter:init()
}
end
function Screenshoter:onScreenshot(filename, when_done_func)
local screenshots_dir = G_reader_settings:readSetting("screenshot_dir") or DataStorage:getDataDir() .. "/screenshots/"
self.screenshot_fn_fmt = screenshots_dir .. self.prefix .. "_%Y-%m-%d_%H%M%S.png"
local screenshot_name = filename or os.date(self.screenshot_fn_fmt)
function Screenshoter:getScreenshotDir()
local screenshot_dir = G_reader_settings:readSetting("screenshot_dir")
return screenshot_dir and screenshot_dir:gsub("/$", "") or self.default_dir
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)
local confirm_box
confirm_box = ConfirmBox:new{
text = T( _("Screenshot saved to:\n%1"), BD.filepath(screenshot_name)),
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 = {{
local file = self.ui and self.ui.document and self.ui.document.file -- currently opened book
local dialog
local buttons = {
{
{
text = _("Delete"),
callback = function()
local __ = os.remove(screenshot_name)
UIManager:close(confirm_box)
if when_done_func then when_done_func() end
os.remove(screenshot_name)
dialog:onClose()
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,
},
},
{
{
text = _("View"),
callback = function()
local image_viewer = require("ui/widget/imageviewer"):new{
local ImageViewer = require("ui/widget/imageviewer")
local image_viewer = ImageViewer:new{
file = screenshot_name,
modal = true,
with_title_bar = false,
@ -76,37 +78,43 @@ function Screenshoter:onScreenshot(filename, when_done_func)
UIManager:show(image_viewer)
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
UIManager:setDirty(nil, "full")
return true
end
function Screenshoter:chooseFolder()
local screenshot_dir_default = DataStorage:getFullDataDir() .. "/screenshots/"
local screenshot_dir = G_reader_settings:readSetting("screenshot_dir") or screenshot_dir_default
local confirm_box = MultiConfirmBox:new{
text = T(_("Screenshot folder is set to:\n%1\n\nChoose a new folder for screenshots?"), screenshot_dir),
choice1_text = _("Use default"),
choice1_callback = function()
G_reader_settings:saveSetting("screenshot_dir", screenshot_dir_default)
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)
local title_header = _("Current screenshot folder:")
local current_path = G_reader_settings:readSetting("screenshot_dir")
local default_path = self.default_dir
local caller_callback = function(path)
G_reader_settings:saveSetting("screenshot_dir", path)
end
filemanagerutil.showChooseDialog(title_header, caller_callback, current_path, default_path)
end
function Screenshoter:onTapDiagonal()

@ -32,6 +32,7 @@ local MyClipping = require("clip")
local NetworkMgr = require("ui/network/manager")
local UIManager = require("ui/uimanager")
local WidgetContainer = require("ui/widget/container/widgetcontainer")
local filemanagerutil = require("apps/filemanager/filemanagerutil")
local T = require("ffi/util").template
local logger = require("logger")
local _ = require("gettext")
@ -308,40 +309,17 @@ function Exporter:addToMainMenu(menu_items)
end
function Exporter:chooseFolder()
local function set_targets_clipping_dir(dir)
for k in pairs(self.targets) do
self.targets[k].clipping_dir = dir
local settings = G_reader_settings:readSetting("exporter", {})
local title_header = _("Current export folder:")
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
local clipping_dir_default = DataStorage:getFullDataDir() .. "/clipboard"
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)
filemanagerutil.showChooseDialog(title_header, caller_callback, current_path, default_path)
end
return Exporter

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

Loading…
Cancel
Save