]> git.lizzy.rs Git - minetest.git/blobdiff - builtin/mainmenu/dlg_contentstore.lua
Content store: Fix overlapping labels
[minetest.git] / builtin / mainmenu / dlg_contentstore.lua
index 6490e67f1803ab5cde499d985e28452e833ac06e..ab55e3848783b52e8f4cf5c7dd5b92a9199dc89c 100644 (file)
@@ -19,7 +19,7 @@ local store = {}
 local package_dialog = {}
 
 -- Screenshot
-local screenshot_dir = os.tempfolder()
+local screenshot_dir = core.get_cache_path() .. DIR_DELIM .. "cdb"
 assert(core.create_dir(screenshot_dir))
 local screenshot_downloading = {}
 local screenshot_downloaded = {}
@@ -76,10 +76,17 @@ local function start_install(calling_dialog, package)
                        if not path then
                                gamedata.errormessage = msg
                        else
+                               core.log("action", "Installed package to " .. path)
+
                                local conf_path
                                local name_is_title = false
                                if result.package.type == "mod" then
-                                       conf_path = path .. DIR_DELIM .. "mod.conf"
+                                       local actual_type = pkgmgr.get_folder_type(path)
+                                       if actual_type.type == "modpack" then
+                                               conf_path = path .. DIR_DELIM .. "modpack.conf"
+                                       else
+                                               conf_path = path .. DIR_DELIM .. "mod.conf"
+                                       end
                                elseif result.package.type == "game" then
                                        conf_path = path .. DIR_DELIM .. "game.conf"
                                        name_is_title = true
