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 = {}
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
local formspec = {
"size[9,4;true]",
- "image[0,1;4.5,3;", get_screenshot(package), ']',
+ "image[0,1;4.5,3;", core.formspec_escape(get_screenshot(package)), ']',
"label[3.8,1;",
minetest.colorize(mt_color_green, core.formspec_escape(package.title)), "\n",
minetest.colorize('#BFBFBF', "by " .. core.formspec_escape(package.author)), "]",
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] = "]"
end
function store.load()
- store.packages_full = core.get_package_list()
- store.packages = store.packages_full
- store.loaded = true
+ local tmpdir = os.tempfolder()
+ local target = tmpdir .. DIR_DELIM .. "packages.json"
+
+ assert(core.create_dir(tmpdir))
+
+ local base_url = core.settings:get("contentdb_url")
+ local show_nonfree = core.settings:get_bool("show_nonfree_packages")
+ local url = base_url ..
+ "/api/packages/?type=mod&type=game&type=txp&protocol_version=" ..
+ core.get_max_supp_proto() ..
+ "&nonfree=" ..
+ (show_nonfree and "true" or "false")
+
+ core.download_file(url, target)
+
+ local file = io.open(target, "r")
+ if file then
+ store.packages_full = core.parse_json(file:read("*all")) or {}
+ file:close()
+
+ for _, package in pairs(store.packages_full) do
+ 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
+ store.loaded = true
+ end
+
+ core.delete_dir(tmpdir)
end
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
end
local formspec
- if #store.packages > 0 then
+ if #store.packages_full > 0 then
formspec = {
"size[12,7;true]",
"position[0.5,0.55]",
"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;",
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
end
function create_store_dlg(type)
- if not store.loaded then
+ if not store.loaded or #store.packages_full == 0 then
store.load()
end