mirror of
https://github.com/ShadowKatStudios/OC-Minitel.git
synced 2024-11-15 06:48:05 +11:00
71 lines
1.5 KiB
Lua
71 lines
1.5 KiB
Lua
local serial = require "serialization"
|
|
local component = require "component"
|
|
local computer = require "computer"
|
|
local realtime = require "realtime"
|
|
local event = require "event"
|
|
local timer = nil
|
|
local cfg = {}
|
|
|
|
cfg.url = "https://google.com"
|
|
cfg.frequency = 300
|
|
cfg.offset = 0
|
|
|
|
local function saveConfig()
|
|
local f = io.open("/etc/realtime-sync.cfg","wb")
|
|
if not f then
|
|
return false
|
|
end
|
|
f:write(serial.serialize(cfg))
|
|
f:close()
|
|
end
|
|
local function loadConfig()
|
|
local f = io.open("/etc/realtime-sync.cfg","rb")
|
|
if not f then
|
|
saveConfig()
|
|
return false
|
|
end
|
|
for k,v in pairs(serial.unserialize(f:read("*a"))) do
|
|
cfg[k] = v
|
|
end
|
|
f:close()
|
|
end
|
|
|
|
local function convertToEpoch(s)
|
|
p="%a+, (%d+) (%a+) (%d+) (%d+):(%d+):(%d+) GMT"
|
|
day,month,year,hour,min,sec=s:match(p)
|
|
months={Jan=1,Feb=2,Mar=3,Apr=4,May=5,Jun=6,Jul=7,Aug=8,Sep=9,Oct=10,Nov=11,Dec=12}
|
|
month=months[month]
|
|
return os.time({day=day,month=month,year=year,hour=hour,min=min,sec=sec})
|
|
end
|
|
local function updateTime()
|
|
local ut,rq = computer.uptime(), component.internet.request(cfg.url)
|
|
while true do
|
|
if rq.finishConnect() then
|
|
break
|
|
end
|
|
end
|
|
local _, _, headers = rq.response()
|
|
local date = headers.Date
|
|
if type(date) == "table" then
|
|
date=date[1]
|
|
end
|
|
realtime.update(convertToEpoch(date), ut, cfg.offset*60*60)
|
|
rq.close()
|
|
end
|
|
|
|
function sync()
|
|
updateTime()
|
|
print(os.date("%Y-%m-%d %H:%M",realtime.time()))
|
|
end
|
|
function start()
|
|
loadConfig()
|
|
if not timer then
|
|
timer = event.timer(cfg.frequency, updateTime, math.huge)
|
|
end
|
|
sync()
|
|
end
|
|
function stop()
|
|
event.cancel(timer)
|
|
timer = nil
|
|
end
|