@@ -222,6 +229,7 @@ function package_dialog.get_formspec()
                formspec[#formspec + 1] = fgettext("Install")
                formspec[#formspec + 1] = "]"
        elseif package.installed_release < package.release then
+               -- The install_ action also handles updating
                formspec[#formspec + 1] = "button[7,0;2,1;install;"
                formspec[#formspec + 1] = fgettext("Update")
                formspec[#formspec + 1] = "]"
@@ -292,6 +300,8 @@ function store.load()
                        package.url = base_url .. "/packages/" ..
                                package.author .. "/" .. package.name ..
                                "/releases/" .. package.release .. "/download/"
+
+                       package.id = package.author .. "/" .. package.name
                end
 
                store.packages = store.packages_full
@@ -305,33 +315,39 @@ function store.update_paths()
        local mod_hash = {}
        pkgmgr.refresh_globals()
        for _, mod in pairs(pkgmgr.global_mods:get_list()) do
-               mod_hash[mod.name] = mod
+               if mod.author then
+                       mod_hash[mod.author .. "/" .. mod.name] = mod
+               end
        end
 
        local game_hash = {}
        pkgmgr.update_gamelist()
        for _, game in pairs(pkgmgr.games) do
-               game_hash[game.id] = game
+               if game.author then
+                       game_hash[game.author .. "/" .. game.id] = game
+               end
        end
 
        local txp_hash = {}
        for _, txp in pairs(pkgmgr.get_texture_packs()) do
-               txp_hash[txp.name] = txp
+               if txp.author then
+                       txp_hash[txp.author .. "/" .. txp.name] = txp
+               end
        end
 
        for _, package in pairs(store.packages_full) do
                local content
                if package.type == "mod" then
-                       content = mod_hash[package.name]
+                       content = mod_hash[package.id]
                elseif package.type == "game" then
-                       content = game_hash[package.name]
+                       content = game_hash[package.id]
                elseif package.type == "txp" then
-                       content = txp_hash[package.name]
+                       content = txp_hash[package.id]
                end
 
-               if content and content.author == package.author then
+               if content then
                        package.path = content.path
-                       package.installed_release = content.release
+                       package.installed_release = content.release or 0
                else
                        package.path = nil
                end
@@ -414,11 +430,17 @@ function store.get_formspec()
                        "button[11.1,0;1,1;pend;>>]",
                        "container_end[]",
                }
+
+               if #store.packages == 0 then
+                       formspec[#formspec + 1] = "label[4,3;"
+                       formspec[#formspec + 1] = fgettext("No results")
+                       formspec[#formspec + 1] = "]"
+               end
        else
                formspec = {
                        "size[12,7;true]",
                        "position[0.5,0.55]",
-                       "label[4,3;No packages could be retrieved]",
+                       "label[4,3;", fgettext("No packages could be retrieved"), "]",
                        "button[-0.1,",
                        num_per_page + 1.5,
                        ";3,1;back;",
@@ -426,12 +448,6 @@ function store.get_formspec()
                }
        end
 
-       if #store.packages == 0 then
-               formspec[#formspec + 1] = "label[4,3;"
-               formspec[#formspec + 1] = fgettext("No results")
-               formspec[#formspec + 1] = "]"
-       end
-
        local start_idx = (cur_page - 1) * num_per_page + 1
        for i=start_idx, math.min(#store.packages, start_idx+num_per_page-1) do
                local package = store.packages[i]
@@ -452,35 +468,43 @@ function store.get_formspec()
                formspec[#formspec + 1] = "]"
 
                -- description
-               formspec[#formspec + 1] = "textarea[1.25,0.3;7.5,1;;;"
+               if package.path and package.installed_release < package.release then
+                       formspec[#formspec + 1] = "textarea[1.25,0.3;7.5,1;;;"
+               else
+                       formspec[#formspec + 1] = "textarea[1.25,0.3;9,1;;;"
+               end
                formspec[#formspec + 1] = core.formspec_escape(package.short_description)
                formspec[#formspec + 1] = "]"
 
                -- buttons
                if not package.path then
-                       formspec[#formspec + 1] = "button[8.4,0;1.5,1;install_"
+                       formspec[#formspec + 1] = "button[9.9,0;1.5,1;install_"
                        formspec[#formspec + 1] = tostring(i)
                        formspec[#formspec + 1] = ";"
                        formspec[#formspec + 1] = fgettext("Install")
                        formspec[#formspec + 1] = "]"
-               elseif package.installed_release < package.release then
-                       formspec[#formspec + 1] = "button[8.4,0;1.5,1;update_"
-                       formspec[#formspec + 1] = tostring(i)
-                       formspec[#formspec + 1] = ";"
-                       formspec[#formspec + 1] = fgettext("Update")
-                       formspec[#formspec + 1] = "]"
                else
-                       formspec[#formspec + 1] = "button[8.4,0;1.5,1;uninstall_"
+                       if package.installed_release < package.release then
+                               -- The install_ action also handles updating
+                               formspec[#formspec + 1] = "button[8.4,0;1.5,1;install_"
+                               formspec[#formspec + 1] = tostring(i)
+                               formspec[#formspec + 1] = ";"
+                               formspec[#formspec + 1] = fgettext("Update")
+                               formspec[#formspec + 1] = "]"
+                       end
+
+                       formspec[#formspec + 1] = "button[9.9,0;1.5,1;uninstall_"
                        formspec[#formspec + 1] = tostring(i)
                        formspec[#formspec + 1] = ";"
                        formspec[#formspec + 1] = fgettext("Uninstall")
                        formspec[#formspec + 1] = "]"
                end
-               formspec[#formspec + 1] = "button[9.9,0;1.5,1;view_"
-               formspec[#formspec + 1] = tostring(i)
-               formspec[#formspec + 1] = ";"
-               formspec[#formspec + 1] = fgettext("View")
-               formspec[#formspec + 1] = "]"
+
+               --formspec[#formspec + 1] = "button[9.9,0;1.5,1;view_"
+               --formspec[#formspec + 1] = tostring(i)
+               --formspec[#formspec + 1] = ";"
+               --formspec[#formspec + 1] = fgettext("View")
+               --formspec[#formspec + 1] = "]"
 
                formspec[#formspec + 1] = "container_end[]"
        end