#!./koreader-base require "defaults" package.path = "./frontend/?.lua;./?.lua" package.cpath = "?.so;/usr/lib/lua/?.so" local DocSettings = require("docsettings") local _ = require("gettext") -- read settings and check for language override -- has to be done before requiring other files because -- they might call gettext on load G_reader_settings = DocSettings:open(".reader") local lang_locale = G_reader_settings:readSetting("language") if lang_locale then _.changeLang(lang_locale) end local UIManager = require("ui/uimanager") local Menu = require("ui/widget/menu") local InfoMessage = require("ui/widget/infomessage") local ReaderUI = require("ui/readerui") local DocumentRegistry = require("document/documentregistry") local DEBUG = require("dbg") local FileManager = require("apps/filemanager/filemanager") local Device = require("ui/device") local Screen = require("ui/screen") Profiler = nil function exitReader() if Profiler ~= nil then Profiler:stop() Profiler:dump("./profile.html") end G_reader_settings:close() input.closeAll() if not util.isEmulated() 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 showReaderUI(file, pass) DEBUG("opening file", file) if lfs.attributes(file, "mode") ~= "file" then UIManager:show(InfoMessage:new{ text = _("File does not exist") }) return end UIManager:show(InfoMessage:new{ text = _("opening file") .. file, timeout = 1, }) UIManager:scheduleIn(0.1, function() doShowReaderUI(file, pass) end) end function doShowReaderUI(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) UIManager:show(FileManager:new{ dimen = Screen:getSize(), root_path = path, onExit = function() exitReader() UIManager:quit() end }) end -- option parsing: local longopts = { debug = "d", profile = "p", 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(_("-p [rows] enable Lua code profiling")) 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 local argidx = 1 while argidx <= #ARGV do local arg = ARGV[argidx] argidx = argidx + 1 if arg == "--" then break end -- parse longopts if arg:sub(1,2) == "--" then local opt = longopts[arg:sub(3)] if opt ~= nil then arg = "-"..opt end end -- code for each option if arg == "-h" then return showusage() elseif arg == "-d" then DEBUG:turnOn() elseif arg == "-p" then local lulip = require("ffi/lulip") Profiler = lulip:new() pcall(function() -- set maxrows only if the optional arg is numeric Profiler:maxrows(ARGV[argidx] + 0) argidx = argidx + 1 end) Profiler:start() else -- not a recognized option, should be a filename argidx = argidx - 1 break end end if Device:hasNoKeyboard() then -- remove menu item shortcut for K4 Menu.is_enable_shortcut = false end -- read some global reader setting here: -- font local fontmap = G_reader_settings:readSetting("fontmap") if fontmap ~= nil then Font.fontmap = fontmap end -- last file local last_file = G_reader_settings:readSetting("lastfile") --@TODO we can read version here, refer to commit in master tree: (houqp) --87712cf0e43fed624f8a9f610be42b1fe174b9fe do local powerd = Device:getPowerDevice() if powerd and powerd.restore_settings then local intensity = G_reader_settings:readSetting("frontlight_intensity") intensity = intensity or powerd.flIntensity powerd:setIntensity(intensity) end end if ARGV[argidx] and ARGV[argidx] ~= "" then if lfs.attributes(ARGV[argidx], "mode") == "directory" then showHomePage(ARGV[argidx]) else showReaderUI(ARGV[argidx]) end UIManager:run() elseif last_file then showReaderUI(last_file) UIManager:run() else return showusage() end exitReader()