itchy/check.lua
2018-03-25 13:43:34 -07:00

101 lines
3.0 KiB
Lua

require("love.timer")
local thread, timer
do
local _obj_0 = love
thread, timer = _obj_0.thread, _obj_0.timer
end
local http = require("socket.http")
local receive = thread.getChannel("send-itchy")
local send = thread.getChannel("receive-itchy")
local check
check = function(data)
local exponential_backoff = 1
while true do
local _continue_0 = false
repeat
do
local result = { }
if data.url then
result.body, result.status = http.request(data.url)
elseif data.proxy then
if not (data.target) then
result.message = "'target' or 'url' must be defined!"
send:push(result)
return false
end
result.body, result.status = http.request(tostring(data.proxy) .. "/get/https://itch.io/api/1/x/wharf/latest?target=" .. tostring(data.target) .. "&channel_name=" .. tostring(data.channel))
end
if not (result.body) then
result.message = "socket.http.request error: " .. tostring(status)
send:push(result)
return false
end
result.version = result.body:match('%s*{%s*"latest"%s*:%s*"(.+)"%s*}%s*')
result.version = tonumber(result.version) or result.version
if data.version then
result.latest = result.version == data.version
end
if status ~= 200 and (not version) then
result.message = "unknown, error getting latest version: HTTP " .. tostring(status) .. ", trying again in " .. tostring(exponential_backoff) .. " seconds"
send:push(result)
timer.sleep(exponential_backoff)
exponential_backoff = exponential_backoff * 2
_continue_0 = true
break
elseif latest ~= nil then
if latest then
result.message = tostring(result.version) .. ", you have the latest version"
else
result.message = tostring(result.version) .. ", there is a newer version available!"
end
else
result.message = result.version
end
send:push(result)
return true
end
_continue_0 = true
until true
if not _continue_0 then
break
end
end
end
local start
start = function()
local data = receive:demand()
if not (data.proxy or data.url) then
data.proxy = "http://104.236.139.220:16343"
end
if not (data.channel) then
require("love.system")
local os = love.system.getOS()
local _exp_0 = os
if "OS X" == _exp_0 then
data.channel = "osx"
elseif "Windows" == _exp_0 then
data.channel = "win32"
elseif "Linux" == _exp_0 then
data.channel = "linux"
elseif "Android" == _exp_0 then
data.channel = "android"
elseif "iOS" == _exp_0 then
data.channel = "ios"
else
data.channel = os
end
end
check(data)
if data.interval then
while true do
timer.sleep(data.interval)
if receive:getCount() > 0 then
return start()
else
check(data)
end
end
end
end
return start()