summaryrefslogtreecommitdiffstats
path: root/apk-model.lua
diff options
context:
space:
mode:
authorTed Trask <ttrask01@yahoo.com>2016-02-25 04:19:37 +0000
committerTed Trask <ttrask01@yahoo.com>2016-02-25 04:19:37 +0000
commit473c583bf540dcf95974f53dfeb51aa955944f98 (patch)
treef4aca199099f1792e945ebf590a722cc45b90e2f /apk-model.lua
parent8d76464f8d3e6454dbf9ece32e16a8458d955204 (diff)
downloadacf-apk-tools-473c583bf540dcf95974f53dfeb51aa955944f98.tar.bz2
acf-apk-tools-473c583bf540dcf95974f53dfeb51aa955944f98.tar.xz
Create toplevel and dependent actions so loaded view can display the two tables with sorting/pagination/filtering
Modify available action and view so can share code with toplevel and dependent Loaded action is still present for backward compatibility despite view ignoring the output
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