2017-01-01 18:29:29 +00:00
|
|
|
local Device = require("device")
|
|
|
|
|
2017-02-18 02:38:49 +00:00
|
|
|
local command
|
|
|
|
-- TODO(hzj-jie): Does pocketbook provide ntpdate?
|
|
|
|
if Device:isKobo() then
|
|
|
|
command = "ntpd -q -n -p pool.ntp.org"
|
|
|
|
elseif Device:isKindle() or Device:isPocketBook() then
|
|
|
|
command = "ntpdate pool.ntp.org"
|
|
|
|
else
|
2017-01-01 18:29:29 +00:00
|
|
|
return { disabled = true, }
|
|
|
|
end
|
|
|
|
|
|
|
|
local InfoMessage = require("ui/widget/infomessage")
|
|
|
|
local UIManager = require("ui/uimanager")
|
|
|
|
local WidgetContainer = require("ui/widget/container/widgetcontainer")
|
|
|
|
local T = require("ffi/util").template
|
|
|
|
local _ = require("gettext")
|
2017-02-25 16:00:37 +00:00
|
|
|
local NetworkMgr = require("ui/network/manager")
|
2017-01-01 18:29:29 +00:00
|
|
|
|
|
|
|
local TimeSync = WidgetContainer:new{
|
|
|
|
name = "timesync",
|
|
|
|
}
|
|
|
|
|
|
|
|
local function currentTime()
|
|
|
|
local std_out = io.popen("date")
|
|
|
|
if std_out then
|
|
|
|
local result = std_out:read("*all")
|
|
|
|
std_out:close()
|
2017-02-18 02:38:49 +00:00
|
|
|
if result ~= nil then
|
|
|
|
result = result:gsub("\n", "")
|
|
|
|
return T(_("New time is %1."), result)
|
|
|
|
end
|
2017-01-01 18:29:29 +00:00
|
|
|
end
|
2017-02-18 02:38:49 +00:00
|
|
|
return _("Time synchronized.")
|
2017-01-01 18:29:29 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
local function execute()
|
2017-02-18 02:38:49 +00:00
|
|
|
local info = InfoMessage:new{
|
|
|
|
text = _("Synchronizing time. This may take several seconds.")
|
|
|
|
}
|
|
|
|
UIManager:show(info)
|
|
|
|
UIManager:forceRePaint()
|
2017-01-01 18:29:29 +00:00
|
|
|
local txt
|
2017-02-18 02:38:49 +00:00
|
|
|
if os.execute(command) ~= 0 then
|
2017-02-19 11:33:42 +00:00
|
|
|
txt = _("Failed to retrieve time from server. Please check your network configuration.")
|
2017-01-01 18:29:29 +00:00
|
|
|
else
|
|
|
|
txt = currentTime()
|
|
|
|
end
|
2017-02-18 02:38:49 +00:00
|
|
|
os.execute("hwclock -u -w")
|
|
|
|
UIManager:close(info)
|
2017-01-01 18:29:29 +00:00
|
|
|
UIManager:show(InfoMessage:new{
|
|
|
|
text = txt,
|
|
|
|
timeout = 3,
|
|
|
|
})
|
|
|
|
end
|
|
|
|
|
|
|
|
local menuItem = {
|
|
|
|
text = _("Synchronize time"),
|
2018-09-04 21:55:58 +00:00
|
|
|
keep_menu_open = true,
|
2017-02-25 16:00:37 +00:00
|
|
|
callback = function()
|
|
|
|
if NetworkMgr:isOnline() then
|
|
|
|
execute()
|
|
|
|
else
|
|
|
|
NetworkMgr:promptWifiOn()
|
|
|
|
end
|
|
|
|
end
|
2017-01-01 18:29:29 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function TimeSync:init()
|
|
|
|
self.ui.menu:registerToMainMenu(self)
|
|
|
|
end
|
|
|
|
|
2017-03-04 13:46:38 +00:00
|
|
|
function TimeSync:addToMainMenu(menu_items)
|
|
|
|
menu_items.synchronize_time = menuItem
|
2017-01-01 18:29:29 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
return TimeSync
|