diff options
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 |