OC-KittenOS/code/apps/app-wget.lua

83 lines
1.8 KiB
Lua

-- This is released into the public domain.
-- No warranty is provided, implied or otherwise.
local event = require("event")(neo)
local neoux = require("neoux")(event, neo)
local primaryINet = neo.requireAccess("c.internet", "internet access").list()()
-- Enter URL dialog
local running = true
local sRunning = true
-- useful to perform a system update
local url = "http://20kdc.duckdns.org/neo/inst.lua"
local function doWorking()
return 50, 1, nil, neoux.tcwindow(50, 1, {
neoux.tcrawview(1, 1, {"Downloading now..."}),
}, function (w)
sRunning = false
end, 0xFFFFFF, 0)
end
local function doMainWin()
return 50, 3, nil, neoux.tcwindow(50, 3, {
neoux.tcrawview(1, 1, {"URL to download?"}),
neoux.tcfield(1, 2, 50, function (t)
url = t or url
return url
end),
neoux.tcbutton(41, 3, "Download", function (w)
sRunning = true
w.reset(doWorking())
local nurl = url
local fd = neoux.fileDialog(true)
if not fd then
w.reset(doMainWin())
return
end
-- download!
local req, err = primaryINet.request(nurl)
if not req then
fd.close()
neoux.startDialog("failed request:\n" .. tostring(err))
w.reset(doMainWin())
return
end
-- OpenComputers#535
req.finishConnect()
while sRunning do
local n, n2 = req.read(neo.readBufSize)
if not n then
if n2 then
neoux.startDialog("failed download:\n" .. tostring(n2))
break
else
break
end
else
if n == "" then
event.sleepTo(os.uptime() + 0.05)
else
local o, r = fd.write(n)
if not o then
neoux.startDialog("failed write:\n" .. tostring(r))
break
end
end
end
end
pcall(req.close)
pcall(fd.close)
w.reset(doMainWin())
end)
}, function (w)
w.close()
running = false
end, 0xFFFFFF, 0)
end
local w = neoux.create(doMainWin())
while running do
event.pull()
end