Update to new ContentDB API
authorrubenwardy <rw@rubenwardy.com>
Mon, 18 Jun 2018 19:47:38 +0000 (20:47 +0100)
committerGitHub <noreply@github.com>
Mon, 18 Jun 2018 19:47:38 +0000 (20:47 +0100)
builtin/mainmenu/dlg_contentstore.lua
src/content/packages.cpp
src/content/packages.h
src/script/lua_api/l_mainmenu.cpp

index 59c2480c130af70879e8e1c679e41eead9af1754..6cebdf2e08b8dc42b7db6064fff3af5530f343f9 100644 (file)
@@ -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"
index d50e63a6bd5461ea740beb986452d2099e2c7e7c..dd7574d48618fa6077d684cc134954b93fc1ed21 100644 (file)
@@ -43,24 +43,19 @@ std::vector<Package> 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;
index 2290bd60760c01bb799c1799bef3fc2ef7bb690c..fc60d57034d7603d1951fdc9224e896a969f2084 100644 (file)
@@ -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<std::string> 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/";
        }
 };
 
index 1f49fc211ceef6a0a32eb43edf19869d555353cf..a5b211bc7b94992663e1de27532523f8d5d82d38 100644 (file)
@@ -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<Package> packages = getPackagesFromURL(url + "/packages/");
+       std::vector<Package> 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++;