From 68265336f46a64428ba3b9cfc0cf42469cef7f9a Mon Sep 17 00:00:00 2001 From: chrox Date: Tue, 28 Oct 2014 17:14:06 +0800 Subject: [PATCH] fix #1034 by refactoring path chooser to a download manager Now directories visible in the filemanager should also be visible in the path chooser --- frontend/ui/downloadmgr.lua | 36 ++++++++++++++++++++++ frontend/ui/widget/opdsbrowser.lua | 9 ++---- plugins/calibrecompanion.koplugin/main.lua | 10 ++---- plugins/zsync.koplugin/main.lua | 12 ++------ 4 files changed, 42 insertions(+), 25 deletions(-) create mode 100644 frontend/ui/downloadmgr.lua diff --git a/frontend/ui/downloadmgr.lua b/frontend/ui/downloadmgr.lua new file mode 100644 index 000000000..36ed14022 --- /dev/null +++ b/frontend/ui/downloadmgr.lua @@ -0,0 +1,36 @@ +local PathChooser = require("ui/widget/pathchooser") +local UIManager = require("ui/uimanager") +local util = require("ffi/util") +local _ = require("gettext") + +local DownloadMgr = { + title = _("Choose download directory"), + onConfirm = function() end, +} + +function DownloadMgr:new(o) + local o = o or {} + setmetatable(o, self) + self.__index = self + return o +end + +function DownloadMgr:chooseDir() + local lastdir = G_reader_settings:readSetting("lastdir") + local download_dir = G_reader_settings:readSetting("download_dir") + local path_chooser = PathChooser:new{ + title = self.title, + path = download_dir and (download_dir .. "/..") or lastdir, + show_hidden = G_reader_settings:readSetting("show_hidden"), + onConfirm = function(path) + -- hack to remove additional parent + if path:sub(-3, -1) == "/.." then + path = path:sub(1, -4) + end + self.onConfirm(util.realpath(path)) + end + } + UIManager:show(path_chooser) +end + +return DownloadMgr diff --git a/frontend/ui/widget/opdsbrowser.lua b/frontend/ui/widget/opdsbrowser.lua index 7ca39966d..eba63c93e 100644 --- a/frontend/ui/widget/opdsbrowser.lua +++ b/frontend/ui/widget/opdsbrowser.lua @@ -1,7 +1,6 @@ local MultiInputDialog = require("ui/widget/multiinputdialog") local ButtonDialog = require("ui/widget/buttondialog") local InfoMessage = require("ui/widget/infomessage") -local PathChooser = require("ui/widget/pathchooser") local lfs = require("libs/libkoreader-lfs") local OPDSParser = require("ui/opdsparser") local NetworkMgr = require("ui/networkmgr") @@ -456,17 +455,13 @@ function OPDSBrowser:showDownloads(item) { text = _("Set download directory"), callback = function() - local lastdir = G_reader_settings:readSetting("lastdir") - local download_dir = G_reader_settings:readSetting("download_dir") - local path_chooser = PathChooser:new{ + require("ui/downloadmgr"):new{ title = _("Choose download directory"), - path = download_dir and (download_dir .. "/..") or lastdir, onConfirm = function(path) DEBUG("set download directory to", path) G_reader_settings:saveSetting("download_dir", path) end, - } - UIManager:show(path_chooser) + }:chooseDir() end, } }) diff --git a/plugins/calibrecompanion.koplugin/main.lua b/plugins/calibrecompanion.koplugin/main.lua index 65eb8d7e4..1778d4ee0 100644 --- a/plugins/calibrecompanion.koplugin/main.lua +++ b/plugins/calibrecompanion.koplugin/main.lua @@ -1,5 +1,4 @@ local InputContainer = require("ui/widget/container/inputcontainer") -local PathChooser = require("ui/widget/pathchooser") local InfoMessage = require("ui/widget/infomessage") local UIManager = require("ui/uimanager") local util = require("ffi/util") @@ -126,19 +125,14 @@ end function CalibreCompanion:setInboxDir(host, port) local lastdir = G_reader_settings:readSetting("lastdir") or "." local calibre_device = self - local path_chooser = PathChooser:new{ + require("ui/downloadmgr"):new{ title = _("Choose inbox"), - path = lastdir .. "/..", onConfirm = function(inbox) - if inbox:sub(-3, -1) == "/.." then - inbox = inbox:sub(1, -4) - end DEBUG("set inbox directory", inbox) G_reader_settings:saveSetting("inbox_dir", inbox) calibre_device:initCalibreMQ(host, port) end, - } - UIManager:show(path_chooser) + }:chooseDir() end function CalibreCompanion:connect() diff --git a/plugins/zsync.koplugin/main.lua b/plugins/zsync.koplugin/main.lua index dd2597e30..9310a2ac6 100644 --- a/plugins/zsync.koplugin/main.lua +++ b/plugins/zsync.koplugin/main.lua @@ -6,7 +6,6 @@ local FileManager = require("apps/filemanager/filemanager") local VerticalGroup = require("ui/widget/verticalgroup") local VerticalSpan = require("ui/widget/verticalspan") local ButtonDialog = require("ui/widget/buttondialog") -local PathChooser = require("ui/widget/pathchooser") local InfoMessage = require("ui/widget/infomessage") local TextWidget = require("ui/widget/textwidget") local DocSettings = require("docsettings") @@ -235,21 +234,14 @@ end function ZSync:subscribe() DEBUG("subscribe documents") self.received = {} - local lastdir = G_reader_settings:readSetting("lastdir") - local inbox_dir = G_reader_settings:readSetting("inbox_dir") local zsync = self - local path_chooser = PathChooser:new{ + require("ui/downloadmgr"):new{ title = _("Choose inbox"), - path = inbox_dir and (inbox_dir .. "/..") or lastdir, onConfirm = function(inbox) - if inbox:sub(-3, -1) == "/.." then - inbox = inbox:sub(1, -4) - end G_reader_settings:saveSetting("inbox_dir", inbox) zsync:onChooseInbox(inbox) end, - } - UIManager:show(path_chooser) + }:chooseDir() end function ZSync:unsubscribe()