2
0
mirror of https://github.com/koreader/koreader synced 2024-11-16 06:12:56 +00:00
koreader/reader.lua

196 lines
5.9 KiB
Lua
Raw Normal View History

2014-10-03 08:11:53 +00:00
#!./luajit
2012-06-11 16:37:58 +00:00
2015-02-18 17:37:36 +00:00
-- load default settings
2013-07-01 06:55:28 +00:00
require "defaults"
local DataStorage = require("datastorage")
pcall(dofile, DataStorage:getDataDir() .. "/defaults.persistent.lua")
2015-02-18 17:37:36 +00:00
-- set search path for 'require()'
package.path =
"common/?.lua;rocks/share/lua/5.1/?.lua;frontend/?.lua;" ..
package.path
package.cpath =
"common/?.so;common/?.dll;/usr/lib/lua/?.so;rocks/lib/lua/5.1/?.so;" ..
package.cpath
2015-02-18 17:37:36 +00:00
-- set search path for 'ffi.load()'
local ffi = require("ffi")
2015-02-18 17:37:36 +00:00
local util = require("ffi/util")
ffi.cdef[[
char *getenv(const char *name);
int putenv(const char *envvar);
int _putenv(const char *envvar);
]]
if ffi.os == "Windows" then
ffi.C._putenv("PATH=libs;common;")
end
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
2014-03-13 13:52:43 +00:00
_.changeLang(lang_locale)
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
}
local function showusage()
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("")
print("-d start in debug mode")
print("-p enable Lua code profiling")
print("-h show this usage help")
2014-03-13 13:52:43 +00:00
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")
2014-03-13 13:52:43 +00:00
print("")
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.")
print("See http://github.com/koreader/koreader for more info.")
2014-03-13 13:52:43 +00:00
return
2012-06-11 16:37:58 +00:00
end
-- should check DEBUG option in arg and turn on DEBUG before loading other
-- modules, otherwise DEBUG in some modules may not be printed.
local DEBUG = require("dbg")
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
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
DEBUG:turnOn()
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
local lfs = require("libs/libkoreader-lfs")
local UIManager = require("ui/uimanager")
local Device = require("device")
local Screen = require("device").screen
local Font = require("ui/font")
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
2014-03-13 13:52:43 +00:00
Font.fontmap = fontmap
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")
if last_file and lfs.attributes(last_file, "mode") ~= "file" then
last_file = nil
end
-- load last opened file
local open_last = G_reader_settings:readSetting("open_last")
-- night mode
if G_reader_settings:readSetting("night_mode") then
Screen:toggleNightMode()
end
2012-06-11 16:37:58 +00:00
-- restore kobo frontlight settings and probe kobo touch coordinates
if Device:isKobo() then
2014-03-13 13:52:43 +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
2014-03-13 13:52:43 +00:00
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
-- 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
-- in sync with powerd.is_fl_on (false by default)
-- NOTE: we cant use setIntensity method here because for kobo the
-- min intensity is 1 :(
powerd.fl:setBrightness(0)
end
2014-03-13 13:52:43 +00:00
end
if Device:getCodeName() == "trilogy" then
2015-10-17 16:30:29 +00:00
require("utils/kobo_touch_probe")
end
end
2012-06-11 16:37:58 +00:00
if ARGV[argidx] and ARGV[argidx] ~= "" then
local file = nil
if lfs.attributes(ARGV[argidx], "mode") == "file" then
file = ARGV[argidx]
elseif open_last and last_file then
file = last_file
end
-- 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
if file then
local ReaderUI = require("apps/reader/readerui")
UIManager:nextTick(function()
ReaderUI:showReader(file)
end)
-- 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
local FileManager = require("apps/filemanager/filemanager")
local home_dir =
G_reader_settings:readSetting("home_dir") or ARGV[argidx]
UIManager:nextTick(function()
FileManager:showFiles(home_dir)
end)
2014-03-13 13:52:43 +00:00
end
UIManager:run()
elseif last_file then
local ReaderUI = require("apps/reader/readerui")
UIManager:nextTick(function()
ReaderUI:showReader(last_file)
end)
2014-03-13 13:52:43 +00:00
UIManager:run()
else
2014-03-13 13:52:43 +00:00
return showusage()
end
local function exitReader()
local ReaderActivityIndicator =
require("apps/reader/modules/readeractivityindicator")
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()