first pass updater
This commit is contained in:
		
							parent
							
								
									bdb3b39d4c
								
							
						
					
					
						commit
						c262e983d4
					
				
					 2 changed files with 213 additions and 46 deletions
				
			
		|  | @ -1,79 +1,95 @@ | ||||||
| args = {...} | local args = {...} | ||||||
| 
 | 
 | ||||||
| url = "http://lua.gaywine.org" | local url = "http://lua.gaywine.org" | ||||||
| 
 | 
 | ||||||
| path = "bin/" | local path = "bin/" | ||||||
| if not fs.exists(path) then | if not fs.exists(path) then | ||||||
|     fs.makeDir(path) |     fs.makeDir(path) | ||||||
| end | end | ||||||
| temp = "temp/" | local temp = "temp/" | ||||||
| if not fs.exists(temp) then | if not fs.exists(temp) then | ||||||
|     fs.makeDir(temp) |     fs.makeDir(temp) | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| if #args > 0 then | if #args > 0 then | ||||||
|     programToInstall = args[1] |     programToInstall = args[1] | ||||||
|  | else | ||||||
|  |     print("usage:") | ||||||
|  |     print("install.lua <project>") | ||||||
|  |     print("install.lua <project> <custom install path>") | ||||||
| end | end | ||||||
| if #args > 1 then | if #args > 1 then | ||||||
|  |     print("WARNING: custom paths are currently not supported.") | ||||||
|     customPath = shell.resolve(args[2]) |     customPath = shell.resolve(args[2]) | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| function downloadFile(filename) | local function downloadFile(filename) | ||||||
|   fileUrl = url .. "/files/" .. programToInstall .. "/" .. filename |     print("downloading " .. filename .. "...") | ||||||
|  |     local fileUrl = url .. "/files/" .. programToInstall .. "/" .. filename | ||||||
| 
 | 
 | ||||||
|   result = http.get(fileUrl) |     local result = http.get(fileUrl) | ||||||
|   resultText = result.readAll() |     local resultText = result.readAll() | ||||||
| 
 | 
 | ||||||
|   file = fs.open(temp .. filename, "w") |     local file = fs.open(temp .. filename, "w") | ||||||
|   file.write(resultText) |     file.write(resultText) | ||||||
|   file.close() |     file.close() | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| function split(pString, pPattern) | local function split(pString, pPattern) | ||||||
|    local Table = {}  -- NOTE: use {n = 0} in Lua-5.0 |     local Table = {} -- NOTE: use {n = 0} in Lua-5.0 | ||||||
|    local fpat = "(.-)" .. pPattern |     local fpat = "(.-)" .. pPattern | ||||||
|    local last_end = 1 |     local last_end = 1 | ||||||
|    local s, e, cap = pString:find(fpat, 1) |     local s, e, cap = pString:find(fpat, 1) | ||||||
|    while s do |     while s do | ||||||
|           if s ~= 1 or cap ~= "" then |         if s ~= 1 or cap ~= "" then | ||||||
|          table.insert(Table,cap) |             table.insert(Table, cap) | ||||||
|           end |         end | ||||||
|           last_end = e+1 |         last_end = e + 1 | ||||||
|           s, e, cap = pString:find(fpat, last_end) |         s, e, cap = pString:find(fpat, last_end) | ||||||
|    end |     end | ||||||
|    if last_end <= #pString then |     if last_end <= #pString then | ||||||
|           cap = pString:sub(last_end) |         cap = pString:sub(last_end) | ||||||
|           table.insert(Table, cap) |         table.insert(Table, cap) | ||||||
|    end |     end | ||||||
|    return Table |     return Table | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| function getAllFiles() | local function getAllFiles() | ||||||
|   indexesUrl = url .. "/indexes/" .. programToInstall |     local indexesUrl = url .. "/indexes/" .. programToInstall | ||||||
| 
 | 
 | ||||||
|   result = http.get(indexesUrl) |     local result = http.get(indexesUrl) | ||||||
|   resultText = result.readAll() |     local resultText = result.readAll() | ||||||
|   resultTable = split(resultText, "\n") |     local resultTable = split(resultText, "\n") | ||||||
| 
 | 
 | ||||||
|   finalResult = {} |     local indexesFile = fs.open("bin/indexes.dat", "w") | ||||||
|   for key, value in ipairs(resultTable) do |     indexesFile.write(resultText) | ||||||
|     finalResult[key] = split(value, " ")[1] |     indexesFile.close() | ||||||
|   end |  | ||||||
| 
 | 
 | ||||||
