Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local function GetTextFromUrl(address)
- local fileHandle = http.get(address);
- if fileHandle == nil then
- error("Could not execute \"get\" on address: "..address)
- end
- local text = fileHandle.readAll();
- fileHandle.close();
- return text;
- end
- local function Save(name,data)
- local file = fs.open(name,"w")
- if not file then
- error("File "..name.." could not be opened");
- end
- file.write(data)
- file.close()
- end
- local function GetLastName(str)
- local lastsl = string.match(str,'^.*()/');
- if string.len(str) == lastsl then
- str = str:sub(1, -2)
- lastsl = string.match(str,'^.*()/');
- end
- return string.sub(str,lastsl+1);
- end
- function SaveFileFromURL(address,newName,path)
- if not newName then
- newName = GetLastName(address);
- end
- if path then
- if string.len(path) ~= string.match(path,'^.*()/') then
- path = path .. "/";
- end
- newName = path .. newName;
- end
- print("Saving file "..address.. " as ".. newName)
- Save(newName,GetTextFromUrl(address));
- return;
- end
- function Walker(url,path)
- print("");
- print("Checking directory "..url)
- local resp = GetTextFromUrl(url)
- local jsonresp = Json.decode(resp);
- local childs = jsonresp.values;
- for i=1,#childs do
- local child = childs[i];
- if child.type == "commit_directory" then
- Walker(child.links.self.href)
- elseif child.type == "commit_file" then
- SaveFileFromURL(child.links.self.href,path..child.path);
- else
- print("Unknown type "..tostring(child.type))
- end
- end
- end
- local mode,address,newName = ...;
- if mode ~= nil then
- if mode ~= "file" and mode ~= "dir" then
- error("Invalid mode")
- end
- if not http.checkURL(address) then
- error("Invalid URL")
- end
- if mode == "file" then
- SaveFileFromURL(address,newName);
- else
- if Json == nil then
- Save("Json",GetTextFromUrl("https://api.bitbucket.org/2.0/repositories/Hiranus0/mcrestapi/src/master/ComputerCraft/Lua/API/Json.lua"));
- os.loadAPI("Json");
- end
- Walker(address,newName);
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement