2014-10-03 08:11:53 +00:00
|
|
|
#!./luajit
|
2016-12-29 08:10:38 +00:00
|
|
|
io.stdout:write([[
|
2016-10-15 03:36:00 +00:00
|
|
|
---------------------------------------------
|
|
|
|
launching...
|
|
|
|
_ _____ ____ _
|
|
|
|
| |/ / _ \| _ \ ___ __ _ __| | ___ _ __
|
|
|
|
| ' / | | | |_) / _ \/ _` |/ _` |/ _ \ '__|
|
|
|
|
| . \ |_| | _ < __/ (_| | (_| | __/ |
|
|
|
|
|_|\_\___/|_| \_\___|\__,_|\__,_|\___|_|
|
|
|
|
|
2016-12-29 08:10:38 +00:00
|
|
|
[*] Current time: ]], os.date("%x-%X"), "\n\n")
|
2016-10-22 07:53:02 +00:00
|
|
|
io.stdout:flush()
|
2016-10-15 03:36:00 +00:00
|
|
|
|
2012-06-11 16:37:58 +00:00
|
|
|
|
2015-02-18 17:37:36 +00:00
|
|
|
-- load default settings
|
2016-11-13 07:44:06 +00:00
|
|
|
require("defaults")
|
2015-06-15 08:46:43 +00:00
|
|
|
local DataStorage = require("datastorage")
|
|
|
|
pcall(dofile, DataStorage:getDataDir() .. "/defaults.persistent.lua")
|
2014-09-25 14:22:30 +00:00
|
|
|
|
2016-11-13 07:44:06 +00:00
|
|
|
require("setupkoenv")
|
2015-02-18 17:37:36 +00:00
|
|
|
|
2014-01-18 22:04:14 +00:00
|
|
|
-- read settings and check for language override
|
|
|
|
-- has to be done before requiring other files because
|
|
|
|
-- they might call gettext on load
|
2016-06-12 18:28:44 +00:00
|
|
|
G_reader_settings = require("luasettings"):open(
|
|
|
|
DataStorage:getDataDir().."/settings.reader.lua")
|
2014-01-19 17:59:27 +00:00
|
|
|
local lang_locale = G_reader_settings:readSetting("language")
|
2016-11-13 07:44:06 +00:00
|
|
|
local _ = require("gettext")
|
2014-01-19 17:59:27 +00:00
|
|
|
if lang_locale then
|
2014-03-13 13:52:43 +00:00
|
|
|
_.changeLang(lang_locale)
|
2014-01-18 22:04:14 +00:00
|
|
|
end
|
|
|
|
|
2012-06-11 16:37:58 +00:00
|
|
|
-- option parsing:
|
2013-10-18 20:38:07 +00:00
|
|
|
local longopts = {
|
2014-03-13 13:52:43 +00:00
|
|
|
debug = "d",
|
|
|
|
profile = "p",
|
|
|
|
help = "h",
|
2012-06-11 16:37:58 +00:00
|
|
|
}
|
|
|
|
|
2014-09-03 04:09:25 +00:00
|
|
|
local function showusage()
|
2014-06-05 06:58:53 +00:00
|
|
|
print("usage: ./reader.lua [OPTION] ... path")
|
|
|
|
print("Read all the books on your E-Ink reader")
|
2014-03-13 13:52:43 +00:00
|
|
|
print("")
|
2014-06-05 06:58:53 +00:00
|
|
|
print("-d start in debug mode")
|
2016-08-12 06:05:18 +00:00
|
|
|
print("-v debug in verbose mode")
|
2014-06-05 11:06:35 +00:00
|
|
|
print("-p enable Lua code profiling")
|
2014-06-05 06:58:53 +00:00
|
|
|
print("-h show this usage help")
|
2014-03-13 13:52:43 +00:00
|
|
|
print("")
|
2014-06-05 06:58:53 +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")
|
2014-03-13 13:52:43 +00:00
|
|
|
print("")
|
2014-06-05 06:58:53 +00:00
|
|
|
print("If you don't pass any path, the last viewed document will be opened")
|
2014-03-13 13:52:43 +00:00
|
|
|
print("")
|
2014-06-05 11:23:54 +00:00
|
|
|
print("This software is licensed under the AGPLv3.")
|
2014-06-05 06:58:53 +00:00
|
|
|
print("See http://github.com/koreader/koreader for more info.")
|
2012-06-11 16:37:58 +00:00
|
|
|
end
|
|
|
|
|
2014-11-06 07:07:50 +00:00
|
|
|
-- should check DEBUG option in arg and turn on DEBUG before loading other
|
|
|
|
-- modules, otherwise DEBUG in some modules may not be printed.
|
2016-10-25 07:08:47 +00:00
|
|
|
local dbg = require("dbg")
|
|
|
|
if G_reader_settings:readSetting("debug") then dbg:turnOn() end
|
2014-11-06 07:07:50 +00:00
|
|
|
|
|
|
|
local Profiler = nil
|
2014-10-03 08:11:53 +00:00
|
|
|
local ARGV = arg
|
2012-11-01 02:02:53 +00:00
|
|
|
local argidx = 1
|
2013-08-06 14:53:44 +00:00
|
|
|
while argidx <= #ARGV do
|
2014-03-13 13:52:43 +00:00
|
|
|
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
|
2016-10-25 07:08:47 +00:00
|
|
|
dbg:turnOn()
|
2016-08-12 06:05:18 +00:00
|
|
|
elseif arg == "-v" then
|
2016-10-25 07:08:47 +00:00
|
|
|
dbg:setVerbose(true)
|
2014-03-13 13:52:43 +00:00
|
|
|
elseif arg == "-p" then
|
2014-05-01 03:58:05 +00:00
|
|
|
Profiler = require("jit.p")
|
|
|
|
Profiler.start("la")
|
2014-03-13 13:52:43 +00:00
|
|
|
else
|
|
|
|
-- not a recognized option, should be a filename
|
|
|
|
argidx = argidx - 1
|
|
|
|
break
|
|
|
|
end
|
2012-06-11 16:37:58 +00:00
|
|
|
end
|
|
|
|
|
2014-11-06 07:07:50 +00:00
|
|
|
local lfs = require("libs/libkoreader-lfs")
|
|
|
|
local UIManager = require("ui/uimanager")
|
|
|
|
local Device = require("device")
|
|
|
|
local Font = require("ui/font")
|
2017-03-05 02:54:23 +00:00
|
|
|
local ConfirmBox = require("ui/widget/confirmbox")
|
|
|
|
|
|
|
|
local function retryLastFile()
|
|
|
|
return ConfirmBox:new{
|
|
|
|
text = _("Cannot open last file.\nThis could be because it was deleted or because external storage is still being mounted.\nDo you want to retry?"),
|
|
|
|
ok_callback = function()
|
|
|
|
local last_file = G_reader_settings:readSetting("lastfile")
|
|
|
|
if lfs.attributes(last_file, "mode") == "file" then
|
|
|
|
local ReaderUI = require("apps/reader/readerui")
|
|
|
|
UIManager:nextTick(function()
|
|
|
|
ReaderUI:showReader(last_file)
|
|
|
|
end)
|
|
|
|
else
|
|
|
|
UIManager:show(retryLastFile())
|
|
|
|
end
|
|
|
|
end,
|
|
|
|
}
|
|
|
|
end
|
2014-11-06 07:07:50 +00:00
|
|
|
|
2014-01-18 17:23:55 +00:00
|
|
|
-- read some global reader setting here:
|
|
|
|
-- font
|
|
|
|
local fontmap = G_reader_settings:readSetting("fontmap")
|
2012-06-12 04:10:44 +00:00
|
|
|
if fontmap ~= nil then
|
2016-04-26 02:45:55 +00:00
|
|
|
for k, v in pairs(fontmap) do
|
|
|
|
Font.fontmap[k] = v
|
|
|
|
end
|
2012-06-12 04:10:44 +00:00
|
|
|
end
|
2014-01-18 17:23:55 +00:00
|
|
|
-- last file
|
2012-06-12 04:10:44 +00:00
|
|
|
local last_file = G_reader_settings:readSetting("lastfile")
|
2014-10-05 06:52:37 +00:00
|
|
|
if last_file and lfs.attributes(last_file, "mode") ~= "file" then
|
2017-03-05 02:54:23 +00:00
|
|
|
UIManager:show(retryLastFile())
|
2014-10-05 06:52:37 +00:00
|
|
|
last_file = nil
|
|
|
|
end
|
2014-06-05 11:06:35 +00:00
|
|
|
-- load last opened file
|
|
|
|
local open_last = G_reader_settings:readSetting("open_last")
|
2014-06-08 06:06:04 +00:00
|
|
|
-- night mode
|
|
|
|
if G_reader_settings:readSetting("night_mode") then
|
2016-03-21 23:30:45 +00:00
|
|
|
Device.screen:toggleNightMode()
|
2014-06-08 06:06:04 +00:00
|
|
|
end
|
2012-06-11 16:37:58 +00:00
|
|
|
|
2015-10-17 16:12:06 +00:00
|
|
|
-- restore kobo frontlight settings and probe kobo touch coordinates
|
2014-09-03 04:19:10 +00:00
|
|
|
if Device:isKobo() then
|
2016-04-14 15:36:06 +00:00
|
|
|
if Device:hasFrontlight() then
|
2016-03-28 06:57:11 +00:00
|
|
|
local powerd = Device:getPowerDevice()
|
|
|
|
if powerd and powerd.restore_settings then
|
|
|
|
-- UIManager:init() should have sanely set up the frontlight_stuff by this point
|
|
|
|
local intensity = G_reader_settings:readSetting("frontlight_intensity")
|
|
|
|
powerd.fl_intensity = intensity or powerd.fl_intensity
|
|
|
|
local is_frontlight_on = G_reader_settings:readSetting("is_frontlight_on")
|
|
|
|
if is_frontlight_on then
|
|
|
|
-- default powerd.is_fl_on is false, turn it on
|
|
|
|
powerd:toggleFrontlight()
|
|
|
|
else
|
2016-04-16 10:21:49 +00:00
|
|
|
-- the light can still be turned on manually outside of KOReader
|
|
|
|
-- or Nickel. so we always set the intensity to 0 here to keep it
|
2016-03-28 06:57:11 +00:00
|
|
|
-- in sync with powerd.is_fl_on (false by default)
|
2016-04-16 10:21:49 +00:00
|
|
|
-- NOTE: we cant use setIntensity method here because for Kobo the
|
2016-03-28 06:57:11 +00:00
|
|
|
-- min intensity is 1 :(
|
|
|
|
powerd.fl:setBrightness(0)
|
|
|
|
end
|
2016-02-25 08:54:41 +00:00
|
|
|
end
|
2014-03-13 13:52:43 +00:00
|
|
|
end
|
2016-04-03 04:52:30 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
if Device:needsTouchScreenProbe() then
|
|
|
|
Device:touchScreenProbe()
|
2013-08-13 16:56:46 +00:00
|
|
|
end
|
2012-06-11 16:37:58 +00:00
|
|
|
|
2013-03-16 02:12:19 +00:00
|
|
|
if ARGV[argidx] and ARGV[argidx] ~= "" then
|
2014-09-03 04:09:25 +00:00
|
|
|
local file = nil
|
2014-06-05 11:06:35 +00:00
|
|
|
if lfs.attributes(ARGV[argidx], "mode") == "file" then
|
2014-09-03 04:09:25 +00:00
|
|
|
file = ARGV[argidx]
|
2014-06-05 11:06:35 +00:00
|
|
|
elseif open_last and last_file then
|
2014-09-03 04:09:25 +00:00
|
|
|
file = last_file
|
|
|
|
end
|
2016-02-25 08:54:41 +00:00
|
|
|
-- if file is given in command line argument or open last document is set
|
|
|
|
-- true, the given file or the last file is opened in the reader
|
2014-09-03 04:09:25 +00:00
|
|
|
if file then
|
|
|
|
local ReaderUI = require("apps/reader/readerui")
|
2016-03-09 06:52:36 +00:00
|
|
|
UIManager:nextTick(function()
|
|
|
|
ReaderUI:showReader(file)
|
|
|
|
end)
|
2014-09-03 04:09:25 +00:00
|
|
|
-- we assume a directory is given in command line argument
|
|
|
|
-- the filemanger will show the files in that path
|
2014-03-13 13:52:43 +00:00
|
|
|
else
|
2014-09-03 04:09:25 +00:00
|
|
|
local FileManager = require("apps/filemanager/filemanager")
|
2016-02-25 08:54:41 +00:00
|
|
|
local home_dir =
|
|
|
|
G_reader_settings:readSetting("home_dir") or ARGV[argidx]
|
2016-03-09 06:52:36 +00:00
|
|
|
UIManager:nextTick(function()
|
|
|
|
FileManager:showFiles(home_dir)
|
|
|
|
end)
|
2014-03-13 13:52:43 +00:00
|
|
|
end
|
|
|
|
UIManager:run()
|
2014-01-17 18:41:44 +00:00
|
|
|
elseif last_file then
|
2014-09-03 04:09:25 +00:00
|
|
|
local ReaderUI = require("apps/reader/readerui")
|
2016-03-09 06:52:36 +00:00
|
|
|
UIManager:nextTick(function()
|
|
|
|
ReaderUI:showReader(last_file)
|
|
|
|
end)
|
2014-03-13 13:52:43 +00:00
|
|
|
UIManager:run()
|
2012-10-02 22:45:45 +00:00
|
|
|
else
|
2014-03-13 13:52:43 +00:00
|
|
|
return showusage()
|
2012-10-02 22:45:45 +00:00
|
|
|
end
|
|
|
|
|
2014-11-06 07:07:50 +00:00
|
|
|
local function exitReader()
|
2016-02-25 08:54:41 +00:00
|
|
|
local ReaderActivityIndicator =
|
|
|
|
require("apps/reader/modules/readeractivityindicator")
|
2014-11-06 07:07:50 +00:00
|
|
|
|
|
|
|
G_reader_settings:close()
|
|
|
|
|
|
|
|
-- Close lipc handles
|
|
|
|
ReaderActivityIndicator:coda()
|
|
|
|
|
|
|
|
-- shutdown hardware abstraction
|
|
|
|
Device:exit()
|
|
|
|
|
|
|
|
if Profiler then Profiler.stop() end
|
|
|
|
os.exit(0)
|
|
|
|
end
|
|
|
|
|
2013-03-16 02:02:08 +00:00
|
|
|
exitReader()
|