Skip to content

Commit

Permalink
ContentDB: Order installed content first (#10864)
Browse files Browse the repository at this point in the history
  • Loading branch information
rubenwardy committed Jan 28, 2021
1 parent 44a9510 commit 82deed2
Showing 1 changed file with 34 additions and 2 deletions.
36 changes: 34 additions & 2 deletions builtin/mainmenu/dlg_contentstore.lua
Expand Up @@ -23,7 +23,9 @@ if not minetest.get_http_api then
return
end

local store = { packages = {}, packages_full = {} }
-- Unordered preserves the original order of the ContentDB API,
-- before the package list is ordered based on installed state.
local store = { packages = {}, packages_full = {}, packages_full_unordered = {} }

local http = minetest.get_http_api()

Expand Down Expand Up @@ -572,6 +574,7 @@ function store.load()
end
end

store.packages_full_unordered = store.packages_full
store.packages = store.packages_full
store.loaded = true
end
Expand Down Expand Up @@ -619,6 +622,33 @@ function store.update_paths()
end
end

function store.sort_packages()
local ret = {}

-- Add installed content
for i=1, #store.packages_full_unordered do
local package = store.packages_full_unordered[i]
if package.path then
ret[#ret + 1] = package
end
end

-- Sort installed content by title
table.sort(ret, function(a, b)
return a.title < b.title
end)

-- Add uninstalled content
for i=1, #store.packages_full_unordered do
local package = store.packages_full_unordered[i]
if not package.path then
ret[#ret + 1] = package
end
end

store.packages_full = ret
end

function store.filter_packages(query)
if query == "" and filter_type == 1 then
store.packages = store.packages_full
Expand Down Expand Up @@ -652,7 +682,6 @@ function store.filter_packages(query)
store.packages[#store.packages + 1] = package
end
end

end

function store.get_formspec(dlgdata)
Expand Down Expand Up @@ -960,6 +989,9 @@ function create_store_dlg(type)
store.load()
end

store.update_paths()
store.sort_packages()

search_string = ""
cur_page = 1

Expand Down

0 comments on commit 82deed2

Please sign in to comment.