X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;ds=sidebyside;f=src%2Fconvert_json.cpp;h=6f227e7967501818789185036e7082403d81b016;hb=1838a3fd696782b1733a435bbb25accf3e40d1f3;hp=58eefd9015b9c9a6980203e21a01824920fa5da7;hpb=5160be91ae6af23cabec5c7412a1c2c45fc46afb;p=minetest.git diff --git a/src/convert_json.cpp b/src/convert_json.cpp index 58eefd901..6f227e796 100644 --- a/src/convert_json.cpp +++ b/src/convert_json.cpp @@ -27,56 +27,38 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "log.h" #include "main.h" // for g_settings #include "settings.h" +#include "version.h" +#include "httpfetch.h" +#include "porting.h" +Json::Value fetchJsonValue(const std::string &url, + struct curl_slist *chunk) { #if USE_CURL -#include -static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp) -{ - ((std::string*)userp)->append((char*)contents, size * nmemb); - return size * nmemb; -} - -#endif - -Json::Value fetchJsonValue(const std::string url, - struct curl_slist *chunk) { -#if USE_CURL - std::string liststring; - CURL *curl; - - curl = curl_easy_init(); - if (curl) - { - CURLcode res; + HTTPFetchRequest fetchrequest; + HTTPFetchResult fetchresult; + fetchrequest.url = url; + fetchrequest.caller = HTTPFETCH_SYNC; - curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1); - curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, &liststring); - curl_easy_setopt(curl, CURLOPT_TIMEOUT_MS, g_settings->getS32("curl_timeout")); - if (chunk != 0) - curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk); - - - res = curl_easy_perform(curl); - if (res != CURLE_OK) - errorstream<<"Jsonreader: "<< url <<" not found (" << curl_easy_strerror(res) << ")" <data); + runptr = runptr->next; } + httpfetch_sync(fetchrequest,fetchresult); - Json::Value root; - Json::Reader reader; - std::istringstream stream(liststring); - if (!liststring.size()) { + if (!fetchresult.succeeded) { return Json::Value(); } + Json::Value root; + Json::Reader reader; + std::istringstream stream(fetchresult.data); if (!reader.parse( stream, root ) ) { errorstream << "URL: " << url << std::endl; errorstream << "Failed to parse json data " << reader.getFormattedErrorMessages(); - errorstream << "data: \"" << liststring << "\"" << std::endl; + errorstream << "data: \"" << fetchresult.data << "\"" << std::endl; return Json::Value(); } @@ -104,13 +86,17 @@ std::vector readModStoreList(Json::Value& modlist) { //id if (modlist[i]["id"].asString().size()) { - const char* id_raw = modlist[i]["id"].asString().c_str(); + std::string id_raw = modlist[i]["id"].asString(); char* endptr = 0; - int numbervalue = strtol(id_raw,&endptr,10); + int numbervalue = strtol(id_raw.c_str(),&endptr,10); - if ((*id_raw != 0) && (*endptr == 0)) { + if ((id_raw != "") && (*endptr == 0)) { toadd.id = numbervalue; } + else { + errorstream << "readModStoreList: missing id" << std::endl; + toadd.valid = false; + } } else { errorstream << "readModStoreList: missing id" << std::endl; @@ -162,11 +148,11 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) { ModStoreVersionEntry toadd; if (details["version_set"][i]["id"].asString().size()) { - const char* id_raw = details["version_set"][i]["id"].asString().c_str(); + std::string id_raw = details["version_set"][i]["id"].asString(); char* endptr = 0; - int numbervalue = strtol(id_raw,&endptr,10); + int numbervalue = strtol(id_raw.c_str(),&endptr,10); - if ((*id_raw != 0) && (*endptr == 0)) { + if ((id_raw != "") && (*endptr == 0)) { toadd.id = numbervalue; } } @@ -203,7 +189,7 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) { } if (retval.versions.size() < 1) { - errorstream << "readModStoreModDetails: not a single version specified!" << std::endl; + infostream << "readModStoreModDetails: not a single version specified!" << std::endl; retval.valid = false; } @@ -214,11 +200,11 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) { if (details["categories"][i]["id"].asString().size()) { - const char* id_raw = details["categories"][i]["id"].asString().c_str(); + std::string id_raw = details["categories"][i]["id"].asString(); char* endptr = 0; - int numbervalue = strtol(id_raw,&endptr,10); + int numbervalue = strtol(id_raw.c_str(),&endptr,10); - if ((*id_raw != 0) && (*endptr == 0)) { + if ((id_raw != "") && (*endptr == 0)) { toadd.id = numbervalue; } } @@ -247,11 +233,11 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) { if (details["author"].isObject()) { if (details["author"]["id"].asString().size()) { - const char* id_raw = details["author"]["id"].asString().c_str(); + std::string id_raw = details["author"]["id"].asString(); char* endptr = 0; - int numbervalue = strtol(id_raw,&endptr,10); + int numbervalue = strtol(id_raw.c_str(),&endptr,10); - if ((*id_raw != 0) && (*endptr == 0)) { + if ((id_raw != "") && (*endptr == 0)) { retval.author.id = numbervalue; } else { @@ -281,11 +267,11 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) { if (details["license"].isObject()) { if (details["license"]["id"].asString().size()) { - const char* id_raw = details["license"]["id"].asString().c_str(); + std::string id_raw = details["license"]["id"].asString(); char* endptr = 0; - int numbervalue = strtol(id_raw,&endptr,10); + int numbervalue = strtol(id_raw.c_str(),&endptr,10); - if ((*id_raw != 0) && (*endptr == 0)) { + if ((id_raw != "") && (*endptr == 0)) { retval.license.id = numbervalue; } } @@ -312,11 +298,11 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) { if (details["titlepic"].isObject()) { if (details["titlepic"]["id"].asString().size()) { - const char* id_raw = details["titlepic"]["id"].asString().c_str(); + std::string id_raw = details["titlepic"]["id"].asString(); char* endptr = 0; - int numbervalue = strtol(id_raw,&endptr,10); + int numbervalue = strtol(id_raw.c_str(),&endptr,10); - if ((*id_raw != 0) && (*endptr == 0)) { + if ((id_raw != "") && (*endptr == 0)) { retval.titlepic.id = numbervalue; } } @@ -331,11 +317,11 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) { if (details["titlepic"]["mod"].asString().size()) { - const char* mod_raw = details["titlepic"]["mod"].asString().c_str(); + std::string mod_raw = details["titlepic"]["mod"].asString(); char* endptr = 0; - int numbervalue = strtol(mod_raw,&endptr,10); + int numbervalue = strtol(mod_raw.c_str(),&endptr,10); - if ((*mod_raw != 0) && (*endptr == 0)) { + if ((mod_raw != "") && (*endptr == 0)) { retval.titlepic.mod = numbervalue; } } @@ -344,11 +330,11 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) { //id if (details["id"].asString().size()) { - const char* id_raw = details["id"].asString().c_str(); + std::string id_raw = details["id"].asString(); char* endptr = 0; - int numbervalue = strtol(id_raw,&endptr,10); + int numbervalue = strtol(id_raw.c_str(),&endptr,10); - if ((*id_raw != 0) && (*endptr == 0)) { + if ((id_raw != "") && (*endptr == 0)) { retval.id = numbervalue; } } @@ -388,11 +374,11 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) { //value if (details["rating"].asString().size()) { - const char* id_raw = details["rating"].asString().c_str(); + std::string id_raw = details["rating"].asString(); char* endptr = 0; - float numbervalue = strtof(id_raw,&endptr); + float numbervalue = strtof(id_raw.c_str(),&endptr); - if ((*id_raw != 0) && (*endptr == 0)) { + if ((id_raw != "") && (*endptr == 0)) { retval.rating = numbervalue; } }