diff options
author | Ted Trask <ttrask01@yahoo.com> | 2016-02-25 04:19:37 +0000 |
---|---|---|
committer | Ted Trask <ttrask01@yahoo.com> | 2016-02-25 04:19:37 +0000 |
commit | 473c583bf540dcf95974f53dfeb51aa955944f98 (patch) | |
tree | f4aca199099f1792e945ebf590a722cc45b90e2f /apk-model.lua | |
parent | 8d76464f8d3e6454dbf9ece32e16a8458d955204 (diff) | |
download | acf-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.lua | 94 |
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 |