diff options
author | Petr Mrázek <peterix@gmail.com> | 2020-10-13 22:18:42 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2020-10-13 22:18:42 +0200 |
commit | a7216ecca1b17bb372c51947be980654aa71fff4 (patch) | |
tree | 0b6cea5d60eff1716431d7ac2a82f78d210f2373 /application/pages/modplatform | |
parent | 4689571c24161c504d36de5afc9eacf1fd0fe3ac (diff) | |
download | PrismLauncher-a7216ecca1b17bb372c51947be980654aa71fff4.tar.gz PrismLauncher-a7216ecca1b17bb372c51947be980654aa71fff4.tar.bz2 PrismLauncher-a7216ecca1b17bb372c51947be980654aa71fff4.zip |
NOISSUE use Json parsing helpers to process technic search results
Diffstat (limited to 'application/pages/modplatform')
-rw-r--r-- | application/pages/modplatform/technic/TechnicModel.cpp | 47 |
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); |