Add support for modstore screenshots
authorsapier <Sapier at GMX dot net>
Fri, 12 Jul 2013 23:36:58 +0000 (01:36 +0200)
committerPilzAdam <pilzadam@minetest.net>
Mon, 22 Jul 2013 16:09:59 +0000 (18:09 +0200)
Add error output on invalid mmdb entries

builtin/modstore.lua
src/convert_json.cpp
src/guiLuaApi.cpp
src/mods.h

index 2c9e69069411e2373515ee1e1a910077ea470923..fe0ceb75f36ee35723d38c820112fe0ddc816825 100644 (file)
@@ -216,10 +216,12 @@ function modstore.getmodlist(list)
                        if details.screenshot_url ~= nil and
                                details.screenshot_url ~= "" then
                                if list.data[i].texturename == nil then
-                                       print("downloading screenshot: " .. details.screenshot_url)
+                                       local fullurl = engine.setting_get("modstore_download_url") ..
+                                                               details.screenshot_url
+                                       print("downloading screenshot: " .. fullurl)
                                        local filename = os.tempfolder()
                                        
-                                       if engine.download_file(details.screenshot_url,filename) then
+                                       if engine.download_file(fullurl,filename) then
                                                list.data[i].texturename = filename
                                        end
                                end
@@ -238,7 +240,7 @@ function modstore.getmodlist(list)
                        
                        --description
                        local descriptiony = screenshot_ypos + 0.5
-                       retval = retval .. "textarea[3," .. descriptiony .. ";6.5,1.6;;" .. 
+                       retval = retval .. "textarea[3," .. descriptiony .. ";6.5,1.55;;" .. 
                                fs_escape_string(details.description) .. ";]"
                        --rating
                        local ratingy = screenshot_ypos + 0.6
index 9b704aca6deda55c231c40a669ff7eef5b5e6bb5..71cba06954e47fbca5fc2c1bfc4b99dc58e6a1a5 100644 (file)
@@ -111,6 +111,7 @@ std::vector<ModStoreMod>    readModStoreList(Json::Value& modlist) {
                                }
                        }
                        else {
+                               errorstream << "readModStoreList: missing id" << std::endl;
                                toadd.valid = false;
                        }
 
@@ -119,6 +120,7 @@ std::vector<ModStoreMod>    readModStoreList(Json::Value& modlist) {
                                toadd.title = modlist[i]["title"].asString();
                        }
                        else {
+                               errorstream << "readModStoreList: missing title" << std::endl;
                                toadd.valid = false;
                        }
 
@@ -127,6 +129,7 @@ std::vector<ModStoreMod>    readModStoreList(Json::Value& modlist) {
                                toadd.basename = modlist[i]["basename"].asString();
                        }
                        else {
+                               errorstream << "readModStoreList: missing basename" << std::endl;
                                toadd.valid = false;
                        }
 
@@ -166,6 +169,7 @@ ModStoreModDetails          readModStoreModDetails(Json::Value& details) {
                                }
                        }
                        else {
+                               errorstream << "readModStoreModDetails: missing version_set id" << std::endl;
                                retval.valid = false;
                        }
 
@@ -179,6 +183,7 @@ ModStoreModDetails          readModStoreModDetails(Json::Value& details) {
                                toadd.file = details["version_set"][i]["file"].asString();
                        }
                        else {
+                               errorstream << "readModStoreModDetails: missing version_set file" << std::endl;
                                retval.valid = false;
                        }
 
@@ -196,6 +201,7 @@ ModStoreModDetails          readModStoreModDetails(Json::Value& details) {
        }
 
        if (retval.versions.size() < 1) {
+               errorstream << "readModStoreModDetails: not a single version specified!" << std::endl;
                retval.valid = false;
        }
 
@@ -215,12 +221,14 @@ ModStoreModDetails          readModStoreModDetails(Json::Value& details) {
                                }
                        }
                        else {
+                               errorstream << "readModStoreModDetails: missing categories id" << std::endl;
                                retval.valid = false;
                        }
                        if (details["categories"][i]["title"].asString().size()) {
                                toadd.name = details["categories"][i]["title"].asString();
                        }
                        else {
+                               errorstream << "readModStoreModDetails: missing categories title" << std::endl;
                                retval.valid = false;
                        }
 
@@ -245,10 +253,12 @@ ModStoreModDetails          readModStoreModDetails(Json::Value& details) {
                                retval.author.id = numbervalue;
                        }
                        else {
+                               errorstream << "readModStoreModDetails: missing author id (convert)" << std::endl;
                                retval.valid = false;
                        }
                }
                else {
+                       errorstream << "readModStoreModDetails: missing author id" << std::endl;
                        retval.valid = false;
                }
 
