CC-Tweaked/src/main/resources/data/computercraft/lua/rom/programs/http/wget.lua

93 lines
1.9 KiB
Lua

local function printUsage()
local programName = arg[0] or fs.getName(shell.getRunningProgram())
print("Usage:")
print(programName .. " <url> [filename]")
print(programName .. " run <url>")
end
local tArgs = { ... }
local run = false
if tArgs[1] == "run" then
table.remove(tArgs, 1)
run = true
end
if #tArgs < 1 then
printUsage()
return
end
local url = table.remove(tArgs, 1)
if not http then
printError("wget requires the http API")
printError("Set http.enabled to true in CC: Tweaked's config")
return
end
local function getFilename(sUrl)
sUrl = sUrl:gsub("[#?].*" , ""):gsub("/+$" , "")
return sUrl:match("/([^/]+)$")
end
local function get(sUrl)
-- Check if the URL is valid
local ok, err = http.checkURL(url)
if not ok then
printError(err or "Invalid URL.")
return
end
write("Connecting to " .. sUrl .. "... ")
local response = http.get(sUrl , nil , true)
if not response then
print("Failed.")
return nil
end
print("Success.")
local sResponse = response.readAll()
response.close()
return sResponse or ""
end
if run then
local res = get(url)
if not res then return end
local func, err = load(res, getFilename(url), "t", _ENV)
if not func then
printError(err)
return
end
local ok, err = pcall(func, table.unpack(tArgs))
if not ok then
printError(err)
end
else
local sFile = tArgs[1] or getFilename(url) or url
local sPath = shell.resolve(sFile)
if fs.exists(sPath) then
print("File already exists")
return
end
local res = get(url)
if not res then return end
local file, err = fs.open(sPath, "wb")
if not file then
printError("Cannot save file: " .. err)
return
end
file.write(res)
file.close()
print("Downloaded as " .. sFile)
end