mirror of https://github.com/koreader/koreader
bug fix & rewrite filemanager
parent
aef2c4123e
commit
caf7ebb9ae
@ -0,0 +1,88 @@
|
|||||||
|
require "ui/widget/filechooser"
|
||||||
|
require "apps/filemanager/fmhistory"
|
||||||
|
require "apps/filemanager/fmmenu"
|
||||||
|
|
||||||
|
|
||||||
|
FileManager = InputContainer:extend{
|
||||||
|
title = _("FileManager"),
|
||||||
|
width = Screen:getWidth(),
|
||||||
|
height = Screen:getHeight(),
|
||||||
|
root_path = './',
|
||||||
|
-- our own size
|
||||||
|
dimen = Geom:new{ w = 400, h = 600 },
|
||||||
|
onExit = function() end,
|
||||||
|
}
|
||||||
|
|
||||||
|
function FileManager:init()
|
||||||
|
local exclude_dirs = {"%.sdr$"}
|
||||||
|
|
||||||
|
self.show_parent = self.show_parent or self
|
||||||
|
|
||||||
|
local file_chooser = FileChooser:new{
|
||||||
|
_name = 'fuck',
|
||||||
|
is_popout = false,
|
||||||
|
is_borderless = true,
|
||||||
|
has_close_button = true,
|
||||||
|
dir_filter = function(dirname)
|
||||||
|
for _, pattern in ipairs(exclude_dirs) do
|
||||||
|
if dirname:match(pattern) then return end
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end,
|
||||||
|
file_filter = function(filename)
|
||||||
|
if DocumentRegistry:getProvider(filename) then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
function file_chooser:onFileSelect(file)
|
||||||
|
showReaderUI(file)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
self.banner = FrameContainer:new{
|
||||||
|
padding = 0,
|
||||||
|
bordersize = 0,
|
||||||
|
TextWidget:new{
|
||||||
|
face = Font:getFace("tfont", 24),
|
||||||
|
text = self.title,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self.layout = VerticalGroup:new{
|
||||||
|
_name = 'fm',
|
||||||
|
self.banner,
|
||||||
|
file_chooser,
|
||||||
|
}
|
||||||
|
|
||||||
|
local fm_ui = FrameContainer:new{
|
||||||
|
padding = 0,
|
||||||
|
bordersize = 0,
|
||||||
|
padding = self.padding,
|
||||||
|
background = 0,
|
||||||
|
self.layout,
|
||||||
|
}
|
||||||
|
|
||||||
|
self[1] = fm_ui
|
||||||
|
|
||||||
|
self.menu = FileManagerMenu:new{
|
||||||
|
ui = self
|
||||||
|
}
|
||||||
|
table.insert(self, self.menu)
|
||||||
|
table.insert(self, FileManagerHistory:new{
|
||||||
|
ui = self,
|
||||||
|
menu = self.menu
|
||||||
|
})
|
||||||
|
|
||||||
|
self:handleEvent(Event:new("SetDimensions", self.dimen))
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function FileManager:onClose()
|
||||||
|
UIManager:close(self)
|
||||||
|
if self.onExit then
|
||||||
|
self:onExit()
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
@ -0,0 +1,73 @@
|
|||||||
|
FileManagerHistory = InputContainer:extend{
|
||||||
|
hist_menu_title = _("History"),
|
||||||
|
}
|
||||||
|
|
||||||
|
function FileManagerHistory:init()
|
||||||
|
self.ui.menu:registerToMainMenu(self)
|
||||||
|
end
|
||||||
|
|
||||||
|
function FileManagerHistory:onSetDimensions(dimen)
|
||||||
|
self.dimen = dimen
|
||||||
|
end
|
||||||
|
|
||||||
|
function FileManagerHistory:onShowHist()
|
||||||
|
self:updateItemTable()
|
||||||
|
|
||||||
|
local menu_container = CenterContainer:new{
|
||||||
|
dimen = Screen:getSize(),
|
||||||
|
}
|
||||||
|
|
||||||
|
local hist_menu = Menu:new{
|
||||||
|
title = _("History"),
|
||||||
|
item_table = self.hist,
|
||||||
|
ui = self.ui,
|
||||||
|
width = Screen:getWidth()-50,
|
||||||
|
height = Screen:getHeight()-50,
|
||||||
|
show_parent = menu_container,
|
||||||
|
}
|
||||||
|
|
||||||
|
table.insert(menu_container, hist_menu)
|
||||||
|
|
||||||
|
hist_menu.close_callback = function()
|
||||||
|
UIManager:close(menu_container)
|
||||||
|
end
|
||||||
|
|
||||||
|
UIManager:show(menu_container)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
function FileManagerHistory:addToMainMenu(tab_item_table)
|
||||||
|
-- insert table to main reader menu
|
||||||
|
table.insert(tab_item_table.main, {
|
||||||
|
text = self.hist_menu_title,
|
||||||
|
callback = function()
|
||||||
|
self:onShowHist()
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
function FileManagerHistory:updateItemTable()
|
||||||
|
function readHistDir(order_arg, re)
|
||||||
|
local pipe_out = io.popen("ls "..order_arg.." -1 ./history")
|
||||||
|
for f in pipe_out:lines() do
|
||||||
|
table.insert(re, {
|
||||||
|
dir = DocSettings:getPathFromHistory(f),
|
||||||
|
name = DocSettings:getNameFromHistory(f),
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
self.hist = {}
|
||||||
|
local last_files = {}
|
||||||
|
readHistDir("-c", last_files)
|
||||||
|
for _,v in pairs(last_files) do
|
||||||
|
table.insert(self.hist, {
|
||||||
|
text = v.name,
|
||||||
|
callback = function()
|
||||||
|
showReaderUI(v.dir .. "/" .. v.name)
|
||||||
|
end
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
@ -0,0 +1,131 @@
|
|||||||
|
require "ui/widget/menu"
|
||||||
|
require "ui/widget/touchmenu"
|
||||||
|
|
||||||
|
FileManagerMenu = InputContainer:extend{
|
||||||
|
tab_item_table = nil,
|
||||||
|
registered_widgets = {},
|
||||||
|
}
|
||||||
|
|
||||||
|
function FileManagerMenu:init()
|
||||||
|
self.tab_item_table = {
|
||||||
|
main = {
|
||||||
|
icon = "resources/icons/appbar.pokeball.png",
|
||||||
|
},
|
||||||
|
home = {
|
||||||
|
icon = "resources/icons/appbar.home.png",
|
||||||
|
callback = function()
|
||||||
|
UIManager:close(self.menu_container)
|
||||||
|
self.ui:onClose()
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
self.registered_widgets = {}
|
||||||
|
|
||||||
|
if Device:hasKeyboard() then
|
||||||
|
self.key_events = {
|
||||||
|
ShowMenu = { { "Menu" }, doc = _("show menu") },
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function FileManagerMenu:initGesListener()
|
||||||
|
self.ges_events = {
|
||||||
|
TapShowMenu = {
|
||||||
|
GestureRange:new{
|
||||||
|
ges = "tap",
|
||||||
|
range = Geom:new{
|
||||||
|
x = 0,
|
||||||
|
y = 0,
|
||||||
|
w = Screen:getWidth()*3/4,
|
||||||
|
h = Screen:getHeight()/4,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
function FileManagerMenu:setUpdateItemTable()
|
||||||
|
for _, widget in pairs(self.registered_widgets) do
|
||||||
|
widget:addToMainMenu(self.tab_item_table)
|
||||||
|
end
|
||||||
|
|
||||||
|
if Device:hasFrontlight() then
|
||||||
|
table.insert(self.tab_item_table.main, {
|
||||||
|
text = _("Frontlight settings"),
|
||||||
|
callback = function()
|
||||||
|
ReaderFrontLight:onShowFlDialog()
|
||||||
|
end
|
||||||
|
})
|
||||||
|
end
|
||||||
|
table.insert(self.tab_item_table.main, {
|
||||||
|
text = _("Help"),
|
||||||
|
callback = function()
|
||||||
|
UIManager:show(InfoMessage:new{
|
||||||
|
text = _("Please report bugs to https://github.com/koreader/ koreader/issues, Click at the bottom of the page for more options"),
|
||||||
|
})
|
||||||
|
end
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
function FileManagerMenu:onShowMenu()
|
||||||
|
if #self.tab_item_table.main == 0 then
|
||||||
|
self:setUpdateItemTable()
|
||||||
|
end
|
||||||
|
|
||||||
|
local menu_container = CenterContainer:new{
|
||||||
|
ignore = "height",
|
||||||
|
dimen = Screen:getSize(),
|
||||||
|
}
|
||||||
|
|
||||||
|
local main_menu = nil
|
||||||
|
if Device:isTouchDevice() then
|
||||||
|
main_menu = TouchMenu:new{
|
||||||
|
width = Screen:getWidth(),
|
||||||
|
tab_item_table = {
|
||||||
|
self.tab_item_table.main,
|
||||||
|
self.tab_item_table.home,
|
||||||
|
},
|
||||||
|
show_parent = menu_container,
|
||||||
|
}
|
||||||
|
else
|
||||||
|
main_menu = Menu:new{
|
||||||
|
title = _("File manager menu"),
|
||||||
|
item_table = {},
|
||||||
|
width = Screen:getWidth() - 100,
|
||||||
|
}
|
||||||
|
|
||||||
|
for _,item_table in pairs(self.tab_item_table) do
|
||||||
|
for k,v in ipairs(item_table) do
|
||||||
|
table.insert(main_menu.item_table, v)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
main_menu.close_callback = function ()
|
||||||
|
UIManager:close(menu_container)
|
||||||
|
end
|
||||||
|
|
||||||
|
menu_container[1] = main_menu
|
||||||
|
-- maintain a reference to menu_container
|
||||||
|
self.menu_container = menu_container
|
||||||
|
UIManager:show(menu_container)
|
||||||
|
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
function FileManagerMenu:onTapShowMenu()
|
||||||
|
self:onShowMenu()
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
function FileManagerMenu:onSetDimensions(dimen)
|
||||||
|
-- update listening according to new screen dimen
|
||||||
|
if Device:isTouchDevice() then
|
||||||
|
self:initGesListener()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function FileManagerMenu:registerToMainMenu(widget)
|
||||||
|
table.insert(self.registered_widgets, widget)
|
||||||
|
end
|
||||||
|
|
Loading…
Reference in New Issue