Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function new(dir)
- local App = {
- Running = true,
- EventHandler = events.createHandler()
- }
- if dir then
- App.Directory = dir
- App.Manifest = data.load(dir..".manifest")
- App.Id = string.match(dir, "[^/]-$")
- function App:download(code, name)
- name = name or code
- pastebin.get(code, self.Directory.."/"..name)
- end
- function App:resolve(path)
- return self.Directory.."/"..path
- end
- function App:open(path)
- return fs.open(self.Directory.."/"..path)
- end
- function App:delete(path)
- fs.delete(self.Directory.."/"..path)
- end
- function App:load(path)
- return data.load(self.Directory.."/"..path)
- end
- function App:save(path, tbl)
- return data.save(self.Directory.."/"..path, tbl)
- end
- function App:handleUninstall(id)
- if id ~= self.Id then return end
- self:stop()
- end
- App.EventHandler:connect("uninstall_app", function(...) App:handleUninstall(...) end)
- end
- function App:stop()
- self.Running = false
- end
- function App:draw() end
- function App:stopped() end
- function App:start()
- self.Running = true
- while self.Running do
- self:draw()
- self.EventHandler.update()
- end
- if self.Manifest then os.queueEvent("app_closed", self.Id) end
- self:stopped()
- end
- App.EventHandler:connect("terminate", function() App:stop() end)
- return App
- end
- function dir(id)
- local d = "/appdata/"..id
- return d, fs.exists(d)
- end
- function install(code)
- local apps = data.load("/.apps")
- local d = dir(code)
- fs.delete(d..".manifest")
- pastebin.get(code, d..".manifest")
- local m = data.load(d..".manifest")
- for file,data in pairs(m.Files) do
- local p = d.."/"..file
- fs.delete(p)
- pastebin.get(data.Code, p)
- end
- apps[code] = {1,2,-1}
- data.save("/.apps", apps)
- os.queueEvent("update_apps")
- end
- function uninstall(id)
- local apps = data.load("/.apps")
- local d = dir(id)
- fs.delete(d)
- fs.delete(d..".manifest")
- apps[id] = nil
- data.save("/.apps", apps)
- os.queueEvent("uninstall_app", id)
- os.queueEvent("update_apps")
- end
- function update(code)
- local d = dir(code)
- local m = data.load(d..".manifest")
- fs.delete(d..".manifest")
- pastebin.get(code, d..".manifest")
- local nm = data.load(d..".manifest")
- for file,data in pairs(nm.Files) do
- if not m.Files[file] or m.Files[file].Version ~= data.Version then
- local p = d.."/"..file
- fs.delete(p)
- pastebin.get(data.Code, p)
- end
- m.Files[file] = nil
- end
- for file,data in pairs(m.Files) do fs.delete(d.."/"..file) end
- return nm
- end
- function list()
- return data.load("/.apps")
- end
Add Comment
Please, Sign In to add comment