FFGFlash

api/app

Sep 17th, 2021 (edited)
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.70 KB | None | 0 0
  1. function new(dir)
  2.   local App = {
  3.     Running = true,
  4.     EventHandler = events.createHandler()
  5.   }
  6.  
  7.   if dir then
  8.     App.Directory = dir
  9.     App.Manifest = data.load(dir..".manifest")
  10.     App.Id = string.match(dir, "[^/]-$")
  11.  
  12.     function App:download(code, name)
  13.       name = name or code
  14.       pastebin.get(code, self.Directory.."/"..name)
  15.     end
  16.  
  17.     function App:resolve(path)
  18.       return self.Directory.."/"..path
  19.     end
  20.  
  21.     function App:open(path)
  22.       return fs.open(self.Directory.."/"..path)
  23.     end
  24.  
  25.     function App:delete(path)
  26.       fs.delete(self.Directory.."/"..path)
  27.     end
  28.  
  29.     function App:load(path)
  30.       return data.load(self.Directory.."/"..path)
  31.     end
  32.  
  33.     function App:save(path, tbl)
  34.       return data.save(self.Directory.."/"..path, tbl)
  35.     end
  36.  
  37.     function App:handleUninstall(id)
  38.       if id ~= self.Id then return end
  39.       self:stop()
  40.     end
  41.  
  42.     App.EventHandler:connect("uninstall_app", function(...) App:handleUninstall(...) end)
  43.   end
  44.  
  45.   function App:stop()
  46.     self.Running = false
  47.   end
  48.  
  49.   function App:draw() end
  50.   function App:stopped() end
  51.  
  52.   function App:start()
  53.     self.Running = true
  54.     while self.Running do
  55.       self:draw()
  56.       self.EventHandler.update()
  57.     end
  58.     if self.Manifest then os.queueEvent("app_closed", self.Id) end
  59.     self:stopped()
  60.   end
  61.  
  62.   App.EventHandler:connect("terminate", function() App:stop() end)
  63.  
  64.   return App
  65. end
  66.  
  67. function dir(id)
  68.   local d = "/appdata/"..id
  69.   return d, fs.exists(d)
  70. end
  71.  
  72. function install(code)
  73.   local apps = data.load("/.apps")
  74.   local d = dir(code)
  75.   fs.delete(d..".manifest")
  76.   pastebin.get(code, d..".manifest")
  77.   local m = data.load(d..".manifest")
  78.   for file,data in pairs(m.Files) do
  79.     local p = d.."/"..file
  80.     fs.delete(p)
  81.     pastebin.get(data.Code, p)
  82.   end
  83.   apps[code] = {1,2,-1}
  84.   data.save("/.apps", apps)
  85.   os.queueEvent("update_apps")
  86. end
  87.  
  88. function uninstall(id)
  89.   local apps = data.load("/.apps")
  90.   local d = dir(id)
  91.   fs.delete(d)
  92.   fs.delete(d..".manifest")
  93.   apps[id] = nil
  94.   data.save("/.apps", apps)
  95.   os.queueEvent("uninstall_app", id)
  96.   os.queueEvent("update_apps")
  97. end
  98.  
  99. function update(code)
  100.   local d = dir(code)
  101.   local m = data.load(d..".manifest")
  102.   fs.delete(d..".manifest")
  103.   pastebin.get(code, d..".manifest")
  104.   local nm = data.load(d..".manifest")
  105.   for file,data in pairs(nm.Files) do
  106.     if not m.Files[file] or m.Files[file].Version ~= data.Version then
  107.       local p = d.."/"..file
  108.       fs.delete(p)
  109.       pastebin.get(data.Code, p)
  110.     end
  111.     m.Files[file] = nil
  112.   end
  113.   for file,data in pairs(m.Files) do fs.delete(d.."/"..file) end
  114.   return nm
  115. end
  116.  
  117. function list()
  118.   return data.load("/.apps")
  119. end
Add Comment
Please, Sign In to add comment