Quipex

Disk/mem/redworks/programs/cc-get-bin/package.lua

Apr 23rd, 2012
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.79 KB | None | 0 0
  1. local installDir = '/bin';
  2. Package = {}
  3. Package.__index = Package
  4.  
  5. -- Package.get gets the package from cc-get website
  6. function Package.get( name, version )
  7. local url = urlBase .. 'get/' .. name
  8. if version then
  9. url = url .. '?v=' .. params.version
  10. end
  11.  
  12. local package = json.decode( http.get(url).readAll() )
  13.  
  14. if package.error ~= nil then
  15. return false, package.error
  16. else
  17. setmetatable(package, Package)
  18. return true, package
  19. end
  20. end
  21.  
  22. -- Package.load looks for the program on file
  23. function Package.load( name )
  24. if data.packages[name] ~= nil then
  25. local package = data.packages[name]
  26. setmetatable(package, Package)
  27. return true, package
  28. else
  29. return false, 'Package is not installed'
  30. end
  31. end
  32.  
  33. function Package:install()
  34. data.installed = data.installed + 1
  35.  
  36. local installPath = fs.combine(installDir, self.name .. '-lib')
  37. fs.makeDir(installPath)
  38.  
  39. function create_files( items, path )
  40. for k, item in pairs( items ) do
  41. local itemPath = fs.combine( path, item.name )
  42. if item.type == 'file' then
  43. local fh = fs.open(itemPath, 'w')
  44. fh.write( item.script )
  45. fh.close()
  46. elseif item.type == 'folder' then
  47. fs.makeDir( itemPath )
  48. create_files( item.files, itemPath )
  49. end
  50. end
  51. end
  52.  
  53. create_files( self.source, installPath )
  54.  
  55. if self.onpath then
  56. self:link()
  57. end
  58. return true
  59. end
  60.  
  61. function Package:uninstall()
  62. fs.delete( fs.combine(installDir, self.name .. '-lib') )
  63. self:unlink()
  64. data.installed = data.installed - 1
  65. data.packages[ self.name ] = nil
  66. return true
  67. end
  68.  
  69. function Package:link()
  70. if self.onpath ~= '' then
  71. if self.onpath_filename == 0 then
  72. -- Use name of file that is being linked to
  73. name = fs.combine( installDir, self.onpath:match('[^/]-$') )
  74. elseif self.onpath_filename == 1 then
  75. -- Use name of project
  76. name = fs.combine(installDir, self.name)
  77. end
  78.  
  79. local fh = fs.open( name, 'w' )
  80.  
  81. fh.writeLine('local dir = shell.dir()')
  82. fh.writeLine("shell.setDir('/"..fs.combine(installDir, self.name .. '-lib').."')")
  83. fh.writeLine("shell.run('/".. fs.combine(fs.combine(installDir, self.name .. '-lib'), self.onpath) .. "', table.concat({...}, ' ') )")
  84. fh.writeLine("shell.setDir(dir)")
  85. fh.close()
  86. end
  87. return true
  88. end
  89.  
  90. function Package:unlink()
  91. if self.onpath ~= '' then
  92. if self.onpath_filename == 0 then
  93. -- Use name of file that is being linked to
  94. name = fs.combine( installDir, self.onpath:match('[^/]-$') )
  95. elseif self.onpath_filename == 1 then
  96. -- Use name of project
  97. name = fs.combine(installDir, self.name)
  98. end
  99.  
  100. fs.delete(name)
  101. end
  102.  
  103. return true
  104. end
  105.  
  106. function Package:update()
  107. local status, package = Package.get( self.name )
  108. if status then
  109. self:uninstall()
  110. package:install()
  111. data.packages[ package.name ] = package
  112. end
  113. end
Advertisement
Add Comment
Please, Sign In to add comment