2
0
mirror of https://github.com/koreader/koreader synced 2024-11-10 01:10:34 +00:00
koreader/reader.lua

178 lines
4.4 KiB
Lua
Raw Normal View History

#!./koreader-base
2012-06-11 16:37:58 +00:00
2013-07-01 06:55:28 +00:00
require "defaults"
package.path = "./frontend/?.lua;./?.lua"
2013-04-21 08:49:00 +00:00
package.cpath = "/usr/lib/lua/?.so"
2013-10-18 20:38:07 +00:00
local UIManager = require("ui/uimanager")
2013-10-23 14:51:07 +00:00
local Menu = require("ui/widget/menu")
2013-10-18 20:38:07 +00:00
local InfoMessage = require("ui/widget/infomessage")
local ReaderUI = require("ui/readerui")
local DocumentRegistry = require("document/documentregistry")
local DocSettings = require("docsettings")
local Dbg = require("dbg")
local FileManager = require("apps/filemanager/filemanager")
local Device = require("ui/device")
local Screen = require("ui/screen")
local _ = require("gettext")
2013-02-02 19:41:35 +00:00
Profiler = nil
2013-02-02 19:41:35 +00:00
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()
2013-04-07 08:13:08 +00:00
input.fakeTapInput(dev,
math.min(width, height)/2,
math.max(width, height)-30
)
end
end
end
2013-04-07 08:13:08 +00:00
os.exit(0)
end
2013-08-14 09:29:05 +00:00
function showReaderUI(file, pass)
local document = DocumentRegistry:openDocument(file)
if not document then
2013-04-07 08:13:08 +00:00
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(),
2012-06-11 16:37:58 +00:00
document = document,
password = pass
}
UIManager:show(reader)
end
2013-02-02 19:41:35 +00:00
function showHomePage(path)
2013-08-14 09:29:05 +00:00
UIManager:show(FileManager:new{
dimen = Screen:getSize(),
root_path = path,
onExit = function()
exitReader()
UIManager:quit()
end
2013-08-14 09:29:05 +00:00
})
end
2012-06-11 16:37:58 +00:00
-- option parsing:
2013-10-18 20:38:07 +00:00
local longopts = {
2012-06-11 16:37:58 +00:00
debug = "d",
profile = "p",
help = "h",
2012-06-11 16:37:58 +00:00
}
function showusage()
2013-04-07 08:13:08 +00:00
print(_("usage: ./reader.lua [OPTION] ... path"))
print(_("Read all the books on your E-Ink reader"))
2012-06-11 16:37:58 +00:00
print("")
2013-04-07 08:13:08 +00:00
print(_("-d start in debug mode"))
print(_("-p [rows] enable Lua code profiling"))
2013-04-07 08:13:08 +00:00
print(_("-h show this usage help"))
2012-06-11 16:37:58 +00:00
print("")
2013-04-07 08:13:08 +00:00
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"))
2012-06-11 16:37:58 +00:00
print("")
2013-04-07 08:13:08 +00:00
print(_("If you don't pass any path, the last viewed document will be opened"))
2012-06-11 16:37:58 +00:00
print("")
2013-04-07 08:13:08 +00:00
print(_("This software is licensed under the GPLv3."))
print(_("See http://github.com/koreader/kindlepdfviewer for more info."))
2012-06-11 16:37:58 +00:00
return
end
2012-11-01 02:02:53 +00:00
local argidx = 1
while argidx <= #ARGV do
local arg = ARGV[argidx]
2013-03-12 17:18:53 +00:00
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
Dbg:turnOn()
elseif arg == "-p" then
2013-08-19 14:07:19 +00:00
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
2012-06-11 16:37:58 +00:00
end
if Device:hasNoKeyboard() then
2012-06-27 08:26:06 +00:00
-- remove menu item shortcut for K4
Menu.is_enable_shortcut = false
end
2012-06-12 04:10:44 +00:00
-- 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")
2012-06-11 16:37:58 +00:00
--@TODO we can read version here, refer to commit in master tree: (houqp)
--87712cf0e43fed624f8a9f610be42b1fe174b9fe
2012-06-11 16:37:58 +00:00
do
local fl = Device:getFrontlight()
if fl and fl.restore_settings then
local intensity = G_reader_settings:readSetting("frontlight_intensity")
intensity = intensity or fl.intensity
fl:setIntensity(intensity)
end
end
2012-06-11 16:37:58 +00:00
if ARGV[argidx] and ARGV[argidx] ~= "" then
2012-11-01 02:02:53 +00:00
if lfs.attributes(ARGV[argidx], "mode") == "directory" then
2013-02-02 19:41:35 +00:00
showHomePage(ARGV[argidx])
2012-11-01 02:02:53 +00:00
elseif lfs.attributes(ARGV[argidx], "mode") == "file" then
2013-08-14 09:29:05 +00:00
showReaderUI(ARGV[argidx])
2012-06-11 16:37:58 +00:00
end
UIManager:run()
elseif last_file and lfs.attributes(last_file, "mode") == "file" then
2013-08-14 09:29:05 +00:00
showReaderUI(last_file)
UIManager:run()
else
return showusage()
end
2013-03-16 02:02:08 +00:00
exitReader()