|   return finalResult |     local programsFile = fs.open(path .. "programs.dat", "a") | ||||||
|  |     programsFile.write(programToInstall) | ||||||
|  |     programsFile.close() | ||||||
|  | 
 | ||||||
|  |     local finalResult = {} | ||||||
|  |     for key, value in ipairs(resultTable) do | ||||||
|  |         finalResult[key] = split(value, " ")[1] | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     return finalResult | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| function finishInstall(files) | local function finishInstall(files) | ||||||
|     for key, file in ipairs(files) do |     for key, file in ipairs(files) do | ||||||
|         if customPath ~= nil then |         if customPath ~= nil then | ||||||
|  |             print("moving " .. file .. " to " .. customPath .. "...") | ||||||
|             fs.move(temp .. file, customPath .. "/" .. file) |             fs.move(temp .. file, customPath .. "/" .. file) | ||||||
|         else |         else | ||||||
|             fs.move(temp .. binary, path .. binary) |             print("moving " .. file .. " to " .. path .. programToInstall .. "...") | ||||||
|  |             fs.move(temp .. file, path .. programToInstall .. "/" .. file) | ||||||
|         end |         end | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     if customPath ~= nil then |     if customPath ~= nil then | ||||||
|         program = "shell.run(" .. customPath .. "/run.lua)" |         local program = "shell.run(" .. customPath .. "/run.lua)" | ||||||
|         file = fs.open(path .. programToInstall .. "/run.lua") |         file = fs.open(path .. programToInstall .. "/run.lua") | ||||||
|         file.write(program) |         file.write(program) | ||||||
|         file.close() |         file.close() | ||||||
|  | @ -82,8 +98,27 @@ function finishInstall(files) | ||||||
|     fs.delete(temp) |     fs.delete(temp) | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| local files = getAllFiles() | if not fs.exists(path .. "programs.dat") then | ||||||
| for _,value in ipairs(files) do |   local file = fs.open(path .. "programs.dat", "w") | ||||||
|   downloadFile(value) |   file.write("") | ||||||
|  |   file.close() | ||||||
|  | end | ||||||
|  | local programsFile = fs.open(path .. "programs.dat", "r") | ||||||
|  | local programsText = programsFile.readAll() | ||||||
|  | local programsTable = split(programsText, "\n") | ||||||
|  | local shouldInstall = true | ||||||
|  | for _, value in ipairs(programsTable) do | ||||||
|  |     if value == programToInstall then | ||||||
|  |         print(programToInstall .. " is already installed. checking for updates instead...") | ||||||
|  |         shouldInstall = false | ||||||
|  |     end | ||||||
|  | end | ||||||
|  | if shouldInstall then | ||||||
|  |     local files = getAllFiles() | ||||||
|  |     for _, value in ipairs(files) do | ||||||
|  |         downloadFile(value) | ||||||
|  |     end | ||||||
|  |     finishInstall(files) | ||||||
|  | elseif fs.exists(path .. "updater/update.lua") then | ||||||
|  |     shell.run(path .. "updater/update.lua " .. programToInstall) | ||||||
| end | end | ||||||
| finishInstall(files) |  | ||||||
|  | @ -1 +1,133 @@ | ||||||
| print('fuck') | args = {...} | ||||||
|  | 
 | ||||||
|  | url = "http://lua.gaywine.org" | ||||||
|  | 
 | ||||||
|  | path = "bin/" | ||||||
|  | if not fs.exists(path) then | ||||||
|  |     fs.makeDir(path) | ||||||
|  | end | ||||||
|  | temp = "temp/" | ||||||
|  | if not fs.exists(temp) then | ||||||
|  |     fs.makeDir(temp) | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | if #args > 0 then | ||||||
|  |     programToInstall = args[1] | ||||||
|  | end | ||||||
|  | if #args > 1 then | ||||||
|  |     print("WARNING: custom paths are currently not supported.") | ||||||
|  |     customPath = shell.resolve(args[2]) | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | local function downloadFile(filename) | ||||||
|  |     print("downloading " .. filename .. "...") | ||||||
|  |     local fileUrl = url .. "/files/" .. programToInstall .. "/" .. filename | ||||||
|  | 
 | ||||||
|  |     local result = http.get(fileUrl) | ||||||
|  |     local resultText = result.readAll() | ||||||
|  | 
 | ||||||
