mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
This is a major overhaul of the hardware abstraction layer. A few notes: General platform distinction happens in frontend/device.lua which will delegate everything else to frontend/device/<platform_name>/device.lua which should extend frontend/device/generic/device.lua Screen handling is implemented in frontend/device/screen.lua which includes the *functionality* to support device specifics. Actually setting up the device specific functionality, however, is done in the device specific setup code in the relevant device.lua file. The same goes for input handling.
164 lines
4.6 KiB
Lua
Executable File
164 lines
4.6 KiB
Lua
Executable File
#!./luajit
|
|
|
|
require "defaults"
|
|
pcall(dofile, "defaults.persistent.lua")
|
|
package.path = "?.lua;common/?.lua;frontend/?.lua"
|
|
package.cpath = "?.so;common/?.so;common/?.dll;/usr/lib/lua/?.so"
|
|
|
|
local ffi = require("ffi")
|
|
if ffi.os == "Windows" then
|
|
ffi.cdef[[
|
|
int _putenv(const char *envvar);
|
|
]]
|
|
ffi.C._putenv("PATH=libs;common;")
|
|
--ffi.C._putenv("EMULATE_READER_W=480")
|
|
--ffi.C._putenv("EMULATE_READER_H=600")
|
|
end
|
|
|
|
local DocSettings = require("docsettings")
|
|
local _ = require("gettext")
|
|
local util = require("ffi/util")
|
|
|
|
-- 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 lfs = require("libs/libkoreader-lfs")
|
|
local UIManager = require("ui/uimanager")
|
|
local Device = require("device")
|
|
local Screen = require("device").screen
|
|
local input = require("ffi/input")
|
|
local DEBUG = require("dbg")
|
|
|
|
local Profiler = nil
|
|
|
|
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
|
|
|
|
|
|
-- option parsing:
|
|
local longopts = {
|
|
debug = "d",
|
|
profile = "p",
|
|
help = "h",
|
|
}
|
|
|
|
local 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 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 AGPLv3.")
|
|
print("See http://github.com/koreader/koreader for more info.")
|
|
return
|
|
end
|
|
|
|
local ARGV = arg
|
|
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
|
|
Profiler = require("jit.p")
|
|
Profiler.start("la")
|
|
else
|
|
-- not a recognized option, should be a filename
|
|
argidx = argidx - 1
|
|
break
|
|
end
|
|
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")
|
|
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.bb:invert()
|
|
end
|
|
|
|
-- restore kobo frontlight settings
|
|
if Device:isKobo() then
|
|
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:setIntensityWithoutHW(intensity)
|
|
-- powerd:setIntensity(intensity)
|
|
end
|
|
end
|
|
|
|
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")
|
|
ReaderUI:showReader(file)
|
|
-- we assume a directory is given in command line argument
|
|
-- the filemanger will show the files in that path
|
|
else
|
|
local FileManager = require("apps/filemanager/filemanager")
|
|
FileManager:showFiles(ARGV[argidx])
|
|
end
|
|
UIManager:run()
|
|
elseif last_file then
|
|
local ReaderUI = require("apps/reader/readerui")
|
|
ReaderUI:showReader(last_file)
|
|
UIManager:run()
|
|
else
|
|
return showusage()
|
|
end
|
|
|
|
exitReader()
|