NielsUtrecht

installer

Sep 11th, 2013
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.43 KB | None | 0 0
  1. local baseUrl = "https://raw.githubusercontent.com/nielsutrecht/computercraft/master/"
  2. local dataId = "install-data.lua"
  3. local appTable = {}
  4.  
  5. function download(id)
  6.     local handle = http.get(baseUrl..id)
  7.     if(handle == nil) then
  8.         error("Could not download: "..baseUrl..id)
  9.     end
  10.     local data = handle.readAll()
  11.     handle.close()
  12.    
  13.     return data
  14. end
  15.  
  16. function saveFile(data, filename)
  17.     local handle = fs.open(filename, "w")
  18.     handle.write(data)
  19.     handle.close()
  20. end
  21.  
  22. function loadInstalled()
  23.     local installed = nil
  24.     local handle = fs.open("installed.txt", "r")
  25.     if(handle ~= nil) then
  26.         installed = textutils.unserialize(handle.readAll())
  27.         handle.close()
  28.     end
  29.     return installed
  30. end
  31.  
  32. function findDepTree(depTable, app)
  33.     if(app["deps"] ~= nil and #app["deps"] > 0) then
  34.         print("App '" .. app["app"] .. "' has " .. tostring(#app["deps"]) .. " dependencies.")
  35.         for k,dep in pairs(app["deps"]) do
  36.             depApp = find(dep)
  37.             if(depApp ~= nil) then
  38.                 findDepTree(depTable, depApp)
  39.             else
  40.                 error("Could not find dependancy: " .. dep)
  41.             end
  42.         end
  43.     end
  44.     depTable[app["app"]] = app
  45. end
  46.  
  47. function install(app)
  48.     installed = installed or {}
  49.     print("Installing app: " .. app["app"])
  50.     local depTable = {}
  51.     findDepTree(depTable, app)
  52.     installApps(depTable)
  53.     saveFile(textutils.serialize(depTable), "installed.txt")
  54.     return installed
  55. end
  56.  
  57. function installApps(depTable)
  58.     for key, app in pairs(depTable) do
  59.         local data = download(app["id"])
  60.         local saveas = app["saveas"]
  61.        
  62.         if(saveas == nil) then
  63.             saveas = app["app"]
  64.         end
  65.         saveFile(data, saveas)
  66.         print("Saved " .. app["app"] .. " as " .. saveas)          
  67.     end
  68. end
  69.  
  70. function find(name)
  71.     for k, app in pairs(appTable) do
  72.         if(app["app"] == name) then
  73.             return app
  74.         end
  75.     end
  76.     return nil
  77. end
  78.  
  79. function writeList()
  80.     for k, app in pairs(appTable) do
  81.         print(tostring(k) .. ": " .. app["app"])          
  82.     end
  83.    
  84. end
  85.  
  86. function refresh()
  87.     local installed = loadInstalled()
  88.    
  89.     if(installed == nil) then
  90.         print("No installed apps")
  91.         return
  92.     else
  93.         print("Redownloading files.")
  94.         installApps(installed)
  95.     end  
  96. end
  97.  
  98. function makeSpace(level)
  99.     local s = ""
  100.     for i = 0,level,1 do
  101.         s = s .. "  "
  102.     end
  103.     return s
  104. end
  105.  
  106. function info(app, level)
  107.     level = level or 0
  108.     local saveas = app["app"]
  109.     if(app["saveas"] ~= nil) then
  110.         saveas = app["saveas"]
  111.     end
  112.     local space = makeSpace(level)
  113.     print(space .. "App: " .. app["app"].. ", save as: " ..saveas)
  114.     local numDeps = 0
  115.    
  116.     if(app["deps"] ~= nil) then numDeps = #app["deps"] end
  117.    
  118.     print(space .. "Dependencies(" .. tostring(numDeps) .."):")
  119.    
  120.     if(numDeps > 0) then
  121.         for k,v in pairs(app["deps"]) do
  122.             local dep = find(v)
  123.             info(dep, level + 1)
  124.         end
  125.     end
  126. end
  127.  
  128. function doCommand(args)
  129.     local command
  130.     if(#args == 0) then
  131.         command = "help"
  132.     else
  133.         command = args[1]
  134.     end
  135.    
  136.     if(command == "list") then
  137.         term.clear()
  138.         writeList()
  139.     elseif(command == "i") then
  140.         local appName = args[2]
  141.         local app = find(appName)
  142.         if(app == nil) then
  143.             print("Could not find app: " .. tostring(appName))
  144.         else
  145.             install(app)
  146.            
  147.         end
  148.     elseif(command == "re") then
  149.         refresh()
  150.     elseif(command == "info") then
  151.         local appName = args[2]
  152.         local app = find(appName)
  153.         if(app == nil) then
  154.             print("Could not find app: " .. tostring(appName))
  155.         else
  156.             info(app)
  157.         end
  158.     elseif(command == "help") then
  159.         term.clear()
  160.         print("inst <command> [arguments]")
  161.         print("Commands:")
  162.         print("  help            - this screen")
  163.         print("  list            - list apps")
  164.         print("  i <appname>     - install <appname>")
  165.         print("  info <appname>  - info on <appname>")
  166.         print("  re              - redownload installed apps")
  167.        
  168.     else
  169.         print("Unknown command: " .. command)
  170.     end
  171. end
  172.  
  173. appTable = textutils.unserialize(download(dataId))
  174.  
  175. args = {...}
  176.  
  177. doCommand(args)
Advertisement
Add Comment
Please, Sign In to add comment