diff options
author | rubenwardy <rw@rubenwardy.com> | 2021-01-28 11:24:36 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-28 11:24:36 +0000 |
commit | 82deed2d7d5573f1fa463516732475563da59569 (patch) | |
tree | 27792d342fb9f26e24a5bb4da035d567688ea10c /builtin/mainmenu | |
parent | 44a9510c8143cfe54587b09c233501ba3a8533f6 (diff) | |
download | minetest-82deed2d7d5573f1fa463516732475563da59569.tar.gz minetest-82deed2d7d5573f1fa463516732475563da59569.tar.bz2 minetest-82deed2d7d5573f1fa463516732475563da59569.zip |
ContentDB: Order installed content first (#10864)
Diffstat (limited to 'builtin/mainmenu')
-rw-r--r-- | builtin/mainmenu/dlg_contentstore.lua | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/builtin/mainmenu/dlg_contentstore.lua b/builtin/mainmenu/dlg_contentstore.lua index 3ad9ed28a..7328f3358 100644 --- a/builtin/mainmenu/dlg_contentstore.lua +++ b/builtin/mainmenu/dlg_contentstore.lua @@ -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() @@ -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 @@ -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 @@ -652,7 +682,6 @@ function store.filter_packages(query) store.packages[#store.packages + 1] = package end end - end function store.get_formspec(dlgdata) @@ -960,6 +989,9 @@ function create_store_dlg(type) store.load() end + store.update_paths() + store.sort_packages() + search_string = "" cur_page = 1 |