From 5c7ecdb7c583c98cbe6bdf54ae7a07e6a6a61007 Mon Sep 17 00:00:00 2001 From: sapier Date: Sat, 13 Jul 2013 01:36:58 +0200 Subject: [PATCH] Add support for modstore screenshots Add error output on invalid mmdb entries --- builtin/modstore.lua | 8 ++++--- src/convert_json.cpp | 50 ++++++++++++++++++++++++++++++++++++++++++++ src/guiLuaApi.cpp | 4 ++++ src/mods.h | 8 +++++++ 4 files changed, 67 insertions(+), 3 deletions(-) diff --git a/builtin/modstore.lua b/builtin/modstore.lua index 2c9e69069..fe0ceb75f 100644 --- a/builtin/modstore.lua +++ b/builtin/modstore.lua @@ -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 diff --git a/src/convert_json.cpp b/src/convert_json.cpp index 9b704aca6..71cba0695 100644 --- a/src/convert_json.cpp +++ b/src/convert_json.cpp @@ -111,6 +111,7 @@ std::vector readModStoreList(Json::Value& modlist) { } } else { + errorstream << "readModStoreList: missing id" << std::endl; toadd.valid = false; } @@ -119,6 +120,7 @@ std::vector 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 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; } diff --git a/src/guiLuaApi.cpp b/src/guiLuaApi.cpp index 4ed5cb24c..6bf8df607 100644 --- a/src/guiLuaApi.cpp +++ b/src/guiLuaApi.cpp @@ -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); diff --git a/src/mods.h b/src/mods.h index eb453bf6a..e10d49324 100644 --- a/src/mods.h +++ b/src/mods.h @@ -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 categories; ModAuthorInfo author; ModLicenseInfo license; + ModStoreTitlePic titlepic; int id; std::string title; std::string basename;