forked from TheHomecraft/YouCube-Client
111 lines
3.0 KiB
Lua
111 lines
3.0 KiB
Lua
--[[
|
|
_ _ _ ____ ___ ____ _ _ ____ ____
|
|
| |\ | [__ | |__| | | |___ |__/
|
|
| | \| ___] | | | |___ |___ |___ | \
|
|
|
|
Github Repository: https://github.com/CC-YouCube
|
|
Homepage: https://youcube.madefor.cc/
|
|
License: GPL-3.0
|
|
]]
|
|
-- OpenInstaller v1.0.0 (based on wget)
|
|
|
|
local BASE_URL = "https://git.befatorinc.de/PublicDimension/YouCube-Client/raw/branch/main/"
|
|
|
|
local files = {
|
|
["./youcube.lua"] = BASE_URL .. "youcube.lua",
|
|
["./lib/youcubeapi.lua"] = BASE_URL .. "lib/youcubeapi.lua",
|
|
["./lib/numberformatter.lua"] = BASE_URL .. "lib/numberformatter.lua",
|
|
["./lib/semver.lua"] = BASE_URL .. "lib/semver.lua",
|
|
["./lib/argparse.lua"] = BASE_URL .. "lib/argparse.lua",
|
|
["./lib/string_pack.lua"] = BASE_URL .. "lib/string_pack.lua",
|
|
}
|
|
|
|
if not http then
|
|
printError("OpenInstaller requires the http API")
|
|
printError("Set http.enabled to true in the ComputerCraft config")
|
|
return
|
|
end
|
|
|
|
local function tableContains(_table, element)
|
|
for _, value in pairs(_table) do
|
|
if value == element then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
local function writeColoured(text, colour)
|
|
term.setTextColour(colour)
|
|
term.write(text)
|
|
end
|
|
|
|
local function question(message)
|
|
local previous_colour = term.getTextColour()
|
|
|
|
writeColoured(message .. "? [", colors.orange)
|
|
writeColoured("Y", colors.lime)
|
|
writeColoured("/", colors.orange)
|
|
writeColoured("n", colors.red)
|
|
writeColoured("] ", colors.orange)
|
|
|
|
-- Reset colour
|
|
term.setTextColour(previous_colour)
|
|
|
|
local input_char = read():sub(1, 1):lower()
|
|
local accept_chars = { "o", "k", "y", "j", "" }
|
|
|
|
if tableContains(accept_chars, input_char) then
|
|
return true
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
local unknown_error = "Unknown error"
|
|
|
|
local function http_get(url)
|
|
local valid_url, error_message = http.checkURL(url)
|
|
if not valid_url then
|
|
printError(('"%s" %s.'):format(url, error_message or "Invalid URL"))
|
|
return
|
|
end
|
|
|
|
local response, http_error_message = http.get(url, nil, true)
|
|
if not response then
|
|
printError(('Failed to download "%s" (%s).'):format(url, http_error_message or unknown_error))
|
|
return
|
|
end
|
|
|
|
local response_body = response.readAll()
|
|
response.close()
|
|
|
|
if not response_body then
|
|
printError(('Failed to download "%s" (Empty response).'):format(url))
|
|
end
|
|
|
|
return response_body
|
|
end
|
|
|
|
for path, download_url in pairs(files) do
|
|
local resolved_path = shell.resolve(path)
|
|
if fs.exists(resolved_path) then
|
|
if not question(('"%s" already exists. Override'):format(path)) then
|
|
return
|
|
end
|
|
end
|
|
|
|
local response_body = http_get(download_url)
|
|
|
|
local file, file_open_error_message = fs.open(resolved_path, "wb")
|
|
if not file then
|
|
printError(('Failed to save "%s" (%s).'):format(path, file_open_error_message or unknown_error))
|
|
return
|
|
end
|
|
|
|
file.write(response_body)
|
|
file.close()
|
|
|
|
term.setTextColour(colors.lime)
|
|
print(('Downloaded "%s"'):format(path))
|
|
end |