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..e34f1958c 100644 --- a/src/content/packages.cpp +++ b/src/content/packages.cpp @@ -43,17 +43,14 @@ 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(); - - Json::Value jScreenshots = json[i]["screenshots"]; - for (unsigned int j = 0; j < jScreenshots.size(); ++j) { - package.screenshots.push_back(jScreenshots[j].asString()); + if (json[i].isMember("thumbnail")) { + package.thumbnail = json[i]["thumbnail"].asString(); } if (package.valid()) { diff --git a/src/content/packages.h b/src/content/packages.h index 2290bd607..71d92824c 100644 --- a/src/content/packages.h +++ b/src/content/packages.h @@ -24,20 +24,19 @@ 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() { - return !(name.empty() || title.empty() || author.empty() || - type.empty() || url.empty() || release <= 0); + return !(author.empty() || name.empty() || title.empty() || + type.empty() || release <= 0); } }; diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index 1f49fc211..3fba5f34e 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,17 @@ 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); - } - } - lua_settable(L, top_lvl2); + lua_pushstring(L, "thumbnail"); + lua_pushstring(L, package.thumbnail.c_str()); + lua_settable (L, top_lvl2); + + lua_pushstring(L, "url"); + lua_pushstring(L, (url + "/packages/" + package.author + "/" + package.name + "/download/").c_str()); + lua_settable (L, top_lvl2); lua_settable(L, top); index++;