mirror of
https://github.com/koreader/koreader.git
synced 2025-12-13 20:36:53 +01:00
Add restart koreader function and ensure FlushSettings event can be delivered to all widgets (#2772)
This commit is contained in:
@@ -325,7 +325,6 @@ function FileManager:init()
|
|||||||
table.insert(self, ReaderDictionary:new{ ui = self })
|
table.insert(self, ReaderDictionary:new{ ui = self })
|
||||||
table.insert(self, ReaderWikipedia:new{ ui = self })
|
table.insert(self, ReaderWikipedia:new{ ui = self })
|
||||||
|
|
||||||
self.loaded_modules = {}
|
|
||||||
-- koreader plugins
|
-- koreader plugins
|
||||||
for _,plugin_module in ipairs(PluginLoader:loadPlugins()) do
|
for _,plugin_module in ipairs(PluginLoader:loadPlugins()) do
|
||||||
if not plugin_module.is_doc_only then
|
if not plugin_module.is_doc_only then
|
||||||
@@ -333,7 +332,7 @@ function FileManager:init()
|
|||||||
plugin_module, { ui = self, })
|
plugin_module, { ui = self, })
|
||||||
-- Keep references to the modules which do not register into menu.
|
-- Keep references to the modules which do not register into menu.
|
||||||
if ok then
|
if ok then
|
||||||
table.insert(self.loaded_modules, plugin_or_err)
|
table.insert(self, plugin_or_err)
|
||||||
logger.info("FM loaded plugin", plugin_module.name,
|
logger.info("FM loaded plugin", plugin_module.name,
|
||||||
"at", plugin_module.path)
|
"at", plugin_module.path)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -269,18 +269,13 @@ function FileManagerMenu:setUpdateItemTable()
|
|||||||
self.menu_items.exit = {
|
self.menu_items.exit = {
|
||||||
text = _("Exit"),
|
text = _("Exit"),
|
||||||
callback = function()
|
callback = function()
|
||||||
if SetDefaults.settings_changed then
|
self:exitOrRestart()
|
||||||
SetDefaults.settings_changed = false
|
end,
|
||||||
UIManager:show(ConfirmBox:new{
|
}
|
||||||
text = _("You have unsaved default settings. Save them now?"),
|
self.menu_items.restart_koreader = {
|
||||||
ok_callback = function()
|
text = _("Restart KOReader"),
|
||||||
SetDefaults:saveSettings()
|
callback = function()
|
||||||
end,
|
self:exitOrRestart(function() UIManager:restartKOReader() end)
|
||||||
})
|
|
||||||
else
|
|
||||||
UIManager:close(self.menu_container)
|
|
||||||
self.ui:onClose()
|
|
||||||
end
|
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -298,6 +293,34 @@ dbg:guard(FileManagerMenu, 'setUpdateItemTable',
|
|||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
function FileManagerMenu:exitOrRestart(callback)
|
||||||
|
if SetDefaults.settings_changed then
|
||||||
|
UIManager:show(ConfirmBox:new{
|
||||||
|
text = _("You have unsaved default settings. Save them now?\nTap \"Cancel\" to return to KOReader."),
|
||||||
|
ok_text = _("Save"),
|
||||||
|
ok_callback = function()
|
||||||
|
SetDefaults.settings_changed = false
|
||||||
|
SetDefaults:saveSettings()
|
||||||
|
self:exitOrRestart(callback)
|
||||||
|
end,
|
||||||
|
cancel_text = _("Don't save"),
|
||||||
|
cancel_callback = function()
|
||||||
|
SetDefaults.settings_changed = false
|
||||||
|
self:exitOrRestart(callback)
|
||||||
|
end,
|
||||||
|
other_buttons = {{
|
||||||
|
text = _("Cancel"),
|
||||||
|
}}
|
||||||
|
})
|
||||||
|
else
|
||||||
|
UIManager:close(self.menu_container)
|
||||||
|
self.ui:onClose()
|
||||||
|
if callback then
|
||||||
|
callback()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function FileManagerMenu:onShowMenu()
|
function FileManagerMenu:onShowMenu()
|
||||||
local tab_index = G_reader_settings:readSetting("filemanagermenu_tab_index") or 1
|
local tab_index = G_reader_settings:readSetting("filemanagermenu_tab_index") or 1
|
||||||
if self.tab_item_table == nil then
|
if self.tab_item_table == nil then
|
||||||
|
|||||||
@@ -186,12 +186,14 @@ function ReaderMenu:setUpdateItemTable()
|
|||||||
self.menu_items.exit = {
|
self.menu_items.exit = {
|
||||||
text = _("Exit"),
|
text = _("Exit"),
|
||||||
callback = function()
|
callback = function()
|
||||||
self:onTapCloseMenu()
|
self:exitOrRestart()
|
||||||
UIManager:scheduleIn(0.1, function() self.ui:onClose() end)
|
end,
|
||||||
local FileManager = require("apps/filemanager/filemanager")
|
}
|
||||||
if FileManager.instance then
|
|
||||||
FileManager.instance:onClose()
|
self.menu_items.restart_koreader = {
|
||||||
end
|
text = _("Restart KOReader"),
|
||||||
|
callback = function()
|
||||||
|
self:exitOrRestart(function() UIManager:restartKOReader() end)
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -209,6 +211,20 @@ dbg:guard(ReaderMenu, 'setUpdateItemTable',
|
|||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
function ReaderMenu:exitOrRestart(callback)
|
||||||
|
self:onTapCloseMenu()
|
||||||
|
UIManager:nextTick(function()
|
||||||
|
self.ui:onClose()
|
||||||
|
if callback ~= nil then
|
||||||
|
callback()
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
local FileManager = require("apps/filemanager/filemanager")
|
||||||
|
if FileManager.instance then
|
||||||
|
FileManager.instance:onClose()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function ReaderMenu:onShowReaderMenu()
|
function ReaderMenu:onShowReaderMenu()
|
||||||
if self.tab_item_table == nil then
|
if self.tab_item_table == nil then
|
||||||
self:setUpdateItemTable()
|
self:setUpdateItemTable()
|
||||||
|
|||||||
@@ -481,7 +481,6 @@ end
|
|||||||
|
|
||||||
function ReaderUI:onFlushSettings()
|
function ReaderUI:onFlushSettings()
|
||||||
self:saveSettings()
|
self:saveSettings()
|
||||||
return true
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function ReaderUI:closeDocument()
|
function ReaderUI:closeDocument()
|
||||||
@@ -530,7 +529,6 @@ function ReaderUI:onClose()
|
|||||||
if _running_instance == self then
|
if _running_instance == self then
|
||||||
_running_instance = nil
|
_running_instance = nil
|
||||||
end
|
end
|
||||||
return true
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return ReaderUI
|
return ReaderUI
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ function Dbg:turnOn()
|
|||||||
return unpack(values)
|
return unpack(values)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Dbg.dassert = function(check, msg) assert(check, msg) end
|
||||||
|
|
||||||
-- TODO: close ev.log fd for children
|
-- TODO: close ev.log fd for children
|
||||||
-- create or clear ev log file
|
-- create or clear ev log file
|
||||||
@@ -59,6 +60,7 @@ function Dbg:turnOff()
|
|||||||
logger:setLevel(logger.levels.info)
|
logger:setLevel(logger.levels.info)
|
||||||
function Dbg_mt.__call() end
|
function Dbg_mt.__call() end
|
||||||
function Dbg.guard() end
|
function Dbg.guard() end
|
||||||
|
function Dbg.dassert() end
|
||||||
if self.ev_log then
|
if self.ev_log then
|
||||||
io.close(self.ev_log)
|
io.close(self.ev_log)
|
||||||
self.ev_log = nil
|
self.ev_log = nil
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
local Event = require("ui/event")
|
|
||||||
local logger = require("logger")
|
local logger = require("logger")
|
||||||
local _ = require("gettext")
|
local _ = require("gettext")
|
||||||
|
|
||||||
@@ -125,9 +124,6 @@ function Device:onPowerEvent(ev)
|
|||||||
elseif ev == "Power" or ev == "Suspend" then
|
elseif ev == "Power" or ev == "Suspend" then
|
||||||
self.powerd:beforeSuspend()
|
self.powerd:beforeSuspend()
|
||||||
local UIManager = require("ui/uimanager")
|
local UIManager = require("ui/uimanager")
|
||||||
-- flushing settings first in case the screensaver takes too long time
|
|
||||||
-- that flushing has no chance to run
|
|
||||||
UIManager:broadcastEvent(Event:new("FlushSettings"))
|
|
||||||
logger.dbg("Suspending...")
|
logger.dbg("Suspending...")
|
||||||
-- always suspend in portrait mode
|
-- always suspend in portrait mode
|
||||||
self.orig_rotation_mode = self.screen:getRotationMode()
|
self.orig_rotation_mode = self.screen:getRotationMode()
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
local Generic = require("device/generic/device")
|
local Generic = require("device/generic/device")
|
||||||
local util = require("ffi/util")
|
local util = require("ffi/util")
|
||||||
local Event = require("ui/event")
|
|
||||||
local logger = require("logger")
|
local logger = require("logger")
|
||||||
|
|
||||||
local function yes() return true end
|
local function yes() return true end
|
||||||
@@ -93,7 +92,6 @@ function Kindle:intoScreenSaver()
|
|||||||
os.execute("killall -cont awesome")
|
os.execute("killall -cont awesome")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
require("ui/uimanager"):broadcastEvent(Event:new("FlushSettings"))
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function Kindle:outofScreenSaver()
|
function Kindle:outofScreenSaver()
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ local order = {
|
|||||||
"help",
|
"help",
|
||||||
"system_statistics",
|
"system_statistics",
|
||||||
"----------------------------",
|
"----------------------------",
|
||||||
|
"restart_koreader",
|
||||||
"poweroff", -- if Device:isKobo()
|
"poweroff", -- if Device:isKobo()
|
||||||
"reboot", -- if Device:isKobo()
|
"reboot", -- if Device:isKobo()
|
||||||
"----------------------------",
|
"----------------------------",
|
||||||
|
|||||||
@@ -81,6 +81,7 @@ local order = {
|
|||||||
"help",
|
"help",
|
||||||
"system_statistics",
|
"system_statistics",
|
||||||
"----------------------------",
|
"----------------------------",
|
||||||
|
"restart_koreader",
|
||||||
"poweroff", -- if Device:isKobo()
|
"poweroff", -- if Device:isKobo()
|
||||||
"reboot", -- if Device:isKobo()
|
"reboot", -- if Device:isKobo()
|
||||||
"----------------------------",
|
"----------------------------",
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ local UIManager = {
|
|||||||
_refresh_stack = {},
|
_refresh_stack = {},
|
||||||
_refresh_func_stack = {},
|
_refresh_func_stack = {},
|
||||||
_entered_poweroff_stage = false,
|
_entered_poweroff_stage = false,
|
||||||
|
_exit_code = nil,
|
||||||
}
|
}
|
||||||
|
|
||||||
function UIManager:init()
|
function UIManager:init()
|
||||||
@@ -41,7 +42,7 @@ function UIManager:init()
|
|||||||
self:sendEvent(input_event)
|
self:sendEvent(input_event)
|
||||||
end,
|
end,
|
||||||
SaveState = function()
|
SaveState = function()
|
||||||
self:broadcastEvent(Event:new("FlushSettings"))
|
self:flushSettings()
|
||||||
end,
|
end,
|
||||||
Power = function(input_event)
|
Power = function(input_event)
|
||||||
Device:onPowerEvent(input_event)
|
Device:onPowerEvent(input_event)
|
||||||
@@ -73,6 +74,7 @@ function UIManager:init()
|
|||||||
-- resume.
|
-- resume.
|
||||||
self:_initAutoSuspend()
|
self:_initAutoSuspend()
|
||||||
self.event_handlers["Suspend"] = function()
|
self.event_handlers["Suspend"] = function()
|
||||||
|
self:_beforeSuspend()
|
||||||
if self._stopAutoSuspend then
|
if self._stopAutoSuspend then
|
||||||
-- TODO(Hzj-jie): Why _stopAutoSuspend could be nil in test cases.
|
-- TODO(Hzj-jie): Why _stopAutoSuspend could be nil in test cases.
|
||||||
--[[
|
--[[
|
||||||
@@ -87,13 +89,12 @@ function UIManager:init()
|
|||||||
--]]
|
--]]
|
||||||
self:_stopAutoSuspend()
|
self:_stopAutoSuspend()
|
||||||
end
|
end
|
||||||
self:broadcastEvent(Event:new("Suspend"))
|
|
||||||
Device:onPowerEvent("Suspend")
|
Device:onPowerEvent("Suspend")
|
||||||
end
|
end
|
||||||
self.event_handlers["Resume"] = function()
|
self.event_handlers["Resume"] = function()
|
||||||
Device:onPowerEvent("Resume")
|
Device:onPowerEvent("Resume")
|
||||||
self:broadcastEvent(Event:new("Resume"))
|
|
||||||
self:_startAutoSuspend()
|
self:_startAutoSuspend()
|
||||||
|
self:_afterResume()
|
||||||
end
|
end
|
||||||
self.event_handlers["PowerPress"] = function()
|
self.event_handlers["PowerPress"] = function()
|
||||||
UIManager:scheduleIn(2, self.poweroff_action)
|
UIManager:scheduleIn(2, self.poweroff_action)
|
||||||
@@ -101,24 +102,24 @@ function UIManager:init()
|
|||||||
self.event_handlers["PowerRelease"] = function()
|
self.event_handlers["PowerRelease"] = function()
|
||||||
if not self._entered_poweroff_stage then
|
if not self._entered_poweroff_stage then
|
||||||
UIManager:unschedule(self.poweroff_action)
|
UIManager:unschedule(self.poweroff_action)
|
||||||
self.event_handlers["Suspend"]()
|
self:suspend()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if not G_reader_settings:readSetting("ignore_power_sleepcover") then
|
if not G_reader_settings:readSetting("ignore_power_sleepcover") then
|
||||||
self.event_handlers["SleepCoverClosed"] = function()
|
self.event_handlers["SleepCoverClosed"] = function()
|
||||||
Device.is_cover_closed = true
|
Device.is_cover_closed = true
|
||||||
self.event_handlers["Suspend"]()
|
self:suspend()
|
||||||
end
|
end
|
||||||
self.event_handlers["SleepCoverOpened"] = function()
|
self.event_handlers["SleepCoverOpened"] = function()
|
||||||
Device.is_cover_closed = false
|
Device.is_cover_closed = false
|
||||||
self.event_handlers["Resume"]()
|
self:resume()
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
-- Closing/opening the cover will still wake up the device, so we
|
-- Closing/opening the cover will still wake up the device, so we
|
||||||
-- need to put it back to sleep if we are in screen saver mode
|
-- need to put it back to sleep if we are in screen saver mode
|
||||||
self.event_handlers["SleepCoverClosed"] = function()
|
self.event_handlers["SleepCoverClosed"] = function()
|
||||||
if Device.screen_saver_mode then
|
if Device.screen_saver_mode then
|
||||||
self.event_handlers["Suspend"]()
|
self:suspend()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
self.event_handlers["SleepCoverOpened"] = self.event_handlers["SleepCoverClosed"]
|
self.event_handlers["SleepCoverOpened"] = self.event_handlers["SleepCoverClosed"]
|
||||||
@@ -127,15 +128,16 @@ function UIManager:init()
|
|||||||
Device:getPowerDevice():toggleFrontlight()
|
Device:getPowerDevice():toggleFrontlight()
|
||||||
end
|
end
|
||||||
self.event_handlers["Charging"] = function()
|
self.event_handlers["Charging"] = function()
|
||||||
self:broadcastEvent(Event:new("Charging"))
|
self:_beforeCharging()
|
||||||
if Device.screen_saver_mode then
|
if Device.screen_saver_mode then
|
||||||
self.event_handlers["Suspend"]()
|
self:suspend()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
self.event_handlers["NotCharging"] = function()
|
self.event_handlers["NotCharging"] = function()
|
||||||
self:broadcastEvent(Event:new("NotCharging"))
|
-- We need to put the device into suspension, other things need to be done before it.
|
||||||
|
self:_afterNotCharging()
|
||||||
if Device.screen_saver_mode then
|
if Device.screen_saver_mode then
|
||||||
self.event_handlers["Suspend"]()
|
self:suspend()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
self.event_handlers["__default__"] = function(input_event)
|
self.event_handlers["__default__"] = function(input_event)
|
||||||
@@ -143,27 +145,27 @@ function UIManager:init()
|
|||||||
-- Suspension in Kobo can be interrupted by screen updates. We
|
-- Suspension in Kobo can be interrupted by screen updates. We
|
||||||
-- ignore user touch input here so screen udpate won't be
|
-- ignore user touch input here so screen udpate won't be
|
||||||
-- triggered in suspend mode
|
-- triggered in suspend mode
|
||||||
self.event_handlers["Suspend"]()
|
self:suspend()
|
||||||
else
|
else
|
||||||
self:sendEvent(input_event)
|
self:sendEvent(input_event)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
elseif Device:isKindle() then
|
elseif Device:isKindle() then
|
||||||
self.event_handlers["IntoSS"] = function()
|
self.event_handlers["IntoSS"] = function()
|
||||||
self:broadcastEvent(Event:new("Suspend"))
|
self:_beforeSuspend()
|
||||||
Device:intoScreenSaver()
|
Device:intoScreenSaver()
|
||||||
end
|
end
|
||||||
self.event_handlers["OutOfSS"] = function()
|
self.event_handlers["OutOfSS"] = function()
|
||||||
Device:outofScreenSaver()
|
Device:outofScreenSaver()
|
||||||
self:broadcastEvent(Event:new("Resume"))
|
self:_afterResume();
|
||||||
end
|
end
|
||||||
self.event_handlers["Charging"] = function()
|
self.event_handlers["Charging"] = function()
|
||||||
self:broadcastEvent(Event:new("Charging"))
|
self:_beforeCharging()
|
||||||
Device:usbPlugIn()
|
Device:usbPlugIn()
|
||||||
end
|
end
|
||||||
self.event_handlers["NotCharging"] = function()
|
self.event_handlers["NotCharging"] = function()
|
||||||
Device:usbPlugOut()
|
Device:usbPlugOut()
|
||||||
self:broadcastEvent(Event:new("NotCharging"))
|
self:_afterNotCharging()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -226,6 +228,8 @@ function UIManager:close(widget, refreshtype, refreshregion)
|
|||||||
end
|
end
|
||||||
logger.dbg("close widget", widget.id or widget.name)
|
logger.dbg("close widget", widget.id or widget.name)
|
||||||
local dirty = false
|
local dirty = false
|
||||||
|
-- Ensure all the widgets can get onFlushSettings event.
|
||||||
|
widget:handleEvent(Event:new("FlushSettings"))
|
||||||
-- first send close event to widget
|
-- first send close event to widget
|
||||||
widget:handleEvent(Event:new("CloseWidget"))
|
widget:handleEvent(Event:new("CloseWidget"))
|
||||||
-- make it disabled by default and check any widget that enables it
|
-- make it disabled by default and check any widget that enables it
|
||||||
@@ -412,6 +416,7 @@ end
|
|||||||
|
|
||||||
--- Signals to quit.
|
--- Signals to quit.
|
||||||
function UIManager:quit()
|
function UIManager:quit()
|
||||||
|
if not self._running then return end
|
||||||
logger.info("quitting uimanager")
|
logger.info("quitting uimanager")
|
||||||
self._task_queue_dirty = false
|
self._task_queue_dirty = false
|
||||||
self._running = false
|
self._running = false
|
||||||
@@ -765,12 +770,14 @@ function UIManager:run()
|
|||||||
self.looper:add_callback(function() self:handleInput() end)
|
self.looper:add_callback(function() self:handleInput() end)
|
||||||
self.looper:start()
|
self.looper:start()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
return self._exit_code
|
||||||
end
|
end
|
||||||
|
|
||||||
-- run uimanager forever for testing purpose
|
-- run uimanager forever for testing purpose
|
||||||
function UIManager:runForever()
|
function UIManager:runForever()
|
||||||
self._run_forever = true
|
self._run_forever = true
|
||||||
self:run()
|
return self:run()
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Kobo does not have an auto suspend function, so we implement it ourselves.
|
-- Kobo does not have an auto suspend function, so we implement it ourselves.
|
||||||
@@ -792,7 +799,7 @@ function UIManager:_initAutoSuspend()
|
|||||||
local now = os.time()
|
local now = os.time()
|
||||||
-- Do not repeat auto suspend procedure after suspend.
|
-- Do not repeat auto suspend procedure after suspend.
|
||||||
if self.last_action_sec + self.auto_suspend_sec <= now then
|
if self.last_action_sec + self.auto_suspend_sec <= now then
|
||||||
self.event_handlers["Suspend"]()
|
self:suspend()
|
||||||
else
|
else
|
||||||
self:scheduleIn(
|
self:scheduleIn(
|
||||||
self.last_action_sec + self.auto_suspend_sec - now,
|
self.last_action_sec + self.auto_suspend_sec - now,
|
||||||
@@ -824,6 +831,54 @@ function UIManager:_initAutoSuspend()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- The common operations should be performed before suspending the device. Ditto.
|
||||||
|
function UIManager:_beforeSuspend()
|
||||||
|
self:flushSettings()
|
||||||
|
self:broadcastEvent(Event:new("Suspend"))
|
||||||
|
end
|
||||||
|
|
||||||
|
-- The common operations should be performed after resuming the device. Ditto.
|
||||||
|
function UIManager:_afterResume()
|
||||||
|
self:broadcastEvent(Event:new("Resume"))
|
||||||
|
end
|
||||||
|
|
||||||
|
function UIManager:_beforeCharging()
|
||||||
|
self:broadcastEvent(Event:new("Charging"))
|
||||||
|
end
|
||||||
|
|
||||||
|
function UIManager:_afterNotCharging()
|
||||||
|
self:broadcastEvent(Event:new("NotCharging"))
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Executes all the operations of a suspending request. This function usually puts the device into
|
||||||
|
-- suspension.
|
||||||
|
function UIManager:suspend()
|
||||||
|
if Device:isKobo() then
|
||||||
|
self.event_handlers["Suspend"]()
|
||||||
|
elseif Device:isKindle() then
|
||||||
|
self.event_handlers["IntoSS"]()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Executes all the operations of a resume request. This function usually wakes up the device.
|
||||||
|
function UIManager:resume()
|
||||||
|
if Device:isKobo() then
|
||||||
|
self.event_handlers["Resume"]()
|
||||||
|
elseif Device:isKindle() then
|
||||||
|
self.event_handlers["OutOfSS"]()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function UIManager:flushSettings()
|
||||||
|
self:broadcastEvent(Event:new("FlushSettings"))
|
||||||
|
end
|
||||||
|
|
||||||
|
function UIManager:restartKOReader()
|
||||||
|
self:quit()
|
||||||
|
-- This is just a magic number to indicate the restart request for shell scripts.
|
||||||
|
self._exit_code = 85
|
||||||
|
end
|
||||||
|
|
||||||
UIManager._resetAutoSuspendTimer = noop
|
UIManager._resetAutoSuspendTimer = noop
|
||||||
|
|
||||||
UIManager:init()
|
UIManager:init()
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ local ConfirmBox = InputContainer:new{
|
|||||||
cancel_text = _("Cancel"),
|
cancel_text = _("Cancel"),
|
||||||
ok_callback = function() end,
|
ok_callback = function() end,
|
||||||
cancel_callback = function() end,
|
cancel_callback = function() end,
|
||||||
|
other_buttons = nil,
|
||||||
margin = 5,
|
margin = 5,
|
||||||
padding = 5,
|
padding = 5,
|
||||||
}
|
}
|
||||||
@@ -78,28 +79,42 @@ function ConfirmBox:init()
|
|||||||
width = Screen:getWidth()*2/3,
|
width = Screen:getWidth()*2/3,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
local buttons = {{
|
||||||
|
text = self.cancel_text,
|
||||||
|
callback = function()
|
||||||
|
self.cancel_callback()
|
||||||
|
UIManager:close(self)
|
||||||
|
end,
|
||||||
|
}, {
|
||||||
|
text = self.ok_text,
|
||||||
|
callback = function()
|
||||||
|
self.ok_callback()
|
||||||
|
UIManager:close(self)
|
||||||
|
end,
|
||||||
|
},}
|
||||||
|
|
||||||
|
if self.other_buttons ~= nil then
|
||||||
|
for __, button in ipairs(self.other_buttons) do
|
||||||
|
assert(type(button.text) == "string")
|
||||||
|
assert(button.callback == nil or type(button.callback) == "function")
|
||||||
|
table.insert(buttons, {
|
||||||
|
text = button.text,
|
||||||
|
callback = function()
|
||||||
|
if button.callback ~= nil then
|
||||||
|
button.callback()
|
||||||
|
end
|
||||||
|
UIManager:close(self)
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local button_table = ButtonTable:new{
|
local button_table = ButtonTable:new{
|
||||||
width = content:getSize().w,
|
width = content:getSize().w,
|
||||||
button_font_face = "cfont",
|
button_font_face = "cfont",
|
||||||
button_font_size = 20,
|
button_font_size = 20,
|
||||||
buttons = {
|
buttons = { buttons },
|
||||||
{
|
|
||||||
{
|
|
||||||
text = self.cancel_text,
|
|
||||||
callback = function()
|
|
||||||
self.cancel_callback()
|
|
||||||
UIManager:close(self)
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text = self.ok_text,
|
|
||||||
callback = function()
|
|
||||||
self.ok_callback()
|
|
||||||
UIManager:close(self)
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
zero_sep = true,
|
zero_sep = true,
|
||||||
show_parent = self,
|
show_parent = self,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ will call a method "onEventName" for an event with name
|
|||||||
]]
|
]]
|
||||||
|
|
||||||
local EventListener = {}
|
local EventListener = {}
|
||||||
local DEBUG = require("dbg")
|
|
||||||
|
|
||||||
function EventListener:new(new_o)
|
function EventListener:new(new_o)
|
||||||
local o = new_o or {}
|
local o = new_o or {}
|
||||||
@@ -29,9 +28,6 @@ By default, it's `"on"..Event.name`.
|
|||||||
]]
|
]]
|
||||||
function EventListener:handleEvent(event)
|
function EventListener:handleEvent(event)
|
||||||
if self[event.handler] then
|
if self[event.handler] then
|
||||||
if self.id or self.name then
|
|
||||||
DEBUG:v(self.id or self.name, "handling event", event)
|
|
||||||
end
|
|
||||||
return self[event.handler](self, unpack(event.args))
|
return self[event.handler](self, unpack(event.args))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
9
kodev
9
kodev
@@ -366,8 +366,12 @@ OPTIONS:
|
|||||||
[[ $args != /* ]] && args="${CURDIR}/${args}"
|
[[ $args != /* ]] && args="${CURDIR}/${args}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
EMULATE_READER_W=${screen_width} EMULATE_READER_H=${screen_height} \
|
RETURN_VALUE=85
|
||||||
./reader.lua -d "$args"
|
while [ $RETURN_VALUE -eq 85 ]; do
|
||||||
|
EMULATE_READER_W=${screen_width} EMULATE_READER_H=${screen_height} \
|
||||||
|
./reader.lua -d "$args"
|
||||||
|
RETURN_VALUE=$?
|
||||||
|
done
|
||||||
} || exit
|
} || exit
|
||||||
popd
|
popd
|
||||||
}
|
}
|
||||||
@@ -417,6 +421,7 @@ OPTIONS:
|
|||||||
make "${EMU_DIR}/.busted"
|
make "${EMU_DIR}/.busted"
|
||||||
pushd "${EMU_DIR}" && {
|
pushd "${EMU_DIR}" && {
|
||||||
test_path="./spec/$1/unit"
|
test_path="./spec/$1/unit"
|
||||||
|
rm -rf "${test_path}"/data/*.sdr
|
||||||
|
|
||||||
if [ ! -z "$2" ]; then
|
if [ ! -z "$2" ]; then
|
||||||
test_path="${test_path}/$2"
|
test_path="${test_path}/$2"
|
||||||
|
|||||||
@@ -255,7 +255,12 @@ if [ -e crash.log ]; then
|
|||||||
tail -c 500000 crash.log >crash.log.new
|
tail -c 500000 crash.log >crash.log.new
|
||||||
mv -f crash.log.new crash.log
|
mv -f crash.log.new crash.log
|
||||||
fi
|
fi
|
||||||
./reader.lua "$@" >>crash.log 2>&1
|
|
||||||
|
RETURN_VALUE=85
|
||||||
|
while [ $RETURN_VALUE -eq 85 ]; do
|
||||||
|
./reader.lua "$@" >>crash.log 2>&1
|
||||||
|
RETURN_VALUE=$?
|
||||||
|
done
|
||||||
|
|
||||||
# clean up our own process tree in case the reader crashed (if needed, to avoid flooding KUAL's log)
|
# clean up our own process tree in case the reader crashed (if needed, to avoid flooding KUAL's log)
|
||||||
if pidof reader.lua >/dev/null 2>&1; then
|
if pidof reader.lua >/dev/null 2>&1; then
|
||||||
@@ -345,3 +350,5 @@ if [ "${PASSCODE_DISABLED}" = "yes" ]; then
|
|||||||
logmsg "Restoring system passcode . . ."
|
logmsg "Restoring system passcode . . ."
|
||||||
touch "/var/local/system/userpasswdenabled"
|
touch "/var/local/system/userpasswdenabled"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
exit $RETURN_VALUE
|
||||||
|
|||||||
@@ -119,8 +119,11 @@ if [ -e crash.log ]; then
|
|||||||
mv -f crash.log.new crash.log
|
mv -f crash.log.new crash.log
|
||||||
fi
|
fi
|
||||||
|
|
||||||
./reader.lua "${args}" >>crash.log 2>&1
|
RETURN_VALUE=85
|
||||||
RESULT=$?
|
while [ $RETURN_VALUE -eq 85 ]; do
|
||||||
|
./reader.lua "${args}" >>crash.log 2>&1
|
||||||
|
RETURN_VALUE=$?
|
||||||
|
done
|
||||||
|
|
||||||
if [ "${FROM_NICKEL}" = "true" ]; then
|
if [ "${FROM_NICKEL}" = "true" ]; then
|
||||||
if [ "${FROM_KFMON}" != "true" ]; then
|
if [ "${FROM_KFMON}" != "true" ]; then
|
||||||
@@ -145,4 +148,4 @@ else
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
return ${RESULT}
|
exit $RETURN_VALUE
|
||||||
|
|||||||
@@ -42,8 +42,14 @@ if [ -e crash.log ]; then
|
|||||||
mv -f crash.log.new crash.log
|
mv -f crash.log.new crash.log
|
||||||
fi
|
fi
|
||||||
|
|
||||||
./reader.lua "${args}" >>crash.log 2>&1
|
RETURN_VALUE=85
|
||||||
|
while [ $RETURN_VALUE -eq 85 ]; do
|
||||||
|
./reader.lua "${args}" >>crash.log 2>&1
|
||||||
|
RETURN_VALUE=$?
|
||||||
|
done
|
||||||
|
|
||||||
if pidof reader.lua >/dev/null 2>&1; then
|
if pidof reader.lua >/dev/null 2>&1; then
|
||||||
killall -TERM reader.lua
|
killall -TERM reader.lua
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
exit $RETURN_VALUE
|
||||||
|
|||||||
@@ -29,4 +29,11 @@ export EXT_FONT_DIR="${HOME}/fonts"
|
|||||||
# set fullscreen mode
|
# set fullscreen mode
|
||||||
export SDL_FULLSCREEN=1
|
export SDL_FULLSCREEN=1
|
||||||
|
|
||||||
./reader.lua -d ~/Documents
|
RETURN_VALUE=85
|
||||||
|
|
||||||
|
while [ $RETURN_VALUE -eq 85 ]; do
|
||||||
|
./reader.lua -d ~/Documents
|
||||||
|
RETURN_VALUE=$?
|
||||||
|
done
|
||||||
|
|
||||||
|
exit $RETURN_VALUE
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ local PowerD = require("device"):getPowerDevice()
|
|||||||
local UIManager = require("ui/uimanager")
|
local UIManager = require("ui/uimanager")
|
||||||
local WidgetContainer = require("ui/widget/container/widgetcontainer")
|
local WidgetContainer = require("ui/widget/container/widgetcontainer")
|
||||||
local T = require("ffi/util").template
|
local T = require("ffi/util").template
|
||||||
|
local dbg = require("dbg")
|
||||||
local logger = require("logger")
|
local logger = require("logger")
|
||||||
local util = require("ffi/util")
|
local util = require("ffi/util")
|
||||||
local _ = require("gettext")
|
local _ = require("gettext")
|
||||||
@@ -94,11 +95,12 @@ local BatteryStat = {
|
|||||||
settings = LuaSettings:open(DataStorage:getSettingsDir() .. "/batterstat.lua"),
|
settings = LuaSettings:open(DataStorage:getSettingsDir() .. "/batterstat.lua"),
|
||||||
dump_file = util.realpath(DataStorage:getDataDir()) .. "/batterystat.log",
|
dump_file = util.realpath(DataStorage:getDataDir()) .. "/batterystat.log",
|
||||||
debugging = false,
|
debugging = false,
|
||||||
|
kv_page = nil,
|
||||||
}
|
}
|
||||||
|
|
||||||
function BatteryStat:init()
|
function BatteryStat:init()
|
||||||
self.charging = Usage:new(self.settings:readSetting("charging"))
|
self.charging = Usage:new(self.settings:readSetting("charging"))
|
||||||
self.decharging = Usage:new(self.settings:readSetting("decharging"))
|
self.discharging = Usage:new(self.settings:readSetting("discharging"))
|
||||||
self.awake = Usage:new(self.settings:readSetting("awake"))
|
self.awake = Usage:new(self.settings:readSetting("awake"))
|
||||||
self.sleeping = Usage:new(self.settings:readSetting("sleeping"))
|
self.sleeping = Usage:new(self.settings:readSetting("sleeping"))
|
||||||
|
|
||||||
@@ -125,7 +127,7 @@ end
|
|||||||
function BatteryStat:onFlushSettings()
|
function BatteryStat:onFlushSettings()
|
||||||
self.settings:reset({
|
self.settings:reset({
|
||||||
charging = self.charging,
|
charging = self.charging,
|
||||||
decharging = self.decharging,
|
discharging = self.discharging,
|
||||||
awake = self.awake,
|
awake = self.awake,
|
||||||
sleeping = self.sleeping,
|
sleeping = self.sleeping,
|
||||||
charging_state = self.charging_state,
|
charging_state = self.charging_state,
|
||||||
@@ -146,7 +148,7 @@ function BatteryStat:accumulate()
|
|||||||
-- Decharging to charging.
|
-- Decharging to charging.
|
||||||
self.charging:append(self.charging_state)
|
self.charging:append(self.charging_state)
|
||||||
else
|
else
|
||||||
self.decharging:append(self.charging_state)
|
self.discharging:append(self.charging_state)
|
||||||
end
|
end
|
||||||
self.awake_state = State:new()
|
self.awake_state = State:new()
|
||||||
self.charging_state = State:new()
|
self.charging_state = State:new()
|
||||||
@@ -183,20 +185,14 @@ end
|
|||||||
function BatteryStat:onCharging()
|
function BatteryStat:onCharging()
|
||||||
self:debugOutput("onCharging")
|
self:debugOutput("onCharging")
|
||||||
self.was_charging = false
|
self.was_charging = false
|
||||||
self:dumpToText()
|
self:reset(true, false)
|
||||||
self.charging = Usage:new()
|
|
||||||
self.awake = Usage:new()
|
|
||||||
self.sleeping = Usage:new()
|
|
||||||
self:accumulate()
|
self:accumulate()
|
||||||
end
|
end
|
||||||
|
|
||||||
function BatteryStat:onNotCharging()
|
function BatteryStat:onNotCharging()
|
||||||
self:debugOutput("onNotCharging")
|
self:debugOutput("onNotCharging")
|
||||||
self.was_charging = true
|
self.was_charging = true
|
||||||
self:dumpToText()
|
self:rest(false, true)
|
||||||
self.decharging = Usage:new()
|
|
||||||
self.awake = Usage:new()
|
|
||||||
self.sleeping = Usage:new()
|
|
||||||
self:accumulate()
|
self:accumulate()
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -207,10 +203,47 @@ function BatteryStat:showStatistics()
|
|||||||
table.insert(kv_pairs, "----------")
|
table.insert(kv_pairs, "----------")
|
||||||
table.insert(kv_pairs, {_("Historical records are dumped to"), ""})
|
table.insert(kv_pairs, {_("Historical records are dumped to"), ""})
|
||||||
table.insert(kv_pairs, {self.dump_file, ""})
|
table.insert(kv_pairs, {self.dump_file, ""})
|
||||||
UIManager:show(KeyValuePage:new{
|
table.insert(kv_pairs, "----------")
|
||||||
|
table.insert(kv_pairs, {_("If you would like to reset the data,"), "",
|
||||||
|
callback = function()
|
||||||
|
self:resetAll()
|
||||||
|
self:restart()
|
||||||
|
end})
|
||||||
|
table.insert(kv_pairs, {_("please tap here."), "",
|
||||||
|
callback = function()
|
||||||
|
self:resetAll()
|
||||||
|
self:restart()
|
||||||
|
end})
|
||||||
|
self.kv_page = KeyValuePage:new{
|
||||||
title = _("Battery statistics"),
|
title = _("Battery statistics"),
|
||||||
kv_pairs = kv_pairs,
|
kv_pairs = kv_pairs,
|
||||||
})
|
}
|
||||||
|
UIManager:show(self.kv_page)
|
||||||
|
end
|
||||||
|
|
||||||
|
function BatteryStat:reset(withCharging, withDischarging)
|
||||||
|
self:dumpToText()
|
||||||
|
self.awake = Usage:new()
|
||||||
|
self.sleeping = Usage:new()
|
||||||
|
|
||||||
|
if withCharging then
|
||||||
|
self.charging = Usage:new()
|
||||||
|
end
|
||||||
|
if withDischarging then
|
||||||
|
self.discharging = Usage:new()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function BatteryStat:resetAll()
|
||||||
|
self:reset(true, true)
|
||||||
|
self.charging_state = State:new()
|
||||||
|
self.awake_state = State:new()
|
||||||
|
end
|
||||||
|
|
||||||
|
function BatteryStat:restart()
|
||||||
|
dbg.dassert(self.kv_page ~= nil)
|
||||||
|
UIManager:close(self.kv_page)
|
||||||
|
self:showStatistics()
|
||||||
end
|
end
|
||||||
|
|
||||||
function BatteryStat:dumpToText()
|
function BatteryStat:dumpToText()
|
||||||
@@ -237,8 +270,8 @@ function BatteryStat:dump()
|
|||||||
self.charging:dump(kv_pairs)
|
self.charging:dump(kv_pairs)
|
||||||
self.charging:dumpCharging(kv_pairs)
|
self.charging:dumpCharging(kv_pairs)
|
||||||
table.insert(kv_pairs, {_("Since last charge"), ""})
|
table.insert(kv_pairs, {_("Since last charge"), ""})
|
||||||
self.decharging:dump(kv_pairs)
|
self.discharging:dump(kv_pairs)
|
||||||
self.decharging:dumpRemaining(kv_pairs)
|
self.discharging:dumpRemaining(kv_pairs)
|
||||||
return kv_pairs
|
return kv_pairs
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -223,7 +223,7 @@ end
|
|||||||
function KOSync:setCustomServer(server)
|
function KOSync:setCustomServer(server)
|
||||||
DEBUG("set custom server", server)
|
DEBUG("set custom server", server)
|
||||||
self.kosync_custom_server = server ~= "" and server or nil
|
self.kosync_custom_server = server ~= "" and server or nil
|
||||||
self:onSaveSettings()
|
self:saveSettings()
|
||||||
end
|
end
|
||||||
|
|
||||||
function KOSync:login()
|
function KOSync:login()
|
||||||
@@ -324,7 +324,7 @@ function KOSync:doRegister(username, password)
|
|||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
self:onSaveSettings()
|
self:saveSettings()
|
||||||
end
|
end
|
||||||
|
|
||||||
function KOSync:doLogin(username, password)
|
function KOSync:doLogin(username, password)
|
||||||
@@ -359,13 +359,13 @@ function KOSync:doLogin(username, password)
|
|||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
self:onSaveSettings()
|
self:saveSettings()
|
||||||
end
|
end
|
||||||
|
|
||||||
function KOSync:logout()
|
function KOSync:logout()
|
||||||
self.kosync_userkey = nil
|
self.kosync_userkey = nil
|
||||||
self.kosync_auto_sync = true
|
self.kosync_auto_sync = true
|
||||||
self:onSaveSettings()
|
self:saveSettings()
|
||||||
end
|
end
|
||||||
|
|
||||||
function KOSync:getLastPercent()
|
function KOSync:getLastPercent()
|
||||||
@@ -555,7 +555,7 @@ function KOSync:getProgress(manual)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function KOSync:onSaveSettings()
|
function KOSync:saveSettings()
|
||||||
local settings = {
|
local settings = {
|
||||||
custom_server = self.kosync_custom_server,
|
custom_server = self.kosync_custom_server,
|
||||||
username = self.kosync_username,
|
username = self.kosync_username,
|
||||||
|
|||||||
14
reader.lua
14
reader.lua
@@ -11,7 +11,6 @@ io.stdout:write([[
|
|||||||
[*] Current time: ]], os.date("%x-%X"), "\n\n")
|
[*] Current time: ]], os.date("%x-%X"), "\n\n")
|
||||||
io.stdout:flush()
|
io.stdout:flush()
|
||||||
|
|
||||||
|
|
||||||
-- load default settings
|
-- load default settings
|
||||||
require("defaults")
|
require("defaults")
|
||||||
local DataStorage = require("datastorage")
|
local DataStorage = require("datastorage")
|
||||||
@@ -165,6 +164,8 @@ if Device:needsTouchScreenProbe() then
|
|||||||
Device:touchScreenProbe()
|
Device:touchScreenProbe()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local exit_code = nil
|
||||||
|
|
||||||
if ARGV[argidx] and ARGV[argidx] ~= "" then
|
if ARGV[argidx] and ARGV[argidx] ~= "" then
|
||||||
local file = nil
|
local file = nil
|
||||||
if lfs.attributes(ARGV[argidx], "mode") == "file" then
|
if lfs.attributes(ARGV[argidx], "mode") == "file" then
|
||||||
@@ -189,13 +190,13 @@ if ARGV[argidx] and ARGV[argidx] ~= "" then
|
|||||||
FileManager:showFiles(home_dir)
|
FileManager:showFiles(home_dir)
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
UIManager:run()
|
exit_code = UIManager:run()
|
||||||
elseif last_file then
|
elseif last_file then
|
||||||
local ReaderUI = require("apps/reader/readerui")
|
local ReaderUI = require("apps/reader/readerui")
|
||||||
UIManager:nextTick(function()
|
UIManager:nextTick(function()
|
||||||
ReaderUI:showReader(last_file)
|
ReaderUI:showReader(last_file)
|
||||||
end)
|
end)
|
||||||
UIManager:run()
|
exit_code = UIManager:run()
|
||||||
else
|
else
|
||||||
return showusage()
|
return showusage()
|
||||||
end
|
end
|
||||||
@@ -213,7 +214,12 @@ local function exitReader()
|
|||||||
Device:exit()
|
Device:exit()
|
||||||
|
|
||||||
if Profiler then Profiler.stop() end
|
if Profiler then Profiler.stop() end
|
||||||
os.exit(0)
|
|
||||||
|
if type(exit_code) == "number" then
|
||||||
|
os.exit(exit_code)
|
||||||
|
else
|
||||||
|
os.exit(0)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
exitReader()
|
exitReader()
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ describe("Readerfooter module", function()
|
|||||||
book_time_to_read = true,
|
book_time_to_read = true,
|
||||||
chapter_time_to_read = true,
|
chapter_time_to_read = true,
|
||||||
})
|
})
|
||||||
|
UIManager:run()
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it("should setup footer as visible in all_at_once mode", function()
|
it("should setup footer as visible in all_at_once mode", function()
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ describe("Readerhighlight module", function()
|
|||||||
UIManager:scheduleIn(1, function()
|
UIManager:scheduleIn(1, function()
|
||||||
UIManager:close(readerui.dictionary.dict_window)
|
UIManager:close(readerui.dictionary.dict_window)
|
||||||
UIManager:close(readerui)
|
UIManager:close(readerui)
|
||||||
|
UIManager:quit()
|
||||||
end)
|
end)
|
||||||
UIManager:run()
|
UIManager:run()
|
||||||
end
|
end
|
||||||
@@ -57,6 +58,7 @@ describe("Readerhighlight module", function()
|
|||||||
UIManager:nextTick(function()
|
UIManager:nextTick(function()
|
||||||
UIManager:close(readerui.highlight.edit_highlight_dialog)
|
UIManager:close(readerui.highlight.edit_highlight_dialog)
|
||||||
UIManager:close(readerui)
|
UIManager:close(readerui)
|
||||||
|
UIManager:quit()
|
||||||
end)
|
end)
|
||||||
UIManager:run()
|
UIManager:run()
|
||||||
end
|
end
|
||||||
@@ -169,6 +171,7 @@ describe("Readerhighlight module", function()
|
|||||||
after_each(function()
|
after_each(function()
|
||||||
readerui.highlight:clear()
|
readerui.highlight:clear()
|
||||||
readerui.document.configurable.text_wrap = 0
|
readerui.document.configurable.text_wrap = 0
|
||||||
|
UIManager:close(readerui) -- close to flush settings
|
||||||
end)
|
end)
|
||||||
it("should highlight single word", function()
|
it("should highlight single word", function()
|
||||||
highlight_single_word(readerui, Geom:new{ x = 260, y = 70 })
|
highlight_single_word(readerui, Geom:new{ x = 260, y = 70 })
|
||||||
@@ -253,6 +256,7 @@ describe("Readerhighlight module", function()
|
|||||||
after_each(function()
|
after_each(function()
|
||||||
readerui.highlight:clear()
|
readerui.highlight:clear()
|
||||||
readerui.document.configurable.text_wrap = 0
|
readerui.document.configurable.text_wrap = 0
|
||||||
|
UIManager:close(readerui) -- close to flush settings
|
||||||
end)
|
end)
|
||||||
it("should highlight single word", function()
|
it("should highlight single word", function()
|
||||||
highlight_single_word(readerui, Geom:new{ x = 260, y = 70 })
|
highlight_single_word(readerui, Geom:new{ x = 260, y = 70 })
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ describe("Readerpaging module", function()
|
|||||||
it("should emit EndOfBook event at the end", function()
|
it("should emit EndOfBook event at the end", function()
|
||||||
UIManager:quit()
|
UIManager:quit()
|
||||||
UIManager:show(readerui)
|
UIManager:show(readerui)
|
||||||
UIManager:scheduleIn(1, function() UIManager:close(readerui) end)
|
UIManager:nextTick(function() UIManager:close(readerui) end)
|
||||||
UIManager:run()
|
UIManager:run()
|
||||||
readerui:handleEvent(Event:new("SetScrollMode", false))
|
readerui:handleEvent(Event:new("SetScrollMode", false))
|
||||||
readerui.zooming:setZoomMode("pageheight")
|
readerui.zooming:setZoomMode("pageheight")
|
||||||
@@ -54,7 +54,7 @@ describe("Readerpaging module", function()
|
|||||||
it("should emit EndOfBook event at the end", function()
|
it("should emit EndOfBook event at the end", function()
|
||||||
UIManager:quit()
|
UIManager:quit()
|
||||||
UIManager:show(readerui)
|
UIManager:show(readerui)
|
||||||
UIManager:scheduleIn(1, function() UIManager:close(readerui) end)
|
UIManager:nextTick(function() UIManager:close(readerui) end)
|
||||||
UIManager:run()
|
UIManager:run()
|
||||||
paging.page_positions = {}
|
paging.page_positions = {}
|
||||||
readerui:handleEvent(Event:new("SetScrollMode", true))
|
readerui:handleEvent(Event:new("SetScrollMode", true))
|
||||||
@@ -71,7 +71,7 @@ describe("Readerpaging module", function()
|
|||||||
UIManager:quit()
|
UIManager:quit()
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it("should scroll withtout crash backward on the first page", function()
|
it("should scroll backward on the first page without crash", function()
|
||||||
local sample_djvu = "spec/front/unit/data/djvu3spec.djvu"
|
local sample_djvu = "spec/front/unit/data/djvu3spec.djvu"
|
||||||
local tmp_readerui = ReaderUI:new{
|
local tmp_readerui = ReaderUI:new{
|
||||||
document = DocumentRegistry:openDocument(sample_djvu),
|
document = DocumentRegistry:openDocument(sample_djvu),
|
||||||
@@ -79,7 +79,7 @@ describe("Readerpaging module", function()
|
|||||||
tmp_readerui.paging:onScrollPanRel(-100)
|
tmp_readerui.paging:onScrollPanRel(-100)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it("should scroll withtout crash forward on the last page", function()
|
it("should scroll forward on the last page without crash", function()
|
||||||
local sample_djvu = "spec/front/unit/data/djvu3spec.djvu"
|
local sample_djvu = "spec/front/unit/data/djvu3spec.djvu"
|
||||||
local tmp_readerui = ReaderUI:new{
|
local tmp_readerui = ReaderUI:new{
|
||||||
document = DocumentRegistry:openDocument(sample_djvu),
|
document = DocumentRegistry:openDocument(sample_djvu),
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ describe("Readertoc module", function()
|
|||||||
readerui = ReaderUI:new{
|
readerui = ReaderUI:new{
|
||||||
document = DocumentRegistry:openDocument(sample_epub),
|
document = DocumentRegistry:openDocument(sample_epub),
|
||||||
}
|
}
|
||||||
|
-- reset book to first page
|
||||||
|
readerui.rolling:onGotoPage(0)
|
||||||
toc = readerui.toc
|
toc = readerui.toc
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|||||||
@@ -172,6 +172,7 @@ describe("UIManager spec", function()
|
|||||||
assert.truthy(old_reset_timer)
|
assert.truthy(old_reset_timer)
|
||||||
G_reader_settings:saveSetting("auto_suspend_timeout_seconds", 3600)
|
G_reader_settings:saveSetting("auto_suspend_timeout_seconds", 3600)
|
||||||
|
|
||||||
|
UIManager:run()
|
||||||
UIManager:quit()
|
UIManager:quit()
|
||||||
-- should skip on non-kobo devices
|
-- should skip on non-kobo devices
|
||||||
UIManager:_initAutoSuspend()
|
UIManager:_initAutoSuspend()
|
||||||
|
|||||||
Reference in New Issue
Block a user