]> git.lizzy.rs Git - minetest.git/commitdiff
Content store: Use composite key to track installations (#8054)
authorrubenwardy <rw@rubenwardy.com>
Wed, 30 Jan 2019 16:43:28 +0000 (16:43 +0000)
committerParamat <paramat@users.noreply.github.com>
Wed, 30 Jan 2019 16:43:28 +0000 (16:43 +0000)
Fixes #7967 'Package manager doesn't track content reliably'.

builtin/mainmenu/dlg_contentstore.lua

index 4c9f760b21444c2c1f4ef2f1489cd3f46f1d7465..0b3cababcddde400eb28cd674f7b9c2296cf0ddb 100644 (file)
@@ -300,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
@@ -314,7 +316,7 @@ function store.update_paths()
        pkgmgr.refresh_globals()
        for _, mod in pairs(pkgmgr.global_mods:get_list()) do
                if mod.author then
-                       mod_hash[mod.name] = mod
+                       mod_hash[mod.author .. "/" .. mod.name] = mod
                end
        end
 
@@ -322,30 +324,30 @@ function store.update_paths()
        pkgmgr.update_gamelist()
        for _, game in pairs(pkgmgr.games) do
                if game.author then
-                       game_hash[game.id] = game
+                       game_hash[game.author .. "/" .. game.id] = game
                end
        end
 
        local txp_hash = {}
        for _, txp in pairs(pkgmgr.get_texture_packs()) do
                if txp.author then
-                       txp_hash[txp.name] = txp
+                       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