summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2020-10-13 22:18:42 +0200
committerPetr Mrázek <peterix@gmail.com>2020-10-13 22:18:42 +0200
commita7216ecca1b17bb372c51947be980654aa71fff4 (patch)
tree0b6cea5d60eff1716431d7ac2a82f78d210f2373
parent4689571c24161c504d36de5afc9eacf1fd0fe3ac (diff)
downloadMultiMC-a7216ecca1b17bb372c51947be980654aa71fff4.tar
MultiMC-a7216ecca1b17bb372c51947be980654aa71fff4.tar.gz
MultiMC-a7216ecca1b17bb372c51947be980654aa71fff4.tar.lz
MultiMC-a7216ecca1b17bb372c51947be980654aa71fff4.tar.xz
MultiMC-a7216ecca1b17bb372c51947be980654aa71fff4.zip
NOISSUE use Json parsing helpers to process technic search results
-rw-r--r--application/pages/modplatform/technic/TechnicModel.cpp47
1 files changed, 28 insertions, 19 deletions
diff --git a/application/pages/modplatform/technic/TechnicModel.cpp b/application/pages/modplatform/technic/TechnicModel.cpp
index b3d36bac..bdc411c3 100644
--- a/application/pages/modplatform/technic/TechnicModel.cpp
+++ b/application/pages/modplatform/technic/TechnicModel.cpp
@@ -16,6 +16,7 @@
#include "TechnicModel.h"
#include "Env.h"
#include "MultiMC.h"
+#include "Json.h"
#include <QIcon>
@@ -117,26 +118,34 @@ void Technic::ListModel::searchRequestFinished()
}
QList<Modpack> newList;
- auto objs = doc["modpacks"].toArray();
- for (auto technicPack: objs) {
- Modpack pack;
- auto technicPackObject = technicPack.toObject();
- pack.name = technicPackObject["name"].toString();
- pack.slug = technicPackObject["slug"].toString();
- if (pack.slug == "vanilla")
- continue;
- if (technicPackObject["iconUrl"].isString())
- {
- pack.logoUrl = technicPackObject["iconUrl"].toString();
- pack.logoName = pack.logoUrl.section(QLatin1Char('/'), -1).section(QLatin1Char('.'), 0, 0);
- }
- else
- {
- pack.logoUrl = "null";
- pack.logoName = "null";
+ try {
+ auto root = Json::requireObject(doc);
+ auto objs = Json::requireArray(root, "modpacks");
+ for (auto technicPack: objs) {
+ Modpack pack;
+ auto technicPackObject = Json::requireObject(technicPack);
+ pack.name = Json::requireString(technicPackObject, "name");
+ pack.slug = Json::requireString(technicPackObject, "slug");
+ if (pack.slug == "vanilla")
+ continue;
+
+ auto rawURL = Json::ensureString(technicPackObject, "iconUrl", "null");
+ if(rawURL == "null") {
+ pack.logoUrl = "null";
+ pack.logoName = "null";
+ }
+ else {
+ pack.logoUrl = rawURL;
+ pack.logoName = rawURL.section(QLatin1Char('/'), -1).section(QLatin1Char('.'), 0, 0);
+ }
+ pack.broken = false;
+ newList.append(pack);
}
- pack.broken = false;
- newList.append(pack);
+ }
+ catch (const JSONValidationError &err)
+ {
+ qCritical() << "Couldn't parse technic search results:" << err.cause() ;
+ return;
}
searchState = Finished;
beginInsertRows(QModelIndex(), modpacks.size(), modpacks.size() + newList.size() - 1);