]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/convert_json.cpp
Add a callback: minetest.register_on_craft(itemstack, player,
[dragonfireclient.git] / src / convert_json.cpp
index 9b704aca6deda55c231c40a669ff7eef5b5e6bb5..61db67fd55808a2cc907c81c956ca77f739c92da 100644 (file)
@@ -25,6 +25,8 @@ 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"
 
 #if USE_CURL
 #include <curl/curl.h>
@@ -52,11 +54,12 @@ Json::Value                 fetchJsonValue(const std::string url,
                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"));
+               curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT_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) << ")" <<std::endl;
@@ -111,6 +114,7 @@ std::vector<ModStoreMod>    readModStoreList(Json::Value& modlist) {
                                }
                        }
                        else {
+                               errorstream << "readModStoreList: missing id" << std::endl;
                                toadd.valid = false;
                        }
 
@@ -119,6 +123,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 +132,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 +172,7 @@ ModStoreModDetails          readModStoreModDetails(Json::Value& details) {
                                }
                        }
                        else {
+                               errorstream << "readModStoreModDetails: missing version_set id" << std::endl;
                                retval.valid = false;
                        }
 
@@ -179,6 +186,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 +204,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 +224,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 +256,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 +269,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 +291,7 @@ ModStoreModDetails          readModStoreModDetails(Json::Value& details) {
                        }
                }
                else {
+                       errorstream << "readModStoreModDetails: missing license id" << std::endl;
                        retval.valid = false;
                }
 
@@ -283,6 +299,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 +309,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 +354,7 @@ ModStoreModDetails          readModStoreModDetails(Json::Value& details) {
                }
        }
        else {
+               errorstream << "readModStoreModDetails: missing id" << std::endl;
                retval.valid = false;
        }
 
@@ -312,6 +363,7 @@ ModStoreModDetails          readModStoreModDetails(Json::Value& details) {
                retval.title = details["title"].asString();
        }
        else {
+               errorstream << "readModStoreModDetails: missing title" << std::endl;
                retval.valid = false;
        }
 
@@ -320,6 +372,7 @@ ModStoreModDetails          readModStoreModDetails(Json::Value& details) {
                retval.basename = details["basename"].asString();
        }
        else {
+               errorstream << "readModStoreModDetails: missing basename" << std::endl;
                retval.valid = false;
        }