2013-03-24 14:08:42 +00:00
|
|
|
#!./koreader-base
|
2012-06-11 16:37:58 +00:00
|
|
|
|
2013-07-01 06:55:28 +00:00
|
|
|
require "defaults"
|
2013-08-19 13:58:42 +00:00
|
|
|
package.path = "./frontend/?.lua;./?.lua"
|
2013-12-31 05:12:56 +00:00
|
|
|
package.cpath = "?.so;/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")
|
2013-12-28 10:21:30 +00:00
|
|
|
local DEBUG = require("dbg")
|
2013-10-18 20:38:07 +00:00
|
|
|
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
|
|
|
|
2013-08-06 14:53:44 +00:00
|
|
|
Profiler = nil
|
2013-02-02 19:41:35 +00:00
|
|
|
|
2013-03-16 01:54:49 +00:00
|
|
|
function exitReader()
|
2013-08-06 14:53:44 +00:00
|
|
|
if Profiler ~= nil then
|
|
|
|
Profiler:stop()
|
|
|
|
Profiler:dump("./profile.html")
|
|
|
|
end
|
|
|
|
|
2013-03-16 01:54:49 +00:00
|
|
|
G_reader_settings:close()
|
|
|
|
|
|
|
|
input.closeAll()
|
|
|
|
|
2013-08-22 13:10:29 +00:00
|
|
|
if not util.isEmulated() then
|
2013-03-16 01:54:49 +00:00
|
|
|
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
|
2013-03-17 11:33:59 +00:00
|
|
|
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,
|
2013-03-17 11:33:59 +00:00
|
|
|
math.min(width, height)/2,
|
|
|
|
math.max(width, height)-30
|
|
|
|
)
|
|
|
|
end
|
|
|
|
end
|
2013-03-16 01:54:49 +00:00
|
|
|
end
|
2013-04-07 08:13:08 +00:00
|
|
|
|
2013-03-23 09:22:49 +00:00
|
|
|
os.exit(0)
|
2013-03-16 01:54:49 +00:00
|
|
|
end
|
|
|
|
|
2013-08-14 09:29:05 +00:00
|
|
|
function showReaderUI(file, pass)
|
2013-12-28 10:21:30 +00:00
|
|
|
DEBUG("opening file", file)
|
|
|
|
UIManager:show(InfoMessage:new{
|
|
|
|
text = _("opening file") .. file,
|
|
|
|
timeout = 1,
|
|
|
|
})
|
|
|
|
UIManager:scheduleIn(0.1, function() doShowReaderUI(file, pass) end)
|
|
|
|
end
|
|
|
|
|
|
|
|
function doShowReaderUI(file, pass)
|
2012-06-12 06:38:52 +00:00
|
|
|
local document = DocumentRegistry:openDocument(file)
|
2012-06-10 15:38:16 +00:00
|
|
|
if not document then
|
2013-04-07 08:13:08 +00:00
|
|
|
UIManager:show(InfoMessage:new{
|
|
|
|
text = _("No reader engine for this file")
|
|
|
|
})
|
2012-06-10 15:38:16 +00:00
|
|
|
return
|
|
|
|
end
|
|
|
|
|
2013-03-16 01:54:49 +00:00
|
|
|
G_reader_settings:saveSetting("lastfile", file)
|
2012-06-10 15:38:16 +00:00
|
|
|
local reader = ReaderUI:new{
|
|
|
|
dialog = readerwindow,
|
|
|
|
dimen = Screen:getSize(),
|
2012-06-11 16:37:58 +00:00
|
|
|
document = document,
|
|
|
|
password = pass
|
2012-06-10 15:38:16 +00:00
|
|
|
}
|
2012-12-15 01:31:03 +00:00
|
|
|
UIManager:show(reader)
|
2012-06-10 15:38:16 +00:00
|
|
|
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()
|
2012-06-12 06:38:52 +00:00
|
|
|
end
|
2013-08-14 09:29:05 +00:00
|
|
|
})
|
2012-06-10 15:38:16 +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",
|
2013-08-06 14:53:44 +00:00
|
|
|
profile = "p",
|
2012-09-25 12:11:21 +00:00
|
|
|
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"))
|
2013-08-06 14:53:44 +00:00
|
|
|
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
|
2013-08-06 14:53:44 +00:00
|
|
|
while argidx <= #ARGV do
|
|
|
|
local arg = ARGV[argidx]
|
2013-03-12 17:18:53 +00:00
|
|
|
argidx = argidx + 1
|
2013-08-06 14:53:44 +00:00
|
|
|
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
|
2013-12-28 10:21:30 +00:00
|
|
|
DEBUG:turnOn()
|
2013-08-06 14:53:44 +00:00
|
|
|
elseif arg == "-p" then
|
2013-08-19 14:07:19 +00:00
|
|
|
local lulip = require("ffi/lulip")
|
2013-08-06 14:53:44 +00:00
|
|
|
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
|
|
|
|
|
2012-12-11 00:01:32 +00:00
|
|
|
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
|
|
|
|
2012-10-09 20:14:09 +00:00
|
|
|
--@TODO we can read version here, refer to commit in master tree: (houqp)
|
|
|
|
--87712cf0e43fed624f8a9f610be42b1fe174b9fe
|
2012-06-11 16:37:58 +00:00
|
|
|
|
2013-08-13 16:56:46 +00:00
|
|
|
do
|
2014-01-04 13:38:07 +00:00
|
|
|
local powerd = Device:getPowerDevice()
|
|
|
|
if powerd and powerd.restore_settings then
|
2013-08-13 16:56:46 +00:00
|
|
|
local intensity = G_reader_settings:readSetting("frontlight_intensity")
|
2014-01-04 13:38:07 +00:00
|
|
|
intensity = intensity or powerd.flIntensity
|
|
|
|
powerd:setIntensity(intensity)
|
2013-08-13 16:56:46 +00:00
|
|
|
end
|
|
|
|
end
|
2012-06-11 16:37:58 +00:00
|
|
|
|
2013-03-16 02:12:19 +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)
|
2012-10-02 22:45:45 +00:00
|
|
|
UIManager:run()
|
|
|
|
else
|
|
|
|
return showusage()
|
|
|
|
end
|
|
|
|
|
2013-03-16 02:02:08 +00:00
|
|
|
exitReader()
|