@@ -256,10 +266,12 @@ ModStoreModDetails          readModStoreModDetails(Json::Value& details) {
                        retval.author.username = details["author"]["username"].asString();
                }
                else {
+                       errorstream << "readModStoreModDetails: missing author username" << std::endl;
                        retval.valid = false;
                }
        }
        else {
+               errorstream << "readModStoreModDetails: missing author" << std::endl;
                retval.valid = false;
        }
 
@@ -276,6 +288,7 @@ ModStoreModDetails          readModStoreModDetails(Json::Value& details) {
                        }
                }
                else {
+                       errorstream << "readModStoreModDetails: missing license id" << std::endl;
                        retval.valid = false;
                }
 
@@ -283,6 +296,7 @@ ModStoreModDetails          readModStoreModDetails(Json::Value& details) {
                        retval.license.shortinfo = details["license"]["short"].asString();
                }
                else {
+                       errorstream << "readModStoreModDetails: missing license short" << std::endl;
                        retval.valid = false;
                }
 
@@ -292,6 +306,39 @@ ModStoreModDetails          readModStoreModDetails(Json::Value& details) {
 
        }
 
+       //titlepic
+       if (details["titlepic"].isObject()) {
+               if (details["titlepic"]["id"].asString().size()) {
+
+                       const char* id_raw = details["titlepic"]["id"].asString().c_str();
+                       char* endptr = 0;
+                       int numbervalue = strtol(id_raw,&endptr,10);
+
+                       if ((*id_raw != 0) && (*endptr == 0)) {
+                               retval.titlepic.id = numbervalue;
+                       }
+               }
+
+               if (details["titlepic"]["file"].asString().size()) {
+                       retval.titlepic.file = details["titlepic"]["file"].asString();
+               }
+
+               if (details["titlepic"]["desc"].asString().size()) {
+                       retval.titlepic.description = details["titlepic"]["desc"].asString();
+               }
+
+               if (details["titlepic"]["mod"].asString().size()) {
+
+                       const char* mod_raw = details["titlepic"]["mod"].asString().c_str();
+                       char* endptr = 0;
+                       int numbervalue = strtol(mod_raw,&endptr,10);
+
+                       if ((*mod_raw != 0) && (*endptr == 0)) {
+                               retval.titlepic.mod = numbervalue;
+                       }
+               }
+       }
+
        //id
        if (details["id"].asString().size()) {
 
@@ -304,6 +351,7 @@ ModStoreModDetails          readModStoreModDetails(Json::Value& details) {
                }
        }
        else {
+               errorstream << "readModStoreModDetails: missing id" << std::endl;
                retval.valid = false;
        }
 
@@ -312,6 +360,7 @@ ModStoreModDetails          readModStoreModDetails(Json::Value& details) {
                retval.title = details["title"].asString();
        }
        else {
+               errorstream << "readModStoreModDetails: missing title" << std::endl;
                retval.valid = false;
        }
 
@@ -320,6 +369,7 @@ ModStoreModDetails          readModStoreModDetails(Json::Value& details) {
                retval.basename = details["basename"].asString();
        }
        else {
+               errorstream << "readModStoreModDetails: missing basename" << std::endl;
                retval.valid = false;
        }
 
index 4ed5cb24c0c972b0109501fc81a21ac5f3326e8b..6bf8df607672e230385dc1a54e764ba8cb209472 100644 (file)
@@ -430,6 +430,10 @@ int guiLuaApi::l_get_modstore_details(lua_State *L)
                        lua_pushstring(L,current_mod.versions[0].file.c_str());
                        lua_settable(L, top);
 
+                       lua_pushstring(L,"screenshot_url");
+                       lua_pushstring(L,current_mod.titlepic.file.c_str());
+                       lua_settable(L, top);
+
                        lua_pushstring(L,"license");
                        lua_pushstring(L,current_mod.license.shortinfo.c_str());
                        lua_settable(L, top);
index eb453bf6a3e9cf51dbbb6d14faf7ebf365b0d9cf..e10d49324bbf8a603af9f54f4d29f4576466c5ac 100644 (file)
@@ -202,11 +202,19 @@ struct ModStoreVersionEntry {
        int mtversion;
 };
 
+struct ModStoreTitlePic {
+       int id;
+       std::string file;
+       std::string description;
+       int mod;
+};
+
 struct ModStoreModDetails {
        /* version_set?? */
        std::vector<ModStoreCategoryInfo> categories;
        ModAuthorInfo author;
        ModLicenseInfo license;
+       ModStoreTitlePic titlepic;
        int id;
        std::string title;
        std::string basename;