|  |     local file = fs.open(temp .. filename, "w") | ||||||
|  |     file.write(resultText) | ||||||
|  |     file.close() | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | local function split(pString, pPattern) | ||||||
|  |     local Table = {} -- NOTE: use {n = 0} in Lua-5.0 | ||||||
|  |     local fpat = "(.-)" .. pPattern | ||||||
|  |     local last_end = 1 | ||||||
|  |     local s, e, cap = pString:find(fpat, 1) | ||||||
|  |     while s do | ||||||
|  |         if s ~= 1 or cap ~= "" then | ||||||
|  |             table.insert(Table, cap) | ||||||
|  |         end | ||||||
|  |         last_end = e + 1 | ||||||
|  |         s, e, cap = pString:find(fpat, last_end) | ||||||
|  |     end | ||||||
|  |     if last_end <= #pString then | ||||||
|  |         cap = pString:sub(last_end) | ||||||
|  |         table.insert(Table, cap) | ||||||
|  |     end | ||||||
|  |     return Table | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | local function getAllFiles() | ||||||
|  |     local indexesUrl = url .. "/indexes/" .. programToInstall | ||||||
|  |     local updateUrl = url .. "/updates/" .. programToInstall | ||||||
|  | 
 | ||||||
|  |     local currentFiles = "" | ||||||
|  |     if fs.exists(path .. "indexes.dat") then | ||||||
|  |         local indexesFile = fs.open(path .. "indexes.dat", "r") | ||||||
|  |         currentFiles = indexesFile.readAll() | ||||||
|  |         indexesFile.close() | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     local result = http.post(indexesUrl, currentFiles) | ||||||
|  |     local resultText = result.readAll() | ||||||
|  |     local resultTable = split(resultText, "\n") | ||||||
|  | 
 | ||||||
|  |     local result2 = http.get(indexesUrl) | ||||||
|  |     local resultText2 = result2.readAll() | ||||||
|  |     local resultTable2 = split(resultText2, "\n") | ||||||
|  | 
 | ||||||
|  |     local newIndexesFile = fs.open(path .. "indexes.dat", "w") | ||||||
|  |     newIndexesFile.write(resultText) | ||||||
|  |     newIndexesFile.close() | ||||||
|  | 
 | ||||||
|  |     local finalResult = {} | ||||||
|  |     for key, value in ipairs(resultTable2) do | ||||||
|  |         local filename = split(value, " ")[1] | ||||||
|  |         for key2, value2 in ipairs(resultTable) do | ||||||
|  |             local valueTable = split(value2, " ") | ||||||
|  |             local filePath = path .. programToInstall .. "/" .. valueTable[1] | ||||||
|  |             if valueTable[2] == "delete" and fs.exists(filePath) then | ||||||
|  |                 fs.delete(filePath) | ||||||
|  |             elseif valueTable[2] == "download" then | ||||||
|  |                 finalResult[#finalResult + 1] = valueTable[1] | ||||||
|  |             end | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     return finalResult | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | local function finishInstall(files) | ||||||
|  |     for key, file in ipairs(files) do | ||||||
|  |         if customPath ~= nil then | ||||||
|  |             print("moving " .. file .. " to " .. customPath .. "...") | ||||||
|  |             fs.move(temp .. file, customPath .. "/" .. file) | ||||||
|  |         else | ||||||
|  |             print("moving " .. file .. " to " .. path .. programToInstall .. "...") | ||||||
|  |             fs.move(temp .. file, path .. programToInstall .. "/" .. file) | ||||||
|  |         end | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     if customPath ~= nil then | ||||||
|  |         local program = "shell.run(" .. customPath .. "/run.lua)" | ||||||
|  |         file = fs.open(path .. programToInstall .. "/run.lua") | ||||||
|  |         file.write(program) | ||||||
|  |         file.close() | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|  |     fs.delete(temp) | ||||||
|  | end | ||||||
|  | 
 | ||||||
|  | if programToInstall == nil then | ||||||
|  |     print("no program specified, updating all...") | ||||||
|  |     local programsFile = fs.open(path .. "programs.dat", "r") | ||||||
|  |     local programsText = programsFile.readAll() | ||||||
|  |     local programsTable = split(programsText, "\n") | ||||||
|  |     for _, value in ipairs(programsTable) do | ||||||
|  |         programToInstall = value | ||||||
|  |         local files = getAllFiles() | ||||||
|  |         for _, value in ipairs(files) do | ||||||
|  |             downloadFile(value) | ||||||
|  |         end | ||||||
|  |         finishInstall(files) | ||||||
|  |     end | ||||||
|  | else | ||||||
|  |     local files = getAllFiles() | ||||||
|  |     for _, value in ipairs(files) do | ||||||
|  |         downloadFile(value) | ||||||
|  |     end | ||||||
|  |     finishInstall(files) | ||||||
|  | end | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue