1
0
mirror of https://github.com/kepler155c/opus synced 2024-12-24 23:50:26 +00:00

package manager

This commit is contained in:
kepler155c@gmail.com 2019-01-09 06:59:19 -05:00
parent 4387264960
commit 4977ea94d7
4 changed files with 59 additions and 40 deletions

View File

@ -33,6 +33,17 @@ function Packages:isInstalled(package)
return self:installed()[package] return self:installed()[package]
end end
function Packages:downloadList()
local packages = {
[ 'develop-1.8' ] = 'https://pastebin.com/raw/WhEiNGZE',
[ 'master-1.8' ] = 'https://pastebin.com/raw/pexZpAxt',
}
if packages[_G.OPUS_BRANCH] then
Util.download(packages[_G.OPUS_BRANCH], 'usr/config/packages')
end
end
function Packages:getManifest(package) function Packages:getManifest(package)
local fname = 'packages/' .. package .. '/.package' local fname = 'packages/' .. package .. '/.package'
if fs.exists(fname) then if fs.exists(fname) then

View File

@ -10,7 +10,7 @@ UI:configure('PackageManager', ...)
local page = UI.Page { local page = UI.Page {
grid = UI.ScrollingGrid { grid = UI.ScrollingGrid {
y = 2, ey = 7, x = 2, ex = -12, x = 2, ex = -12, y = 2, ey = 7,
values = { }, values = { },
columns = { columns = {
{ heading = 'Package', key = 'name' }, { heading = 'Package', key = 'name' },
@ -34,10 +34,15 @@ local page = UI.Page {
help = 'Remove', help = 'Remove',
}, },
description = UI.TextArea { description = UI.TextArea {
x = 2, y = 9, ey = -2, x = 2, y = 9, ey = -4,
--backgroundColor = colors.white, --backgroundColor = colors.white,
}, },
statusBar = UI.StatusBar { }, load = UI.Button {
x = 2, y = -3,
text = 'Update package list',
event = 'reload',
help = 'Download the latest package list',
},
action = UI.SlideOut { action = UI.SlideOut {
backgroundColor = colors.cyan, backgroundColor = colors.cyan,
titleBar = UI.TitleBar { titleBar = UI.TitleBar {
@ -54,8 +59,39 @@ local page = UI.Page {
backgroundColor = colors.cyan, backgroundColor = colors.cyan,
}, },
}, },
statusBar = UI.StatusBar { },
} }
function page:loadPackages()
self.grid.values = { }
self.statusBar:setStatus('Downloading...')
self:sync()
for k in pairs(Packages:list()) do
local manifest = Packages:getManifest(k)
if not manifest then
manifest = {
invalid = true,
description = 'Unable to download manifest',
title = '',
}
end
table.insert(self.grid.values, {
installed = not not Packages:isInstalled(k),
name = k,
manifest = manifest,
})
end
self.grid:update()
self.grid:setIndex(1)
self.grid:emit({
type = 'grid_focus_row',
selected = self.grid:getSelected(),
element = self.grid,
})
self.statusBar:setStatus('Updated packages')
end
function page.grid:getRowTextColor(row, selected) function page.grid:getRowTextColor(row, selected)
if row.installed then if row.installed then
return colors.yellow return colors.yellow
@ -108,6 +144,10 @@ function page:eventHandler(event)
self.description:draw() self.description:draw()
self:updateSelection(event.selected) self:updateSelection(event.selected)
elseif event.type == 'reload' then
Packages:downloadList()
self:loadPackages()
elseif event.type == 'action' then elseif event.type == 'action' then
local selected = self.grid:getSelected() local selected = self.grid:getSelected()
if selected then if selected then
@ -138,27 +178,7 @@ function page:eventHandler(event)
UI.Page.eventHandler(self, event) UI.Page.eventHandler(self, event)
end end
for k in pairs(Packages:list()) do page:loadPackages()
local manifest = Packages:getManifest(k)
if not manifest then
manifest = {
invalid = true,
description = 'Unable to download manifest',
title = '',
}
end
table.insert(page.grid.values, {
installed = not not Packages:isInstalled(k),
name = k,
manifest = manifest,
})
end
page.grid:update()
page.grid:emit({
type = 'grid_focus_row',
selected = page.grid:getSelected(),
element = page.grid,
})
UI:setPage(page) UI:setPage(page)
UI:pullEvents() UI:pullEvents()

View File

@ -1,5 +1,3 @@
_G.requireInjector(_ENV)
local Util = require('util') local Util = require('util')
local fs = _G.fs local fs = _G.fs
@ -29,17 +27,6 @@ if not fs.exists('usr/config/shell') then
}) })
end end
if not fs.exists('usr/config/packages') then
local packages = {
[ 'develop-1.8' ] = 'https://pastebin.com/raw/WhEiNGZE',
[ 'master-1.8' ] = 'https://pastebin.com/raw/pexZpAxt',
}
if packages[_G.OPUS_BRANCH] then
Util.download(packages[_G.OPUS_BRANCH], 'usr/config/packages')
end
end
local config = Util.readTable('usr/config/shell') local config = Util.readTable('usr/config/shell')
if config.aliases then if config.aliases then
for k in pairs(shell.aliases()) do for k in pairs(shell.aliases()) do

View File

@ -1,5 +1,3 @@
_G.requireInjector(_ENV)
local Packages = require('packages') local Packages = require('packages')
local Util = require('util') local Util = require('util')
@ -7,6 +5,10 @@ local fs = _G.fs
local help = _G.help local help = _G.help
local shell = _ENV.shell local shell = _ENV.shell
if not fs.exists('usr/config/packages') then
Packages:downloadList()
end
local appPaths = Util.split(shell.path(), '(.-):') local appPaths = Util.split(shell.path(), '(.-):')
local luaPaths = Util.split(_G.LUA_PATH, '(.-);') local luaPaths = Util.split(_G.LUA_PATH, '(.-);')
local helpPaths = Util.split(help.path(), '(.-):') local helpPaths = Util.split(help.path(), '(.-):')
@ -50,6 +52,5 @@ for name in pairs(Packages:installed()) do
end end
help.setPath(table.concat(helpPaths, ':')) help.setPath(table.concat(helpPaths, ':'))
shell.setPath(table.concat(appPaths, ':')) shell.setPath(table.concat(appPaths, ':'))
_G.LUA_PATH = table.concat(luaPaths, ';') _G.LUA_PATH = table.concat(luaPaths, ';')