X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fconvert_json.cpp;h=e548c45f54ea61a697844b883f53e595832d281f;hb=593eaf3b8894137874f9fb29203ec364e292c036;hp=58eefd9015b9c9a6980203e21a01824920fa5da7;hpb=5160be91ae6af23cabec5c7412a1c2c45fc46afb;p=dragonfireclient.git diff --git a/src/convert_json.cpp b/src/convert_json.cpp index 58eefd901..e548c45f5 100644 --- a/src/convert_json.cpp +++ b/src/convert_json.cpp @@ -25,76 +25,48 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mods.h" #include "config.h" #include "log.h" -#include "main.h" // for g_settings #include "settings.h" +#include "httpfetch.h" +#include "porting.h" -#if USE_CURL -#include - -static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp) +Json::Value fetchJsonValue(const std::string &url, + std::vector *extra_headers) { - ((std::string*)userp)->append((char*)contents, size * nmemb); - return size * nmemb; -} - -#endif + HTTPFetchRequest fetch_request; + HTTPFetchResult fetch_result; + fetch_request.url = url; + fetch_request.caller = HTTPFETCH_SYNC; -Json::Value fetchJsonValue(const std::string url, - struct curl_slist *chunk) { -#if USE_CURL - std::string liststring; - CURL *curl; + if (extra_headers != NULL) + fetch_request.extra_headers = *extra_headers; - curl = curl_easy_init(); - if (curl) - { - CURLcode res; + httpfetch_sync(fetch_request, fetch_result); - 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) << ")" < 100) { + errorstream << "Data (" << fetch_result.data.size() + << " bytes) printed to warningstream." << std::endl; + warningstream << "data: \"" << fetch_result.data << "\"" << std::endl; + } else { + errorstream << "data: \"" << fetch_result.data << "\"" << std::endl; + } return Json::Value(); } - if (root.isArray()) { - return root; - } - if ((root["list"].isArray())) { - return root["list"]; - } - else { - return root; - } -#endif - return Json::Value(); + return root; } std::vector readModStoreList(Json::Value& modlist) { - std::vector retval; + std::vector retval; if (modlist.isArray()) { for (unsigned int i = 0; i < modlist.size(); i++) @@ -104,13 +76,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 +138,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 +179,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 +190,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 +223,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 +257,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 +288,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 +307,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 +320,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; } } @@ -386,18 +362,10 @@ ModStoreModDetails readModStoreModDetails(Json::Value& details) { } //value - if (details["rating"].asString().size()) { - - const char* id_raw = details["rating"].asString().c_str(); - char* endptr = 0; - float numbervalue = strtof(id_raw,&endptr); - - if ((*id_raw != 0) && (*endptr == 0)) { - retval.rating = numbervalue; - } - } - else { - retval.rating = 0.0; + if (details["value"].isInt()) { + retval.rating = details["value"].asInt(); + } else { + retval.rating = 0; } //depends