summaryrefslogtreecommitdiffstats
path: root/apk-model.lua
diff options
context:
space:
mode:
Diffstat (limited to 'apk-model.lua')
-rw-r--r--apk-model.lua94
1 files changed, 68 insertions, 26 deletions
diff --git a/apk-model.lua b/apk-model.lua
index 682beea..d72ba07 100644
--- a/apk-model.lua
+++ b/apk-model.lua
@@ -172,10 +172,8 @@ mymodule.get_loaded_packages = function()
return cfe({ type="group", value={toplevel=top, dependent=depend}, label="Installed Packages" })
end
-mymodule.get_available_packages = function(self, clientdata)
- repo = repository()
- -- available are all except same version installed
- local retval = cfe({ type="group", value={}, label="Available Packages" })
+local handle_pagination_and_filtering = function(self, clientdata, packages)
+ local retval = cfe({ type="group", value={} })
retval.value.page = cfe({ value=0, label="Page Number", descr="0 indicates ALL", key=true })
retval.value.pagesize = cfe({ value=10, label="Page Size", key=true })
retval.value.rowcount = cfe({ value=0, label="Row Count" })
@@ -184,7 +182,7 @@ mymodule.get_available_packages = function(self, clientdata)
-- filter is a table with a string filter for each column
retval.value.filter = cfe({ type="structure", value={name="", version=""}, label="Filter", key=true })
self.handle_clientdata(retval, clientdata)
- retval.value.result = cfe({ type="structure", value={}, label="Available Packages" })
+ retval.value.result = cfe({ type="structure", value={} })
-- Process the incoming page data
local page = tonumber(retval.value.page.value) or 0
@@ -192,28 +190,27 @@ mymodule.get_available_packages = function(self, clientdata)
local pagesize = tonumber(retval.value.pagesize.value) or 10
retval.value.pagesize.value = pagesize
- local available = {}
- for name,value in pairs(repo) do
- if value.version and (not value.installed or value.upgrade) then
- local temp = {}
- temp.name = name
- temp.version = value.version
- temp.upgrade = value.upgrade
-
- -- Filter
- for c,f in pairs(retval.value.filter.value) do
- if temp[c] and f ~= "" and not string.find(temp[c], format.escapemagiccharacters(f)) then
- temp = nil
- break
- end
+ local result = {}
+ for name,value in pairs(packages) do
+ local temp = {}
+ temp.name = name
+ temp.version = value.installed or value.version
+ temp.upgrade = value.upgrade
+ temp.description = value.comment
+
+ -- Filter
+ for c,f in pairs(retval.value.filter.value) do
+ if temp[c] and f ~= "" and not string.find(temp[c], format.escapemagiccharacters(f)) then
+ temp = nil
+ break
end
-
- available[#available + 1] = temp
end
+
+ result[#result + 1] = temp
end
-- Sort
- if #available > 0 then
+ if #result > 0 then
local function createsort(column, descending, equal)
return function(a,b)
if a[column] == b[column] then
@@ -238,19 +235,64 @@ mymodule.get_available_packages = function(self, clientdata)
end
end
end
- table.sort(available, sortfunction)
+ table.sort(result, sortfunction)
end
-- Paginate
- retval.value.rowcount.value = #available
+ retval.value.rowcount.value = #result
if page > 0 then
for i=((page-1)*pagesize+1), (page*pagesize) do
- retval.value.result.value[#retval.value.result.value+1] = available[i]
+ retval.value.result.value[#retval.value.result.value+1] = result[i]
end
else
- retval.value.result.value = available
+ retval.value.result.value = result
+ end
+
+ return retval
+end
+
+mymodule.get_available_packages = function(self, clientdata)
+ repo = repository()
+ local packages = {}
+ -- available are all except same version installed
+ for name,value in pairs(repo) do
+ if value.version and (not value.installed or value.upgrade) then
+ packages[name] = value
+ end
end
+ local retval = handle_pagination_and_filtering(self, clientdata, packages)
+ retval.label = "Available Packages"
+ if retval.value.result then retval.value.result.label = "Available Packages" end
+ return retval
+end
+mymodule.get_toplevel_packages = function(self, clientdata)
+ repo = repository()
+ toplevel = gettoplevel()
+ local packages = {}
+ for name,value in pairs(repo) do
+ if value.installed and toplevel[name] then
+ packages[name] = value
+ end
+ end
+ local retval = handle_pagination_and_filtering(self, clientdata, packages)
+ retval.label = "Top Level Packages"
+ if retval.value.result then retval.value.result.label = "Top Level Packages" end
+ return retval
+end
+
+mymodule.get_dependent_packages = function(self, clientdata)
+ repo = repository()
+ toplevel = gettoplevel()
+ local packages = {}
+ for name,value in pairs(repo) do
+ if value.installed and not toplevel[name] then
+ packages[name] = value
+ end
+ end
+ local retval = handle_pagination_and_filtering(self, clientdata, packages)
+ retval.label = "Dependent Packages"
+ if retval.value.result then retval.value.result.label = "Dependent Packages" end
return retval
end