From b7d464ae4b4e5a8ff3c5e39a152de72180b9c11d Mon Sep 17 00:00:00 2001 From: Robert Date: Tue, 17 Sep 2019 13:01:40 +0200 Subject: [PATCH] Set screenshot output folder (#5382) Close: #4230 --- .../elements/common_settings_menu_table.lua | 8 ++++ .../ui/elements/filemanager_menu_order.lua | 1 + frontend/ui/elements/reader_menu_order.lua | 1 + frontend/ui/widget/screenshoter.lua | 41 ++++++++++++++++++- 4 files changed, 49 insertions(+), 2 deletions(-) diff --git a/frontend/ui/elements/common_settings_menu_table.lua b/frontend/ui/elements/common_settings_menu_table.lua index 9f4c2b031..bab5ded58 100644 --- a/frontend/ui/elements/common_settings_menu_table.lua +++ b/frontend/ui/elements/common_settings_menu_table.lua @@ -473,4 +473,12 @@ common_settings.document = { } common_settings.language = Language:getLangMenuTable() +common_settings.screenshot = { + text = _("Screenshot directory"), + callback = function() + local Screenshoter = require("ui/widget/screenshoter") + Screenshoter:chooseFolder() + end, +} + return common_settings diff --git a/frontend/ui/elements/filemanager_menu_order.lua b/frontend/ui/elements/filemanager_menu_order.lua index ab1df71e6..0c4ef8c6d 100644 --- a/frontend/ui/elements/filemanager_menu_order.lua +++ b/frontend/ui/elements/filemanager_menu_order.lua @@ -46,6 +46,7 @@ local order = { "ignore_sleepcover", "ignore_open_sleepcover", "mass_storage_settings", + "screenshot", }, navigation = { "back_to_exit", diff --git a/frontend/ui/elements/reader_menu_order.lua b/frontend/ui/elements/reader_menu_order.lua index 0b326aad9..78f1ad34c 100644 --- a/frontend/ui/elements/reader_menu_order.lua +++ b/frontend/ui/elements/reader_menu_order.lua @@ -65,6 +65,7 @@ local order = { "ignore_sleepcover", "ignore_open_sleepcover", "mass_storage_settings", + "screenshot", }, navigation = { "back_to_exit", diff --git a/frontend/ui/widget/screenshoter.lua b/frontend/ui/widget/screenshoter.lua index fdc5e1aa5..bd6c8f9a6 100644 --- a/frontend/ui/widget/screenshoter.lua +++ b/frontend/ui/widget/screenshoter.lua @@ -1,6 +1,8 @@ +local ButtonDialogTitle = require("ui/widget/buttondialogtitle") local ConfirmBox = require("ui/widget/confirmbox") local DataStorage = require("datastorage") local GestureRange = require("ui/gesturerange") +local InfoMessage = require("ui/widget/infomessage") local InputContainer = require("ui/widget/container/inputcontainer") local UIManager = require("ui/uimanager") local Screen = require("device").screen @@ -12,8 +14,6 @@ local Screenshoter = InputContainer:new{ } function Screenshoter:init() - local screenshots_dir = DataStorage:getDataDir() .. "/screenshots/" - self.screenshot_fn_fmt = screenshots_dir .. self.prefix .. "_%Y-%b-%d_%H%M%S.png" local diagonal = math.sqrt( math.pow(Screen:getWidth(), 2) + math.pow(Screen:getHeight(), 2) @@ -37,6 +37,8 @@ function Screenshoter:init() end function Screenshoter:onScreenshot(filename) + local screenshots_dir = G_reader_settings:readSetting("screenshot_dir") or DataStorage:getDataDir() .. "/screenshots/" + self.screenshot_fn_fmt = screenshots_dir .. self.prefix .. "_%Y-%b-%d_%H%M%S.png" local screenshot_name = filename or os.date(self.screenshot_fn_fmt) Screen:shot(screenshot_name) local widget = ConfirmBox:new{ @@ -54,6 +56,41 @@ function Screenshoter:onScreenshot(filename) return true end +function Screenshoter:chooseFolder() + local buttons = {} + table.insert(buttons, { + { + text = _("Choose screenshot directory"), + callback = function() + UIManager:close(self.choose_dialog) + require("ui/downloadmgr"):new{ + onConfirm = function(path) + G_reader_settings:saveSetting("screenshot_dir", path .. "/") + UIManager:show(InfoMessage:new{ + text = T(_("Screenshot directory set to:\n%1"), path), + timeout = 3, + }) + end, + }:chooseDir() + end, + } + }) + table.insert(buttons, { + { + text = _("Close"), + callback = function() + UIManager:close(self.choose_dialog) + end, + } + }) + local screenshot_dir = G_reader_settings:readSetting("screenshot_dir") or DataStorage:getDataDir() .. "/screenshots/" + self.choose_dialog = ButtonDialogTitle:new{ + title = T(_("Current screenshot directory:\n%1"), screenshot_dir), + buttons = buttons + } + UIManager:show(self.choose_dialog) +end + function Screenshoter:onTapDiagonal() return self:onScreenshot() end