Publish the latest station script from the console so online hosts download and reboot immediately while offline hosts update on their next load.
79 lines
1.6 KiB
Lua
79 lines
1.6 KiB
Lua
local STATION_BROADCAST_URL = "http://stabadmin.fse-media.group/downloads/station_broadcast.lua"
|
|
|
|
local function fetch(url)
|
|
if not http then
|
|
return nil, "HTTP API unavailable"
|
|
end
|
|
|
|
if http.checkURL then
|
|
local ok, err = http.checkURL(url)
|
|
if not ok then
|
|
return nil, err or "URL blocked"
|
|
end
|
|
end
|
|
|
|
local res, err = http.get(url)
|
|
if not res then
|
|
return nil, err or "request failed"
|
|
end
|
|
|
|
local body = res.readAll()
|
|
res.close()
|
|
|
|
if type(body) ~= "string" or #body == 0 then
|
|
return nil, "empty response"
|
|
end
|
|
|
|
return body
|
|
end
|
|
|
|
local function writeFile(path, content)
|
|
local dir = fs.getDir(path)
|
|
if dir and dir ~= "" and not fs.exists(dir) then
|
|
fs.makeDir(dir)
|
|
end
|
|
|
|
local f = fs.open(path, "w")
|
|
if not f then
|
|
return nil, "cannot open " .. path
|
|
end
|
|
|
|
f.write(content)
|
|
f.close()
|
|
return true
|
|
end
|
|
|
|
local function downloadTo(url, path)
|
|
write(("Updating %s... "):format(path))
|
|
local body, err = fetch(url)
|
|
if not body then
|
|
print("FAILED")
|
|
print(err)
|
|
return false
|
|
end
|
|
|
|
local ok, werr = writeFile(path, body)
|
|
if not ok then
|
|
print("FAILED")
|
|
print(werr)
|
|
return false
|
|
end
|
|
|
|
print("OK")
|
|
return true
|
|
end
|
|
|
|
local targets = {
|
|
{ url = STATION_BROADCAST_URL, path = shell.resolve("/startup") }
|
|
}
|
|
|
|
for _, t in ipairs(targets) do
|
|
local ok = downloadTo(t.url, t.path)
|
|
if not ok then
|
|
print("Update aborted.")
|
|
return
|
|
end
|
|
end
|
|
|
|
print("Update complete.")
|