Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

decouple UI from core document code #4269

Merged
merged 2 commits into from Oct 14, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion frontend/apps/filemanager/filemanager.lua
Expand Up @@ -274,7 +274,7 @@ function FileManager:init()
and #(DocumentRegistry:getProviders(file)) > 1,
callback = function()
UIManager:close(self.file_dialog)
DocumentRegistry:showSetProviderButtons(file, FileManager.instance, self, ReaderUI)
self:showSetProviderButtons(file, FileManager.instance, ReaderUI)
end,
},
{
Expand Down
84 changes: 0 additions & 84 deletions frontend/document/documentregistry.lua
Expand Up @@ -2,14 +2,9 @@
This is a registry for document providers
]]--

local ConfirmBox = require("ui/widget/confirmbox")
local OpenWithDialog = require("ui/widget/openwithdialog")
local UIManager = require("ui/uimanager")
local logger = require("logger")
local lfs = require("libs/libkoreader-lfs")
local util = require("util")
local _ = require("gettext")
local T = require("ffi/util").template

local DocumentRegistry = {
registry = {},
Expand Down Expand Up @@ -147,85 +142,6 @@ function DocumentRegistry:setProvider(file, provider, all)
end
end

function DocumentRegistry:showSetProviderButtons(file, filemanager_instance, ui, reader_ui)
local __, filename_pure = util.splitFilePathName(file)
local filename_suffix = util.getFileNameSuffix(file)

local buttons = {}
local radio_buttons = {}
local providers = self:getProviders(file)

for ___, provider in ipairs(providers) do
-- we have no need for extension, mimetype, weights, etc. here
provider = provider.provider
table.insert(radio_buttons, {
{
text = provider.provider_name,
checked = self:getProvider(file) == provider,
provider = provider,
},
})
end

table.insert(buttons, {
{
text = _("Cancel"),
callback = function()
UIManager:close(self.set_provider_dialog)
end,
},
{
text = _("Open"),
is_enter_default = true,
callback = function()
local provider = self.set_provider_dialog.radio_button_table.checked_button.provider

-- always for this file
if self.set_provider_dialog._check_file_button.checked then
UIManager:show(ConfirmBox:new{
text = T(_("Always open '%2' with %1?"),
provider.provider_name, filename_pure),
ok_text = _("Always"),
ok_callback = function()
self:setProvider(file, provider, false)

filemanager_instance:onClose()
reader_ui:showReader(file, provider)
UIManager:close(self.set_provider_dialog)
end,
})
-- always for all files of this file type
elseif self.set_provider_dialog._check_global_button.checked then
UIManager:show(ConfirmBox:new{
text = T(_("Always open %2 files with %1?"),
provider.provider_name, filename_suffix),
ok_text = _("Always"),
ok_callback = function()
self:setProvider(file, provider, true)

filemanager_instance:onClose()
reader_ui:showReader(file, provider)
UIManager:close(self.set_provider_dialog)
end,
})
else
-- just once
filemanager_instance:onClose()
reader_ui:showReader(file, provider)
UIManager:close(self.set_provider_dialog)
end
end,
},
})

self.set_provider_dialog = OpenWithDialog:new{
title = T(_("Open %1 with:"), filename_pure),
radio_buttons = radio_buttons,
buttons = buttons,
}
UIManager:show(self.set_provider_dialog)
end

function DocumentRegistry:openDocument(file, provider)
-- force a GC, so that any previous document used memory can be reused
-- immediately by this new document without having to wait for the
Expand Down
97 changes: 90 additions & 7 deletions frontend/ui/widget/filechooser.lua
@@ -1,17 +1,21 @@
local Device = require("device")
local DocSettings = require("docsettings")
local DocumentRegistry = require("document/documentregistry")
local OpenWithDialog = require("ui/widget/openwithdialog")
local ConfirmBox = require("ui/widget/confirmbox")
local Font = require("ui/font")
local Menu = require("ui/widget/menu")
local UIManager = require("ui/uimanager")
local ffi = require("ffi")
local lfs = require("libs/libkoreader-lfs")
local util = require("ffi/util")
local ffiUtil = require("ffi/util")
local T = ffiUtil.template
local C = ffi.C
local _ = require("gettext")
local Screen = Device.screen
local getFileNameSuffix = require("util").getFileNameSuffix
local getFriendlySize = require("util").getFriendlySize
local util = require("util")
local getFileNameSuffix = util.getFileNameSuffix
local getFriendlySize = util.getFriendlySize

ffi.cdef[[
int strcoll (const char *str1, const char *str2);
Expand Down Expand Up @@ -210,7 +214,7 @@ function FileChooser:genItemTableFromPath(path)
if num_items == 1 then
istr = _("1 item")
else
istr = util.template(_("%1 items"), num_items)
istr = ffiUtil.template(_("%1 items"), num_items)
end
local text
if dir.name == ".." then
Expand Down Expand Up @@ -267,7 +271,7 @@ function FileChooser:genItemTableFromPath(path)
if ffi.os == "Windows" then
for k, v in pairs(item_table) do
if v.text then
v.text = util.multiByteToUTF8(v.text) or ""
v.text = ffiUtil.multiByteToUTF8(v.text) or ""
end
end
end
Expand All @@ -283,7 +287,7 @@ end
function FileChooser:refreshPath()
local itemmatch = nil

local _, folder_name = require("util").splitFilePathName(self.path)
local _, folder_name = util.splitFilePathName(self.path)
Screen:setWindowTitle(folder_name)

if self.focused_path then
Expand All @@ -298,7 +302,7 @@ function FileChooser:refreshPath()
end

function FileChooser:changeToPath(path, focused_path)
path = util.realpath(path)
path = ffiUtil.realpath(path)
self.path = path

if focused_path then
Expand Down Expand Up @@ -383,4 +387,83 @@ function FileChooser:getNextFile(curr_file)
return next_file
end

function FileChooser:showSetProviderButtons(file, filemanager_instance, reader_ui)
local __, filename_pure = util.splitFilePathName(file)
local filename_suffix = util.getFileNameSuffix(file)

local buttons = {}
local radio_buttons = {}
local providers = DocumentRegistry:getProviders(file)

for ___, provider in ipairs(providers) do
-- we have no need for extension, mimetype, weights, etc. here
provider = provider.provider
table.insert(radio_buttons, {
{
text = provider.provider_name,
checked = DocumentRegistry:getProvider(file) == provider,
provider = provider,
},
})
end

table.insert(buttons, {
{
text = _("Cancel"),
callback = function()
UIManager:close(self.set_provider_dialog)
end,
},
{
text = _("Open"),
is_enter_default = true,
callback = function()
local provider = self.set_provider_dialog.radio_button_table.checked_button.provider

-- always for this file
if self.set_provider_dialog._check_file_button.checked then
UIManager:show(ConfirmBox:new{
text = T(_("Always open '%2' with %1?"),
provider.provider_name, filename_pure),
ok_text = _("Always"),
ok_callback = function()
DocumentRegistry:setProvider(file, provider, false)

filemanager_instance:onClose()
reader_ui:showReader(file, provider)
UIManager:close(self.set_provider_dialog)
end,
})
-- always for all files of this file type
elseif self.set_provider_dialog._check_global_button.checked then
UIManager:show(ConfirmBox:new{
text = T(_("Always open %2 files with %1?"),
provider.provider_name, filename_suffix),
ok_text = _("Always"),
ok_callback = function()
DocumentRegistry:setProvider(file, provider, true)

filemanager_instance:onClose()
reader_ui:showReader(file, provider)
UIManager:close(self.set_provider_dialog)
end,
})
else
-- just once
filemanager_instance:onClose()
reader_ui:showReader(file, provider)
UIManager:close(self.set_provider_dialog)
end
end,
},
})

self.set_provider_dialog = OpenWithDialog:new{
title = T(_("Open %1 with:"), filename_pure),
radio_buttons = radio_buttons,
buttons = buttons,
}
UIManager:show(self.set_provider_dialog)
end

return FileChooser
26 changes: 26 additions & 0 deletions kodev
Expand Up @@ -243,6 +243,27 @@ usage: clean <TARGET>
TARGET:
${SUPPORTED_TARGETS}"

while [[ "${1}" == '-'* ]]; do
PARAM=$(echo "${1}" | awk -F= '{print $1}')
VALUE=$(echo "${1}" | awk -F= '{print $2}')
case "${PARAM}" in
--no-debug)
export KODEBUG=
KODEBUG_NO_DEFAULT=1
;;
--debug)
export KODEBUG=1
KODEBUG_NO_DEFAULT=1
;;
*)
echo "ERROR: unknown option \"$PARAM\""
echo "${BUILD_HELP_MSG}"
exit 1
;;
esac
shift 1
done

case "${1}" in
-h | --help)
echo "${CLEAN_HELP_MSG}"
Expand Down Expand Up @@ -280,6 +301,11 @@ ${SUPPORTED_TARGETS}"
make TARGET=win32 clean
;;
*)
if [ -z "${KODEBUG_NO_DEFAULT}" ]; then # no explicit --debug / --no-debug
# builds a debug build by default, like kodev-run
export KODEBUG=1
fi

make clean
;;
esac
Expand Down