bug fix & rewrite filemanager

pull/214/head
Qingping Hou 11 years ago
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

@ -4,34 +4,15 @@ require "defaults"
package.path = "./frontend/?.lua"
package.cpath = "/usr/lib/lua/?.so"
require "ui/uimanager"
require "ui/widget/filechooser"
require "ui/widget/infomessage"
require "ui/readerui"
require "document/document"
require "settings"
require "dbg"
require "gettext"
require "apps/filemanager/fm"
HomeMenu = InputContainer:new{
item_table = {},
key_events = {
TapShowMenu = { {"Home"}, doc = _("Show Home Menu")},
},
ges_events = {
TapShowMenu = {
GestureRange:new{
ges = "tap",
range = Geom:new{
x = 0, y = 0,
w = Screen:getWidth(),
h = 25,
}
}
},
},
}
function exitReader()
G_reader_settings:close()
@ -58,70 +39,7 @@ function exitReader()
os.exit(0)
end
function HomeMenu:setUpdateItemTable()
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
local hist_sub_item_table = {}
local last_files = {}
readHistDir("-c", last_files)
for _,v in pairs(last_files) do
table.insert(hist_sub_item_table, {
text = v.name,
callback = function()
showReader(v.dir .. "/" .. v.name)
end
})
end
table.insert(self.item_table, {
text = _("Last documents"),
sub_item_table = hist_sub_item_table,
})
table.insert(self.item_table, {
text = _("Exit"),
callback = function()
exitReader()
end
})
end
function HomeMenu:onTapShowMenu()
self.item_table = {}
self:setUpdateItemTable()
local menu_container = CenterContainer:new{
ignore = "height",
dimen = Screen:getSize(),
}
local home_menu = Menu:new{
show_parent = menu_container,
title = _("Home menu"),
item_table = self.item_table,
width = Screen:getWidth() - 100,
}
menu_container[1] = home_menu
home_menu.close_callback = function ()
UIManager:close(menu_container)
end
UIManager:show(menu_container)
return true
end
function showReader(file, pass)
function showReaderUI(file, pass)
local document = DocumentRegistry:openDocument(file)
if not document then
UIManager:show(InfoMessage:new{
@ -141,47 +59,14 @@ function showReader(file, pass)
end
function showHomePage(path)
local exclude_dirs = {"%.sdr$"}
local HomePage = InputContainer:new{
}
local FileManager = FileChooser:new{
show_parent = HomePage,
title = _("FileManager"),
path = path,
width = Screen:getWidth(),
height = Screen:getHeight(),
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
UIManager:show(FileManager:new{
dimen = Screen:getSize(),
root_path = path,
onExit = function()
exitReader()
UIManager:quit()
end
}
table.insert(HomePage, FileManager)
table.insert(HomePage, HomeMenu)
function FileManager:onFileSelect(file)
showReader(file)
return true
end
function FileManager:onClose()
exitReader()
--UIManager:quit()
return true
end
UIManager:show(HomePage)
})
end
@ -243,11 +128,11 @@ if ARGV[argidx] and ARGV[argidx] ~= "" then
if lfs.attributes(ARGV[argidx], "mode") == "directory" then
showHomePage(ARGV[argidx])
elseif lfs.attributes(ARGV[argidx], "mode") == "file" then
showReader(ARGV[argidx])
showReaderUI(ARGV[argidx])
end
UIManager:run()
elseif last_file and lfs.attributes(last_file, "mode") == "file" then
showReader(last_file)
showReaderUI(last_file)
UIManager:run()
else
return showusage()

Loading…
Cancel
Save