From: rubenwardy Date: Mon, 18 Jun 2018 19:47:38 +0000 (+0100) Subject: Update to new ContentDB API X-Git-Tag: 5.0.0~352 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=ca502fc274c640f1e301a77ecb336ab5a23d348d;p=oweals%2Fminetest.git Update to new ContentDB API --- diff --git a/builtin/mainmenu/dlg_contentstore.lua b/builtin/mainmenu/dlg_contentstore.lua index 59c2480c1..6cebdf2e0 100644 --- a/builtin/mainmenu/dlg_contentstore.lua +++ b/builtin/mainmenu/dlg_contentstore.lua @@ -145,9 +145,9 @@ local function start_install(calling_dialog, package) end local function get_screenshot(package) - if #package.screenshots == 0 then + if not package.thumbnail then return defaulttexturedir .. "no_screenshot.png" - elseif screenshot_downloading[package.screenshots[1]] then + elseif screenshot_downloading[package.thumbnail] then return defaulttexturedir .. "loading_screenshot.png" end @@ -163,7 +163,7 @@ local function get_screenshot(package) end -- Show error if we've failed to download before - if screenshot_downloaded[package.screenshots[1]] then + if screenshot_downloaded[package.thumbnail] then return defaulttexturedir .. "error_screenshot.png" end @@ -173,8 +173,8 @@ local function get_screenshot(package) return core.download_file(params.url, params.dest) end local function callback(success) - screenshot_downloading[package.screenshots[1]] = nil - screenshot_downloaded[package.screenshots[1]] = true + screenshot_downloading[package.thumbnail] = nil + screenshot_downloaded[package.thumbnail] = true if not success then core.log("warning", "Screenshot download failed for some reason") end @@ -185,8 +185,8 @@ local function get_screenshot(package) end end if core.handle_async(download_screenshot, - { dest = filepath, url = package.screenshots[1] }, callback) then - screenshot_downloading[package.screenshots[1]] = true + { dest = filepath, url = package.thumbnail }, callback) then + screenshot_downloading[package.thumbnail] = true else core.log("error", "ERROR: async event failed") return defaulttexturedir .. "error_screenshot.png" diff --git a/src/content/packages.cpp b/src/content/packages.cpp index d50e63a6b..dd7574d48 100644 --- a/src/content/packages.cpp +++ b/src/content/packages.cpp @@ -43,24 +43,19 @@ std::vector getPackagesFromURL(const std::string &url) for (unsigned int i = 0; i < json.size(); ++i) { Package package; + package.author = json[i]["author"].asString(); package.name = json[i]["name"].asString(); package.title = json[i]["title"].asString(); - package.author = json[i]["author"].asString(); package.type = json[i]["type"].asString(); package.shortDesc = json[i]["shortDesc"].asString(); - package.url = json[i]["url"].asString(); package.release = json[i]["release"].asInt(); + if (json[i].isMember("thumbnail")) + package.thumbnail = json[i]["thumbnail"].asString(); - Json::Value jScreenshots = json[i]["screenshots"]; - for (unsigned int j = 0; j < jScreenshots.size(); ++j) { - package.screenshots.push_back(jScreenshots[j].asString()); - } - - if (package.valid()) { + if (package.valid()) packages.push_back(package); - } else { + else errorstream << "Invalid package at " << i << std::endl; - } } return packages; diff --git a/src/content/packages.h b/src/content/packages.h index 2290bd607..fc60d5703 100644 --- a/src/content/packages.h +++ b/src/content/packages.h @@ -24,20 +24,24 @@ with this program; if not, write to the Free Software Foundation, Inc., struct Package { + std::string author; std::string name; // Technical name std::string title; - std::string author; std::string type; // One of "mod", "game", or "txp" std::string shortDesc; - std::string url; // download URL u32 release; - std::vector screenshots; + std::string thumbnail; + + bool valid() const + { + return !(author.empty() || name.empty() || title.empty() || + type.empty() || release <= 0); + } - bool valid() + std::string getDownloadURL(const std::string &baseURL) const { - return !(name.empty() || title.empty() || author.empty() || - type.empty() || url.empty() || release <= 0); + return baseURL + "/packages/" + author + "/" + name + "/download/"; } }; diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index 1f49fc211..a5b211bc7 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -1005,7 +1005,7 @@ int ModApiMainMenu::l_get_screen_info(lua_State *L) int ModApiMainMenu::l_get_package_list(lua_State *L) { std::string url = g_settings->get("contentdb_url"); - std::vector packages = getPackagesFromURL(url + "/packages/"); + std::vector packages = getPackagesFromURL(url + "/api/packages/"); // Make table lua_newtable(L); @@ -1019,6 +1019,10 @@ int ModApiMainMenu::l_get_package_list(lua_State *L) int top_lvl2 = lua_gettop(L); + lua_pushstring(L, "author"); + lua_pushstring(L, package.author.c_str()); + lua_settable (L, top_lvl2); + lua_pushstring(L, "name"); lua_pushstring(L, package.name.c_str()); lua_settable (L, top_lvl2); @@ -1027,10 +1031,6 @@ int ModApiMainMenu::l_get_package_list(lua_State *L) lua_pushstring(L, package.title.c_str()); lua_settable (L, top_lvl2); - lua_pushstring(L, "author"); - lua_pushstring(L, package.author.c_str()); - lua_settable (L, top_lvl2); - lua_pushstring(L, "type"); lua_pushstring(L, package.type.c_str()); lua_settable (L, top_lvl2); @@ -1039,25 +1039,19 @@ int ModApiMainMenu::l_get_package_list(lua_State *L) lua_pushstring(L, package.shortDesc.c_str()); lua_settable (L, top_lvl2); - lua_pushstring(L, "url"); - lua_pushstring(L, package.url.c_str()); - lua_settable (L, top_lvl2); - lua_pushstring (L, "release"); lua_pushinteger(L, package.release); lua_settable (L, top_lvl2); - lua_pushstring(L, "screenshots"); - lua_newtable(L); - { - int top_screenshots = lua_gettop(L); - for (size_t i = 0; i < package.screenshots.size(); ++i) { - lua_pushnumber(L, i + 1); - lua_pushstring(L, package.screenshots[i].c_str()); - lua_settable(L, top_screenshots); - } + if (package.thumbnail != "") { + lua_pushstring(L, "thumbnail"); + lua_pushstring(L, package.thumbnail.c_str()); + lua_settable (L, top_lvl2); } - lua_settable(L, top_lvl2); + + lua_pushstring(L, "url"); + lua_pushstring(L, package.getDownloadURL(url).c_str()); + lua_settable (L, top_lvl2); lua_settable(L, top); index++;