#!./koreader-base 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" 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() input.closeAll() if util.isEmulated() == 0 then if Device:isKindle3() or (Device:getModel() == "KindleDXG") then -- send double menu key press events to trigger screen refresh os.execute("echo 'send 139' > /proc/keypad;echo 'send 139' > /proc/keypad") end if Device:isTouchDevice() and Device.survive_screen_saver then -- hack the swipe to unlock screen local dev = Device:getTouchInputDev() if dev then local width, height = Screen:getWidth(), Screen:getHeight() input.fakeTapInput(dev, math.min(width, height)/2, math.max(width, height)-30 ) end end end 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) local document = DocumentRegistry:openDocument(file) if not document then UIManager:show(InfoMessage:new{ text = _("No reader engine for this file") }) return end G_reader_settings:saveSetting("lastfile", file) local reader = ReaderUI:new{ dialog = readerwindow, dimen = Screen:getSize(), document = document, password = pass } UIManager:show(reader) 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 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 -- option parsing: longopts = { debug = "d", help = "h", } function showusage() print(_("usage: ./reader.lua [OPTION] ... path")) print(_("Read all the books on your E-Ink reader")) print("") print(_("-d start in debug mode")) print(_("-h show this usage help")) print("") print(_("If you give the name of a directory instead of a file path, a file")) print(_("chooser will show up and let you select a file")) print("") print(_("If you don't pass any path, the last viewed document will be opened")) print("") print(_("This software is licensed under the GPLv3.")) print(_("See http://github.com/koreader/kindlepdfviewer for more info.")) return end if ARGV[1] == "-h" then return showusage() end local argidx = 1 if ARGV[1] == "-d" then Dbg:turnOn() argidx = argidx + 1 else DEBUG = function() end end if Device:hasNoKeyboard() then -- remove menu item shortcut for K4 Menu.is_enable_shortcut = false end -- set up reader's setting: font G_reader_settings = DocSettings:open(".reader") fontmap = G_reader_settings:readSetting("fontmap") if fontmap ~= nil then Font.fontmap = fontmap end local last_file = G_reader_settings:readSetting("lastfile") --@TODO we can read version here, refer to commit in master tree: (houqp) --87712cf0e43fed624f8a9f610be42b1fe174b9fe 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]) end UIManager:run() elseif last_file and lfs.attributes(last_file, "mode") == "file" then showReader(last_file) UIManager:run() else return showusage() end exitReader()