--TODO: implement -Syu
--IMPORTANT, THIS IS THE PACKAGE DATABASE
local ENCDATA ="ENCIOK/59bd0e8e27b9d34a05b997064728082a/raw/database.json"
--check if the user is stupid
if #arg == 0 then
print("error: no operation specified (use encpac -h for help)")
return
end
--open the package DB
local ENCfile = fs.open("packagedb/ENCdb", "r")
if ENCfile then
ENC = ENCfile.readAll()
ENC = textutils.unserialiseJSON(ENC)
ENCfile.close()
else
if arg[1] ~= "-Sy" then
print("WARNING didn't find package database")
end
end
local function download(address)
local answer, err = http.get("https://gist.githubusercontent.com/".. address)
if not err then
local data = answer.readAll()
answer.close()
return data
end
printError(err)
return "poopoo"
end
local function refresh()
print("synchronizing package database..")
print("ENC")
fs.delete("packagedb/ENCdb")
local file = fs.open("packagedb/ENCdb", "w")
local data = download(ENCDATA)
if data == "poopoo" then
return
end
file.write(data)
file.close()
print("done!")
end
--getting all depends for package
local function checkDepends(pacName, installList)
if ENC[pacName] then
if not installList[pacName] then
installList[pacName] = true
end
if ENC[pacName].depends then
for _, v in ipairs(ENC[pacName].depends) do
checkDepends(v, installList)
end
else
return
end
else
printError("can't find package:", pacName)
return "poopoo"
end
end
local function synchronize(pacName, path)
path = path or ""
--get depends
print("checking dependencies\n..")
local packsToInstall = {}
if checkDepends(pacName, packsToInstall) == "poopoo" then
return
end
print("no problems found, about to install the following:\n")
for v, _ in pairs(packsToInstall) do
io.write(v.." ")
end
print()
io.write("\nProceed with installation? [Y/n] ")
local inp = io.read()
if inp == "" or inp == "Y" or inp == "y" then
print("installing:..")
else
return
end
for v, _ in pairs(packsToInstall) do
print(v)
local data = download(ENC[v].url)
if data == "poopoo" then
return
end
local file = fs.open(path .. "/" .. ENC[v].install, "w")
file.write(data)
file.close()
end
print("done!")
end
--lookup table for arguments
local argtable = {
["-S"] = synchronize,
["-Sl"] = function(a) synchronize(arg[3], a) end,
["-Sy"] = refresh,
["-h"] = function()
end
}
if argtable[arg[1]] then
argtable[arg[1]](arg[2])
else
printError("error: invalid option", arg[1])
end