diff --git a/launcher/Json.cpp b/launcher/Json.cpp index 8eedb9b05..557cb1ff4 100644 --- a/launcher/Json.cpp +++ b/launcher/Json.cpp @@ -153,7 +153,7 @@ QJsonValue toJson(const QVariant& variant) template <> QByteArray requireIsType(const QJsonValue& value, const QString& what) { - const QString string = ensureIsType(value, what); + const QString string = value.toString(what); // ensure that the string can be safely cast to Latin1 if (string != QString::fromLatin1(string.toLatin1())) { throw JsonException(what + " is not encodable as Latin1"); @@ -221,7 +221,7 @@ QDateTime requireIsType(const QJsonValue& value, const QString& what) template <> QUrl requireIsType(const QJsonValue& value, const QString& what) { - const QString string = ensureIsType(value, what); + const QString string = value.toString(what); if (string.isEmpty()) { return QUrl(); } diff --git a/launcher/Json.h b/launcher/Json.h index e51c737c2..f8c900412 100644 --- a/launcher/Json.h +++ b/launcher/Json.h @@ -248,19 +248,10 @@ QList ensureIsArrayOf(const QJsonObject& parent, { \ return requireIsType(value, what); \ } \ - inline TYPE ensure##NAME(const QJsonValue& value, const TYPE default_ = TYPE(), const QString& what = "Value") \ - { \ - return ensureIsType(value, default_, what); \ - } \ inline TYPE require##NAME(const QJsonObject& parent, const QString& key, const QString& what = "__placeholder__") \ { \ return requireIsType(parent, key, what); \ } \ - inline TYPE ensure##NAME(const QJsonObject& parent, const QString& key, const TYPE default_ = TYPE(), \ - const QString& what = "__placeholder") \ - { \ - return ensureIsType(parent, key, default_, what); \ - } JSON_HELPERFUNCTIONS(Array, QJsonArray) JSON_HELPERFUNCTIONS(Object, QJsonObject) diff --git a/launcher/MangoHud.cpp b/launcher/MangoHud.cpp index 29a7c63d9..d85100207 100644 --- a/launcher/MangoHud.cpp +++ b/launcher/MangoHud.cpp @@ -111,8 +111,8 @@ QString getLibraryString() try { auto conf = Json::requireDocument(filePath, vkLayer); auto confObject = Json::requireObject(conf, vkLayer); - auto layer = Json::ensureObject(confObject, "layer"); - QString libraryName = Json::ensureString(layer, "library_path"); + auto layer = confObject["layer"].toObject(); + QString libraryName = layer["library_path"].toString(); if (libraryName.isEmpty()) { continue; diff --git a/launcher/java/JavaMetadata.cpp b/launcher/java/JavaMetadata.cpp index d4da95457..115baa9e5 100644 --- a/launcher/java/JavaMetadata.cpp +++ b/launcher/java/JavaMetadata.cpp @@ -52,27 +52,27 @@ MetadataPtr parseJavaMeta(const QJsonObject& in) { auto meta = std::make_shared(); - meta->m_name = Json::ensureString(in, "name", ""); - meta->vendor = Json::ensureString(in, "vendor", ""); - meta->url = Json::ensureString(in, "url", ""); - meta->releaseTime = timeFromS3Time(Json::ensureString(in, "releaseTime", "")); - meta->downloadType = parseDownloadType(Json::ensureString(in, "downloadType", "")); - meta->packageType = Json::ensureString(in, "packageType", ""); - meta->runtimeOS = Json::ensureString(in, "runtimeOS", "unknown"); + meta->m_name = in["name"].toString(""); + meta->vendor = in["vendor"].toString(""); + meta->url = in["url"].toString(""); + meta->releaseTime = timeFromS3Time(in["releaseTime"].toString("")); + meta->downloadType = parseDownloadType(in["downloadType"].toString("")); + meta->packageType = in["packageType"].toString(""); + meta->runtimeOS = in["runtimeOS"].toString("unknown"); if (in.contains("checksum")) { auto obj = Json::requireObject(in, "checksum"); - meta->checksumHash = Json::ensureString(obj, "hash", ""); - meta->checksumType = Json::ensureString(obj, "type", ""); + meta->checksumHash = obj["hash"].toString(""); + meta->checksumType = obj["type"].toString(""); } if (in.contains("version")) { auto obj = Json::requireObject(in, "version"); - auto name = Json::ensureString(obj, "name", ""); - auto major = Json::ensureInteger(obj, "major", 0); - auto minor = Json::ensureInteger(obj, "minor", 0); - auto security = Json::ensureInteger(obj, "security", 0); - auto build = Json::ensureInteger(obj, "build", 0); + auto name = obj["name"].toString(""); + auto major = obj["major"].toInteger(); + auto minor = obj["minor"].toInteger(); + auto security = obj["security"].toInteger(); + auto build = obj["build"].toInteger(); meta->version = JavaVersion(major, minor, security, build, name); } return meta; diff --git a/launcher/java/download/ManifestDownloadTask.cpp b/launcher/java/download/ManifestDownloadTask.cpp index 20b39e751..04d28a5cc 100644 --- a/launcher/java/download/ManifestDownloadTask.cpp +++ b/launcher/java/download/ManifestDownloadTask.cpp @@ -77,27 +77,27 @@ void ManifestDownloadTask::downloadJava(const QJsonDocument& doc) // valid json doc, begin making jre spot FS::ensureFolderPathExists(m_final_path); std::vector toDownload; - auto list = Json::ensureObject(Json::ensureObject(doc.object()), "files"); + auto list = doc.object()["files"].toObject(); for (const auto& paths : list.keys()) { auto file = FS::PathCombine(m_final_path, paths); - const QJsonObject& meta = Json::ensureObject(list, paths); - auto type = Json::ensureString(meta, "type"); + const QJsonObject& meta = list[paths].toObject(); + auto type = meta["type"].toString(); if (type == "directory") { FS::ensureFolderPathExists(file); } else if (type == "link") { // this is *nix only ! - auto path = Json::ensureString(meta, "target"); + auto path = meta["target"].toString(); if (!path.isEmpty()) { QFile::link(path, file); } } else if (type == "file") { // TODO download compressed version if it exists ? - auto raw = Json::ensureObject(Json::ensureObject(meta, "downloads"), "raw"); - auto isExec = Json::ensureBoolean(meta, "executable", false); - auto url = Json::ensureString(raw, "url"); + auto raw = meta["downloads"].toObject()["raw"].toObject(); + auto isExec = meta["executable"].toBool(); + auto url = raw["url"].toString(); if (!url.isEmpty() && QUrl(url).isValid()) { - auto f = File{ file, url, QByteArray::fromHex(Json::ensureString(raw, "sha1").toLatin1()), isExec }; + auto f = File{ file, url, QByteArray::fromHex(raw["sha1"].toString().toLatin1()), isExec }; toDownload.push_back(f); } } @@ -134,4 +134,4 @@ bool ManifestDownloadTask::abort() emitAborted(); return aborted; }; -} // namespace Java \ No newline at end of file +} // namespace Java diff --git a/launcher/meta/JsonFormat.cpp b/launcher/meta/JsonFormat.cpp index 8d8466c87..db1947655 100644 --- a/launcher/meta/JsonFormat.cpp +++ b/launcher/meta/JsonFormat.cpp @@ -40,8 +40,8 @@ static std::shared_ptr parseIndexInternal(const QJsonObject& obj) lists.reserve(objects.size()); std::transform(objects.begin(), objects.end(), std::back_inserter(lists), [](const QJsonObject& obj) { VersionList::Ptr list = std::make_shared(requireString(obj, "uid")); - list->setName(ensureString(obj, "name", QString())); - list->setSha256(ensureString(obj, "sha256", QString())); + list->setName(obj["name"].toString()); + list->setSha256(obj["sha256"].toString()); return list; }); return std::make_shared(lists); @@ -52,14 +52,14 @@ static Version::Ptr parseCommonVersion(const QString& uid, const QJsonObject& ob { Version::Ptr version = std::make_shared(uid, requireString(obj, "version")); version->setTime(QDateTime::fromString(requireString(obj, "releaseTime"), Qt::ISODate).toMSecsSinceEpoch() / 1000); - version->setType(ensureString(obj, "type", QString())); - version->setRecommended(ensureBoolean(obj, QString("recommended"), false)); - version->setVolatile(ensureBoolean(obj, QString("volatile"), false)); + version->setType(obj["type"].toString()); + version->setRecommended(obj["recommended"].toBool()); + version->setVolatile(obj["volatile"].toBool()); RequireSet reqs, conflicts; parseRequires(obj, &reqs, "requires"); parseRequires(obj, &conflicts, "conflicts"); version->setRequires(reqs, conflicts); - if (auto sha256 = ensureString(obj, "sha256", QString()); !sha256.isEmpty()) { + if (auto sha256 = obj["sha256"].toString(); !sha256.isEmpty()) { version->setSha256(sha256); } return version; @@ -89,7 +89,7 @@ static VersionList::Ptr parseVersionListInternal(const QJsonObject& obj) }); VersionList::Ptr list = std::make_shared(uid); - list->setName(ensureString(obj, "name", QString())); + list->setName(obj["name"].toString()); list->setVersions(versions); return list; } @@ -171,8 +171,8 @@ void parseRequires(const QJsonObject& obj, RequireSet* ptr, const char* keyName) while (iter != reqArray.end()) { auto reqObject = requireObject(*iter); auto uid = requireString(reqObject, "uid"); - auto equals = ensureString(reqObject, "equals", QString()); - auto suggests = ensureString(reqObject, "suggests", QString()); + auto equals = reqObject["equals"].toString(); + auto suggests = reqObject["suggests"].toString(); ptr->insert({ uid, equals, suggests }); iter++; } diff --git a/launcher/minecraft/OneSixVersionFormat.cpp b/launcher/minecraft/OneSixVersionFormat.cpp index 32dd1875c..48ea3b894 100644 --- a/launcher/minecraft/OneSixVersionFormat.cpp +++ b/launcher/minecraft/OneSixVersionFormat.cpp @@ -259,8 +259,8 @@ VersionFilePtr OneSixVersionFormat::versionFileFromJson(const QJsonDocument& doc if (root.contains("runtimes")) { out->runtimes = {}; - for (auto runtime : ensureArray(root, "runtimes")) { - out->runtimes.append(Java::parseJavaMeta(ensureObject(runtime))); + for (auto runtime : root["runtimes"].toArray()) { + out->runtimes.append(Java::parseJavaMeta(runtime.toObject())); } } diff --git a/launcher/minecraft/PackProfile.cpp b/launcher/minecraft/PackProfile.cpp index 8475a1f32..74c8d5ef8 100644 --- a/launcher/minecraft/PackProfile.cpp +++ b/launcher/minecraft/PackProfile.cpp @@ -130,18 +130,18 @@ static ComponentPtr componentFromJsonV1(PackProfile* parent, const QString& comp auto uid = Json::requireString(obj.value("uid")); auto filePath = componentJsonPattern.arg(uid); auto component = makeShared(parent, uid); - component->m_version = Json::ensureString(obj.value("version")); - component->m_dependencyOnly = Json::ensureBoolean(obj.value("dependencyOnly"), false); - component->m_important = Json::ensureBoolean(obj.value("important"), false); + component->m_version = obj.value("version").toString(); + component->m_dependencyOnly = obj.value("dependencyOnly").toBool(); + component->m_important = obj.value("important").toBool(); // cached // TODO @RESILIENCE: ignore invalid values/structure here? - component->m_cachedVersion = Json::ensureString(obj.value("cachedVersion")); - component->m_cachedName = Json::ensureString(obj.value("cachedName")); + component->m_cachedVersion = obj.value("cachedVersion").toString(); + component->m_cachedName = obj.value("cachedName").toString(); Meta::parseRequires(obj, &component->m_cachedRequires, "cachedRequires"); Meta::parseRequires(obj, &component->m_cachedConflicts, "cachedConflicts"); - component->m_cachedVolatile = Json::ensureBoolean(obj.value("volatile"), false); - bool disabled = Json::ensureBoolean(obj.value("disabled"), false); + component->m_cachedVolatile = obj.value("volatile").toBool(); + bool disabled = obj.value("disabled").toBool(); component->setEnabled(!disabled); return component; } diff --git a/launcher/minecraft/auth/steps/MSADeviceCodeStep.cpp b/launcher/minecraft/auth/steps/MSADeviceCodeStep.cpp index 38ff90a47..7a4722f21 100644 --- a/launcher/minecraft/auth/steps/MSADeviceCodeStep.cpp +++ b/launcher/minecraft/auth/steps/MSADeviceCodeStep.cpp @@ -105,9 +105,8 @@ DeviceAuthorizationResponse parseDeviceAuthorizationResponse(const QByteArray& d } auto obj = doc.object(); return { - Json::ensureString(obj, "device_code"), Json::ensureString(obj, "user_code"), Json::ensureString(obj, "verification_uri"), - Json::ensureInteger(obj, "expires_in"), Json::ensureInteger(obj, "interval"), Json::ensureString(obj, "error"), - Json::ensureString(obj, "error_description"), + obj["device_code"].toString(), obj["user_code"].toString(), obj["verification_uri"].toString(), obj["expires_in"].toInt(), + obj["interval"].toInt(), obj["error"].toString(), obj["error_description"].toString(), }; } @@ -217,12 +216,12 @@ AuthenticationResponse parseAuthenticationResponse(const QByteArray& data) return {}; } auto obj = doc.object(); - return { Json::ensureString(obj, "access_token"), - Json::ensureString(obj, "token_type"), - Json::ensureString(obj, "refresh_token"), - Json::ensureInteger(obj, "expires_in"), - Json::ensureString(obj, "error"), - Json::ensureString(obj, "error_description"), + return { obj["access_token"].toString(), + obj["token_type"].toString(), + obj["refresh_token"].toString(), + obj["expires_in"].toInt(), + obj["error"].toString(), + obj["error_description"].toString(), obj.toVariantMap() }; } diff --git a/launcher/minecraft/mod/tasks/LocalDataPackParseTask.cpp b/launcher/minecraft/mod/tasks/LocalDataPackParseTask.cpp index c63e0c65f..2708a622b 100644 --- a/launcher/minecraft/mod/tasks/LocalDataPackParseTask.cpp +++ b/launcher/minecraft/mod/tasks/LocalDataPackParseTask.cpp @@ -180,7 +180,7 @@ bool processMCMeta(DataPack* pack, QByteArray&& raw_data) auto json_doc = QJsonDocument::fromJson(raw_data); auto pack_obj = Json::requireObject(json_doc.object(), "pack", {}); - pack->setPackFormat(Json::ensureInteger(pack_obj, "pack_format", 0)); + pack->setPackFormat(pack_obj["pack_format"].toInt(0)); pack->setDescription(DataPackUtils::processComponent(pack_obj.value("description"))); } catch (Json::JsonException& e) { qWarning() << "JsonException: " << e.what() << e.cause(); @@ -192,19 +192,19 @@ bool processMCMeta(DataPack* pack, QByteArray&& raw_data) QString buildStyle(const QJsonObject& obj) { QStringList styles; - if (auto color = Json::ensureString(obj, "color"); !color.isEmpty()) { + if (auto color = obj["color"].toString(); !color.isEmpty()) { styles << QString("color: %1;").arg(color); } if (obj.contains("bold")) { QString weight = "normal"; - if (Json::ensureBoolean(obj, "bold", false)) { + if (obj["bold"].toBool()) { weight = "bold"; } styles << QString("font-weight: %1;").arg(weight); } if (obj.contains("italic")) { QString style = "normal"; - if (Json::ensureBoolean(obj, "italic", false)) { + if (obj["italic"].toBool()) { style = "italic"; } styles << QString("font-style: %1;").arg(style); @@ -223,10 +223,10 @@ QString processComponent(const QJsonArray& value, bool strikethrough, bool under QString processComponent(const QJsonObject& obj, bool strikethrough, bool underline) { - underline = Json::ensureBoolean(obj, "underlined", underline); - strikethrough = Json::ensureBoolean(obj, "strikethrough", strikethrough); + underline = obj["underlined"].toBool(underline); + strikethrough = obj["strikethrough"].toBool(strikethrough); - QString result = Json::ensureString(obj, "text"); + QString result = obj["text"].toString(); if (underline) { result = QString("%1").arg(result); } @@ -234,14 +234,14 @@ QString processComponent(const QJsonObject& obj, bool strikethrough, bool underl result = QString("%1").arg(result); } // the extra needs to be a array - result += processComponent(Json::ensureArray(obj, "extra"), strikethrough, underline); + result += processComponent(obj["extra"].toArray(), strikethrough, underline); if (auto style = buildStyle(obj); !style.isEmpty()) { result = QString("%2").arg(style, result); } if (obj.contains("clickEvent")) { - auto click_event = Json::ensureObject(obj, "clickEvent"); - auto action = Json::ensureString(click_event, "action"); - auto value = Json::ensureString(click_event, "value"); + auto click_event = obj["clickEvent"].toObject(); + auto action = click_event["action"].toString(); + auto value = click_event["value"].toString(); if (action == "open_url" && !value.isEmpty()) { result = QString("%2").arg(value, result); } @@ -366,4 +366,4 @@ void LocalDataPackParseTask::executeTask() } emitSucceeded(); -} \ No newline at end of file +} diff --git a/launcher/minecraft/mod/tasks/LocalModParseTask.cpp b/launcher/minecraft/mod/tasks/LocalModParseTask.cpp index 952115bed..be6c204a7 100644 --- a/launcher/minecraft/mod/tasks/LocalModParseTask.cpp +++ b/launcher/minecraft/mod/tasks/LocalModParseTask.cpp @@ -75,11 +75,11 @@ ModDetails ReadMCModInfo(QByteArray contents) val = jsonDoc.object().value("modListVersion"); } - int version = Json::ensureInteger(val, -1); + int version = val.toInt(-1); // Some mods set the number with "", so it's a String instead if (version < 0) - version = Json::ensureString(val, "").toInt(); + version = val.toString("").toInt(); if (version != 2) { qWarning() << QString(R"(The value of 'modListVersion' is "%1" (expected "2")! The file may be corrupted.)").arg(version); @@ -298,26 +298,26 @@ ModDetails ReadQuiltModInfo(QByteArray contents) QJsonParseError jsonError; QJsonDocument jsonDoc = QJsonDocument::fromJson(contents, &jsonError); auto object = Json::requireObject(jsonDoc, "quilt.mod.json"); - auto schemaVersion = Json::ensureInteger(object.value("schema_version"), 0, "Quilt schema_version"); + auto schemaVersion = object.value("schema_version").toInt(); // https://github.com/QuiltMC/rfcs/blob/be6ba280d785395fefa90a43db48e5bfc1d15eb4/specification/0002-quilt.mod.json.md if (schemaVersion == 1) { - auto modInfo = Json::requireObject(object.value("quilt_loader"), "Quilt mod info"); + auto modInfo = object.value("quilt_loader").toObject(); - details.mod_id = Json::requireString(modInfo.value("id"), "Mod ID"); - details.version = Json::requireString(modInfo.value("version"), "Mod version"); + details.mod_id = modInfo.value("id").toString(); + details.version = modInfo.value("version").toString(); - auto modMetadata = Json::ensureObject(modInfo.value("metadata")); + auto modMetadata = modInfo.value("metadata").toObject(); - details.name = Json::ensureString(modMetadata.value("name"), details.mod_id); - details.description = Json::ensureString(modMetadata.value("description")); + details.name = modMetadata.value("name").toString(details.mod_id); + details.description = modMetadata.value("description").toString(); - auto modContributors = Json::ensureObject(modMetadata.value("contributors")); + auto modContributors = modMetadata.value("contributors").toObject(); // We don't really care about the role of a contributor here details.authors += modContributors.keys(); - auto modContact = Json::ensureObject(modMetadata.value("contact")); + auto modContact = modMetadata.value("contact").toObject(); if (modContact.contains("homepage")) { details.homeurl = Json::requireString(modContact.value("homepage")); diff --git a/launcher/minecraft/skins/SkinList.cpp b/launcher/minecraft/skins/SkinList.cpp index be3bc776b..54c77bf25 100644 --- a/launcher/minecraft/skins/SkinList.cpp +++ b/launcher/minecraft/skins/SkinList.cpp @@ -75,9 +75,9 @@ bool SkinList::update() try { auto doc = Json::requireDocument(manifestInfo.absoluteFilePath(), "SkinList JSON file"); const auto root = doc.object(); - auto skins = Json::ensureArray(root, "skins"); + auto skins = root["skins"].toArray(); for (auto jSkin : skins) { - SkinModel s(m_dir, Json::ensureObject(jSkin)); + SkinModel s(m_dir, jSkin.toObject()); if (s.isValid()) { newSkins << s; } diff --git a/launcher/minecraft/skins/SkinModel.cpp b/launcher/minecraft/skins/SkinModel.cpp index 209207215..f0be4a3cf 100644 --- a/launcher/minecraft/skins/SkinModel.cpp +++ b/launcher/minecraft/skins/SkinModel.cpp @@ -21,7 +21,6 @@ #include #include "FileSystem.h" -#include "Json.h" static QImage improveSkin(const QImage& skin) { @@ -102,11 +101,11 @@ SkinModel::SkinModel(QString path) : m_path(path), m_texture(getSkin(path)), m_m } SkinModel::SkinModel(QDir skinDir, QJsonObject obj) - : m_capeId(Json::ensureString(obj, "capeId")), m_model(Model::CLASSIC), m_url(Json::ensureString(obj, "url")) + : m_capeId(obj["capeId"].toString()), m_model(Model::CLASSIC), m_url(obj["url"].toString()) { - auto name = Json::ensureString(obj, "name"); + auto name = obj["name"].toString(); - if (auto model = Json::ensureString(obj, "model"); model == "SLIM") { + if (auto model = obj["model"].toString(); model == "SLIM") { m_model = Model::SLIM; } m_path = skinDir.absoluteFilePath(name) + ".png"; diff --git a/launcher/modplatform/EnsureMetadataTask.cpp b/launcher/modplatform/EnsureMetadataTask.cpp index e170fbcd0..ecf83c7c2 100644 --- a/launcher/modplatform/EnsureMetadataTask.cpp +++ b/launcher/modplatform/EnsureMetadataTask.cpp @@ -374,8 +374,8 @@ Task::Ptr EnsureMetadataTask::flameVersionsTask() } for (auto match : data_arr) { - auto match_obj = Json::ensureObject(match, {}); - auto file_obj = Json::ensureObject(match_obj, "file", {}); + auto match_obj = match.toObject(); + auto file_obj = match_obj["file"].toObject(); if (match_obj.isEmpty() || file_obj.isEmpty()) { qWarning() << "Fingerprint match is empty!"; @@ -383,7 +383,7 @@ Task::Ptr EnsureMetadataTask::flameVersionsTask() return; } - auto fingerprint = QString::number(Json::ensureVariant(file_obj, "fileFingerprint").toUInt()); + auto fingerprint = QString::number(file_obj["fileFingerprint"].toInteger()); auto resource = m_resources.find(fingerprint); if (resource == m_resources.end()) { qWarning() << "Invalid fingerprint from the API response."; diff --git a/launcher/modplatform/ResourceAPI.cpp b/launcher/modplatform/ResourceAPI.cpp index 448efbc24..adfbef2ac 100644 --- a/launcher/modplatform/ResourceAPI.cpp +++ b/launcher/modplatform/ResourceAPI.cpp @@ -97,7 +97,7 @@ Task::Ptr ResourceAPI::getProjectVersions(VersionSearchArgs&& args, Callback unsortedVersions; try { - auto arr = doc.isObject() ? Json::ensureArray(doc.object(), "data") : doc.array(); + auto arr = doc.isObject() ? doc.object()["data"].toArray() : doc.array(); for (auto versionIter : arr) { auto obj = versionIter.toObject(); @@ -213,7 +213,7 @@ Task::Ptr ResourceAPI::getDependencyVersion(DependencySearchArgs&& args, Callbac if (args.dependency.version.length() != 0 && doc.isObject()) { arr.append(doc.object()); } else { - arr = doc.isObject() ? Json::ensureArray(doc.object(), "data") : doc.array(); + arr = doc.isObject() ? doc.object()["data"].toArray() : doc.array(); } QVector versions; diff --git a/launcher/modplatform/atlauncher/ATLPackIndex.cpp b/launcher/modplatform/atlauncher/ATLPackIndex.cpp index c35569d45..d41e446cf 100644 --- a/launcher/modplatform/atlauncher/ATLPackIndex.cpp +++ b/launcher/modplatform/atlauncher/ATLPackIndex.cpp @@ -40,8 +40,8 @@ void ATLauncher::loadIndexedPack(ATLauncher::IndexedPack& m, QJsonObject& obj) loadIndexedVersion(version, versionObj); m.versions.append(version); } - m.system = Json::ensureBoolean(obj, QString("system"), false); - m.description = Json::ensureString(obj, "description", ""); + m.system = obj["system"].toBool(); + m.description = obj["description"].toString(""); static const QRegularExpression s_regex("[^A-Za-z0-9]"); m.safeName = Json::requireString(obj, "name").replace(s_regex, "").toLower() + ".png"; diff --git a/launcher/modplatform/atlauncher/ATLPackManifest.cpp b/launcher/modplatform/atlauncher/ATLPackManifest.cpp index 9ff2f339e..b5f4fdf0f 100644 --- a/launcher/modplatform/atlauncher/ATLPackManifest.cpp +++ b/launcher/modplatform/atlauncher/ATLPackManifest.cpp @@ -100,20 +100,20 @@ static ATLauncher::ModType parseModType(QString rawType) static void loadVersionLoader(ATLauncher::VersionLoader& p, QJsonObject& obj) { p.type = Json::requireString(obj, "type"); - p.choose = Json::ensureBoolean(obj, QString("choose"), false); + p.choose = obj["choose"].toBool(); auto metadata = Json::requireObject(obj, "metadata"); - p.latest = Json::ensureBoolean(metadata, QString("latest"), false); - p.recommended = Json::ensureBoolean(metadata, QString("recommended"), false); + p.latest = metadata["latest"].toBool(); + p.recommended = metadata["recommended"].toBool(); // Minecraft Forge if (p.type == "forge") { - p.version = Json::ensureString(metadata, "version", ""); + p.version = metadata["version"].toString(""); } // Fabric Loader if (p.type == "fabric") { - p.version = Json::ensureString(metadata, "loader", ""); + p.version = metadata["loader"].toString(""); } } @@ -126,7 +126,7 @@ static void loadVersionLibrary(ATLauncher::VersionLibrary& p, QJsonObject& obj) p.download_raw = Json::requireString(obj, "download"); p.download = parseDownloadType(p.download_raw); - p.server = Json::ensureString(obj, "server", ""); + p.server = obj["server"].toString(""); } static void loadVersionConfigs(ATLauncher::VersionConfigs& p, QJsonObject& obj) @@ -141,7 +141,7 @@ static void loadVersionMod(ATLauncher::VersionMod& p, QJsonObject& obj) p.version = Json::requireString(obj, "version"); p.url = Json::requireString(obj, "url"); p.file = Json::requireString(obj, "file"); - p.md5 = Json::ensureString(obj, "md5", ""); + p.md5 = obj["md5"].toString(""); p.download_raw = Json::requireString(obj, "download"); p.download = parseDownloadType(p.download_raw); @@ -161,7 +161,7 @@ static void loadVersionMod(ATLauncher::VersionMod& p, QJsonObject& obj) if (obj.contains("extractTo")) { p.extractTo_raw = Json::requireString(obj, "extractTo"); p.extractTo = parseModType(p.extractTo_raw); - p.extractFolder = Json::ensureString(obj, "extractFolder", "").replace("%s%", "/"); + p.extractFolder = obj["extractFolder"].toString("").replace("%s%", "/"); } if (obj.contains("decompType")) { @@ -170,23 +170,23 @@ static void loadVersionMod(ATLauncher::VersionMod& p, QJsonObject& obj) p.decompFile = Json::requireString(obj, "decompFile"); } - p.description = Json::ensureString(obj, QString("description"), ""); - p.optional = Json::ensureBoolean(obj, QString("optional"), false); - p.recommended = Json::ensureBoolean(obj, QString("recommended"), false); - p.selected = Json::ensureBoolean(obj, QString("selected"), false); - p.hidden = Json::ensureBoolean(obj, QString("hidden"), false); - p.library = Json::ensureBoolean(obj, QString("library"), false); - p.group = Json::ensureString(obj, QString("group"), ""); + p.description = obj["description"].toString(""); + p.optional = obj["optional"].toBool(); + p.recommended = obj["recommended"].toBool(); + p.selected = obj["selected"].toBool(); + p.hidden = obj["hidden"].toBool(); + p.library = obj["library"].toBool(); + p.group = obj["group"].toString(""); if (obj.contains("depends")) { auto dependsArr = Json::requireArray(obj, "depends"); for (const auto depends : dependsArr) { p.depends.append(Json::requireString(depends)); } } - p.colour = Json::ensureString(obj, QString("colour"), ""); - p.warning = Json::ensureString(obj, QString("warning"), ""); + p.colour = obj["colour"].toString(""); + p.warning = obj["warning"].toString(""); - p.client = Json::ensureBoolean(obj, QString("client"), false); + p.client = obj["client"].toBool(); // computed p.effectively_hidden = p.hidden || p.library; @@ -194,20 +194,20 @@ static void loadVersionMod(ATLauncher::VersionMod& p, QJsonObject& obj) static void loadVersionMessages(ATLauncher::VersionMessages& m, QJsonObject& obj) { - m.install = Json::ensureString(obj, "install", ""); - m.update = Json::ensureString(obj, "update", ""); + m.install = obj["install"].toString(""); + m.update = obj["update"].toString(""); } static void loadVersionMainClass(ATLauncher::PackVersionMainClass& m, QJsonObject& obj) { - m.mainClass = Json::ensureString(obj, "mainClass", ""); - m.depends = Json::ensureString(obj, "depends", ""); + m.mainClass = obj["mainClass"].toString(""); + m.depends = obj["depends"].toString(""); } static void loadVersionExtraArguments(ATLauncher::PackVersionExtraArguments& a, QJsonObject& obj) { - a.arguments = Json::ensureString(obj, "arguments", ""); - a.depends = Json::ensureString(obj, "depends", ""); + a.arguments = obj["arguments"].toString(""); + a.depends = obj["depends"].toString(""); } static void loadVersionKeep(ATLauncher::VersionKeep& k, QJsonObject& obj) @@ -272,7 +272,7 @@ void ATLauncher::loadVersion(PackVersion& v, QJsonObject& obj) { v.version = Json::requireString(obj, "version"); v.minecraft = Json::requireString(obj, "minecraft"); - v.noConfigs = Json::ensureBoolean(obj, QString("noConfigs"), false); + v.noConfigs = obj["noConfigs"].toBool(); if (obj.contains("mainClass")) { auto main = Json::requireObject(obj, "mainClass"); @@ -314,22 +314,22 @@ void ATLauncher::loadVersion(PackVersion& v, QJsonObject& obj) loadVersionConfigs(v.configs, configsObj); } - auto colourObj = Json::ensureObject(obj, "colours"); + auto colourObj = obj["colours"].toObject(); for (const auto& key : colourObj.keys()) { v.colours[key] = Json::requireString(colourObj.value(key), "colour"); } - auto warningsObj = Json::ensureObject(obj, "warnings"); + auto warningsObj = obj["warnings"].toObject(); for (const auto& key : warningsObj.keys()) { v.warnings[key] = Json::requireString(warningsObj.value(key), "warning"); } - auto messages = Json::ensureObject(obj, "messages"); + auto messages = obj["messages"].toObject(); loadVersionMessages(v.messages, messages); - auto keeps = Json::ensureObject(obj, "keeps"); + auto keeps = obj["keeps"].toObject(); loadVersionKeeps(v.keeps, keeps); - auto deletes = Json::ensureObject(obj, "deletes"); + auto deletes = obj["deletes"].toObject(); loadVersionDeletes(v.deletes, deletes); } diff --git a/launcher/modplatform/flame/FlameAPI.cpp b/launcher/modplatform/flame/FlameAPI.cpp index b0d9af804..2b634efef 100644 --- a/launcher/modplatform/flame/FlameAPI.cpp +++ b/launcher/modplatform/flame/FlameAPI.cpp @@ -59,7 +59,7 @@ QString FlameAPI::getModFileChangelog(int modId, int fileId) return; } - changelog = Json::ensureString(doc.object(), "data"); + changelog = doc.object()["data"].toString(); }); QObject::connect(netJob.get(), &NetJob::finished, [&lock] { lock.quit(); }); @@ -92,7 +92,7 @@ QString FlameAPI::getModDescription(int modId) return; } - description = Json::ensureString(doc.object(), "data"); + description = doc.object()["data"].toString(); }); QObject::connect(netJob.get(), &NetJob::finished, [&lock] { lock.quit(); }); diff --git a/launcher/modplatform/flame/FlameAPI.h b/launcher/modplatform/flame/FlameAPI.h index 799e142ce..430e2578b 100644 --- a/launcher/modplatform/flame/FlameAPI.h +++ b/launcher/modplatform/flame/FlameAPI.h @@ -140,7 +140,7 @@ class FlameAPI : public ResourceAPI { return url; } - QJsonArray documentToArray(QJsonDocument& obj) const override { return Json::ensureArray(obj.object(), "data"); } + QJsonArray documentToArray(QJsonDocument& obj) const override { return obj.object()["data"].toArray(); } void loadIndexedPack(ModPlatform::IndexedPack& m, QJsonObject& obj) const override { FlameMod::loadIndexedPack(m, obj); } ModPlatform::IndexedVersion loadIndexedPackVersion(QJsonObject& obj, ModPlatform::ResourceType resourceType) const override { diff --git a/launcher/modplatform/flame/FlameModIndex.cpp b/launcher/modplatform/flame/FlameModIndex.cpp index d92ee729c..e965c052f 100644 --- a/launcher/modplatform/flame/FlameModIndex.cpp +++ b/launcher/modplatform/flame/FlameModIndex.cpp @@ -15,17 +15,17 @@ void FlameMod::loadIndexedPack(ModPlatform::IndexedPack& pack, QJsonObject& obj) pack.provider = ModPlatform::ResourceProvider::FLAME; pack.name = Json::requireString(obj, "name"); pack.slug = Json::requireString(obj, "slug"); - pack.websiteUrl = Json::ensureString(Json::ensureObject(obj, "links"), "websiteUrl", ""); - pack.description = Json::ensureString(obj, "summary", ""); + pack.websiteUrl = obj["links"].toObject()["websiteUrl"].toString(""); + pack.description = obj["summary"].toString(""); - QJsonObject logo = Json::ensureObject(obj, "logo"); - pack.logoName = Json::ensureString(logo, "title"); - pack.logoUrl = Json::ensureString(logo, "thumbnailUrl"); + QJsonObject logo = obj["logo"].toObject(); + pack.logoName = logo["title"].toString(); + pack.logoUrl = logo["thumbnailUrl"].toString(); if (pack.logoUrl.isEmpty()) { - pack.logoUrl = Json::ensureString(logo, "url"); + pack.logoUrl = logo["url"].toString(); } - auto authors = Json::ensureArray(obj, "authors"); + auto authors = obj["authors"].toArray(); for (auto authorIter : authors) { auto author = Json::requireObject(authorIter); ModPlatform::ModpackAuthor packAuthor; @@ -40,17 +40,17 @@ void FlameMod::loadIndexedPack(ModPlatform::IndexedPack& pack, QJsonObject& obj) void FlameMod::loadURLs(ModPlatform::IndexedPack& pack, QJsonObject& obj) { - auto links_obj = Json::ensureObject(obj, "links"); + auto links_obj = obj["links"].toObject(); - pack.extraData.issuesUrl = Json::ensureString(links_obj, "issuesUrl"); + pack.extraData.issuesUrl = links_obj["issuesUrl"].toString(); if (pack.extraData.issuesUrl.endsWith('/')) pack.extraData.issuesUrl.chop(1); - pack.extraData.sourceUrl = Json::ensureString(links_obj, "sourceUrl"); + pack.extraData.sourceUrl = links_obj["sourceUrl"].toString(); if (pack.extraData.sourceUrl.endsWith('/')) pack.extraData.sourceUrl.chop(1); - pack.extraData.wikiUrl = Json::ensureString(links_obj, "wikiUrl"); + pack.extraData.wikiUrl = links_obj["wikiUrl"].toString(); if (pack.extraData.wikiUrl.endsWith('/')) pack.extraData.wikiUrl.chop(1); @@ -136,8 +136,8 @@ auto FlameMod::loadIndexedPackVersion(QJsonObject& obj, bool load_changelog) -> file.fileId = Json::requireInteger(obj, "id"); file.date = Json::requireString(obj, "fileDate"); file.version = Json::requireString(obj, "displayName"); - file.downloadUrl = Json::ensureString(obj, "downloadUrl"); - file.fileName = Json::requireString(obj, "fileName"); + file.downloadUrl = obj["downloadUrl"].toString(); + file.fileName = obj["fileName"].toString(); file.fileName = FS::RemoveInvalidPathChars(file.fileName); ModPlatform::IndexedVersionType::VersionType ver_type; @@ -156,11 +156,11 @@ auto FlameMod::loadIndexedPackVersion(QJsonObject& obj, bool load_changelog) -> } file.version_type = ModPlatform::IndexedVersionType(ver_type); - auto hash_list = Json::ensureArray(obj, "hashes"); + auto hash_list = obj["hashes"].toArray(); for (auto h : hash_list) { - auto hash_entry = Json::ensureObject(h); + auto hash_entry = h.toObject(); auto hash_types = ModPlatform::ProviderCapabilities::hashType(ModPlatform::ResourceProvider::FLAME); - auto hash_algo = enumToString(Json::ensureInteger(hash_entry, "algo", 1, "algorithm")); + auto hash_algo = enumToString(hash_entry["algo"].toInt(1)); if (hash_types.contains(hash_algo)) { file.hash = Json::requireString(hash_entry, "value"); file.hash_type = hash_algo; @@ -168,9 +168,9 @@ auto FlameMod::loadIndexedPackVersion(QJsonObject& obj, bool load_changelog) -> } } - auto dependencies = Json::ensureArray(obj, "dependencies"); + auto dependencies = obj["dependencies"].toArray(); for (auto d : dependencies) { - auto dep = Json::ensureObject(d); + auto dep = d.toObject(); ModPlatform::Dependency dependency; dependency.addonId = Json::requireInteger(dep, "modId"); switch (Json::requireInteger(dep, "relationType")) { diff --git a/launcher/modplatform/flame/FlamePackExportTask.cpp b/launcher/modplatform/flame/FlamePackExportTask.cpp index 900fd1a87..98a61d0d1 100644 --- a/launcher/modplatform/flame/FlamePackExportTask.cpp +++ b/launcher/modplatform/flame/FlamePackExportTask.cpp @@ -199,8 +199,8 @@ void FlamePackExportTask::makeApiRequest() return; } for (auto match : dataArr) { - auto matchObj = Json::ensureObject(match, {}); - auto fileObj = Json::ensureObject(matchObj, "file", {}); + auto matchObj = match.toObject(); + auto fileObj = matchObj["file"].toObject(); if (matchObj.isEmpty() || fileObj.isEmpty()) { qWarning() << "Fingerprint match is empty!"; @@ -208,7 +208,7 @@ void FlamePackExportTask::makeApiRequest() return; } - auto fingerprint = QString::number(Json::ensureVariant(fileObj, "fileFingerprint").toUInt()); + auto fingerprint = QString::number(fileObj["fileFingerprint"].toInteger()); auto mod = pendingHashes.find(fingerprint); if (mod == pendingHashes.end()) { qWarning() << "Invalid fingerprint from the API response."; @@ -216,7 +216,7 @@ void FlamePackExportTask::makeApiRequest() } setStatus(tr("Parsing API response from CurseForge for '%1'...").arg(mod->name)); - if (Json::ensureBoolean(fileObj, "isAvailable", false, "isAvailable")) + if (fileObj["isAvailable"].toBool()) resolvedFiles.insert(mod->path, { Json::requireInteger(fileObj, "modId"), Json::requireInteger(fileObj, "id"), mod->enabled, mod->isMod }); } @@ -429,4 +429,4 @@ QByteArray FlamePackExportTask::generateHTML() } content = "
    " + content + "
"; return content.toUtf8(); -} \ No newline at end of file +} diff --git a/launcher/modplatform/flame/PackManifest.cpp b/launcher/modplatform/flame/PackManifest.cpp index 641fb5d9a..dc176d770 100644 --- a/launcher/modplatform/flame/PackManifest.cpp +++ b/launcher/modplatform/flame/PackManifest.cpp @@ -5,13 +5,13 @@ static void loadFileV1(Flame::File& f, QJsonObject& file) { f.projectId = Json::requireInteger(file, "projectID"); f.fileId = Json::requireInteger(file, "fileID"); - f.required = Json::ensureBoolean(file, QString("required"), true); + f.required = file["required"].toBool(true); } static void loadModloaderV1(Flame::Modloader& m, QJsonObject& modLoader) { m.id = Json::requireString(modLoader, "id"); - m.primary = Json::ensureBoolean(modLoader, QString("primary"), false); + m.primary = modLoader["primary"].toBool(); } static void loadMinecraftV1(Flame::Minecraft& m, QJsonObject& minecraft) @@ -19,15 +19,15 @@ static void loadMinecraftV1(Flame::Minecraft& m, QJsonObject& minecraft) m.version = Json::requireString(minecraft, "version"); // extra libraries... apparently only used for a custom Minecraft launcher in the 1.2.5 FTB retro pack // intended use is likely hardcoded in the 'Flame' client, the manifest says nothing - m.libraries = Json::ensureString(minecraft, QString("libraries"), QString()); - auto arr = Json::ensureArray(minecraft, "modLoaders", QJsonArray()); + m.libraries = minecraft["libraries"].toString(); + auto arr = minecraft["modLoaders"].toArray(); for (QJsonValueRef item : arr) { auto obj = Json::requireObject(item); Flame::Modloader loader; loadModloaderV1(loader, obj); m.modLoaders.append(loader); } - m.recommendedRAM = Json::ensureInteger(minecraft, "recommendedRam", 0); + m.recommendedRAM = minecraft["recommendedRam"].toInt(); } static void loadManifestV1(Flame::Manifest& pack, QJsonObject& manifest) @@ -36,11 +36,11 @@ static void loadManifestV1(Flame::Manifest& pack, QJsonObject& manifest) loadMinecraftV1(pack.minecraft, mc); - pack.name = Json::ensureString(manifest, QString("name"), "Unnamed"); - pack.version = Json::ensureString(manifest, QString("version"), QString()); - pack.author = Json::ensureString(manifest, QString("author"), "Anonymous"); + pack.name = manifest["name"].toString("Unnamed"); + pack.version = manifest["version"].toString(); + pack.author = manifest["author"].toString("Anonymous"); - auto arr = Json::ensureArray(manifest, "files", QJsonArray()); + auto arr = manifest["files"].toArray(); for (auto item : arr) { auto obj = Json::requireObject(item); @@ -50,7 +50,7 @@ static void loadManifestV1(Flame::Manifest& pack, QJsonObject& manifest) pack.files.insert(file.fileId, file); } - pack.overrides = Json::ensureString(manifest, "overrides", "overrides"); + pack.overrides = manifest["overrides"].toString("overrides"); pack.is_loaded = true; } diff --git a/launcher/modplatform/import_ftb/PackHelpers.cpp b/launcher/modplatform/import_ftb/PackHelpers.cpp index 22d1242e9..78f7e4ba6 100644 --- a/launcher/modplatform/import_ftb/PackHelpers.cpp +++ b/launcher/modplatform/import_ftb/PackHelpers.cpp @@ -72,7 +72,7 @@ Modpack parseDirectory(QString path) modpack.name = Json::requireString(root, "name", "name"); modpack.version = Json::requireString(root, "version", "version"); modpack.mcVersion = Json::requireString(root, "mcVersion", "mcVersion"); - modpack.jvmArgs = Json::ensureVariant(root, "jvmArgs", {}, "jvmArgs"); + modpack.jvmArgs = root["jvmArgs"].toVariant(); modpack.totalPlayTime = Json::requireInteger(root, "totalPlayTime", "totalPlayTime"); } catch (const Exception& e) { qDebug() << "Couldn't load ftb instance json: " << e.cause(); diff --git a/launcher/modplatform/modrinth/ModrinthAPI.cpp b/launcher/modplatform/modrinth/ModrinthAPI.cpp index bdef1a0e5..f82d75a8b 100644 --- a/launcher/modplatform/modrinth/ModrinthAPI.cpp +++ b/launcher/modplatform/modrinth/ModrinthAPI.cpp @@ -147,7 +147,7 @@ QList ModrinthAPI::loadCategories(std::shared_ptr(obj, "files", "modrinth.index.json"); @@ -381,10 +381,10 @@ bool ModrinthCreationTask::parseManifest(const QString& index_path, File file; file.path = Json::requireString(modInfo, "path").replace("\\", "/"); - auto env = Json::ensureObject(modInfo, "env"); + auto env = modInfo["env"].toObject(); // 'env' field is optional if (!env.isEmpty()) { - QString support = Json::ensureString(env, "client", "unsupported"); + QString support = env["client"].toString("unsupported"); if (support == "unsupported") { continue; } else if (support == "optional") { @@ -399,7 +399,7 @@ bool ModrinthCreationTask::parseManifest(const QString& index_path, // Do not use requireUrl, which uses StrictMode, instead use QUrl's default TolerantMode // (as Modrinth seems to incorrectly handle spaces) - auto download_arr = Json::ensureArray(modInfo, "downloads"); + auto download_arr = modInfo["downloads"].toArray(); for (auto download : download_arr) { qWarning() << download.toString(); bool is_last = download.toString() == download_arr.last().toString(); diff --git a/launcher/modplatform/modrinth/ModrinthPackIndex.cpp b/launcher/modplatform/modrinth/ModrinthPackIndex.cpp index 702a8f309..a0dedd8f5 100644 --- a/launcher/modplatform/modrinth/ModrinthPackIndex.cpp +++ b/launcher/modplatform/modrinth/ModrinthPackIndex.cpp @@ -36,31 +36,31 @@ bool shouldDownloadOnSide(QString side) // https://docs.modrinth.com/api-spec/#tag/projects/operation/getProject void Modrinth::loadIndexedPack(ModPlatform::IndexedPack& pack, QJsonObject& obj) { - pack.addonId = Json::ensureString(obj, "project_id"); + pack.addonId = obj["project_id"].toString(); if (pack.addonId.toString().isEmpty()) pack.addonId = Json::requireString(obj, "id"); pack.provider = ModPlatform::ResourceProvider::MODRINTH; pack.name = Json::requireString(obj, "title"); - pack.slug = Json::ensureString(obj, "slug", ""); + pack.slug = obj["slug"].toString(""); if (!pack.slug.isEmpty()) pack.websiteUrl = "https://modrinth.com/mod/" + pack.slug; else pack.websiteUrl = ""; - pack.description = Json::ensureString(obj, "description", ""); + pack.description = obj["description"].toString(""); - pack.logoUrl = Json::ensureString(obj, "icon_url", ""); - pack.logoName = QString("%1.%2").arg(Json::ensureString(obj, "slug"), QFileInfo(QUrl(pack.logoUrl).fileName()).suffix()); + pack.logoUrl = obj["icon_url"].toString(""); + pack.logoName = QString("%1.%2").arg(obj["slug"].toString()), QFileInfo(QUrl(pack.logoUrl).fileName()).suffix(); ModPlatform::ModpackAuthor modAuthor; - modAuthor.name = Json::ensureString(obj, "author", QObject::tr("No author(s)")); + modAuthor.name = obj["author"].toString(QObject::tr("No author(s)")); modAuthor.url = api.getAuthorURL(modAuthor.name); pack.authors.append(modAuthor); - auto client = shouldDownloadOnSide(Json::ensureString(obj, "client_side")); - auto server = shouldDownloadOnSide(Json::ensureString(obj, "server_side")); + auto client = shouldDownloadOnSide(obj["client_side"].toString()); + auto server = shouldDownloadOnSide(obj["server_side"].toString()); if (server && client) { pack.side = ModPlatform::Side::UniversalSide; @@ -76,38 +76,38 @@ void Modrinth::loadIndexedPack(ModPlatform::IndexedPack& pack, QJsonObject& obj) void Modrinth::loadExtraPackData(ModPlatform::IndexedPack& pack, QJsonObject& obj) { - pack.extraData.issuesUrl = Json::ensureString(obj, "issues_url"); + pack.extraData.issuesUrl = obj["issues_url"].toString(); if (pack.extraData.issuesUrl.endsWith('/')) pack.extraData.issuesUrl.chop(1); - pack.extraData.sourceUrl = Json::ensureString(obj, "source_url"); + pack.extraData.sourceUrl = obj["source_url"].toString(); if (pack.extraData.sourceUrl.endsWith('/')) pack.extraData.sourceUrl.chop(1); - pack.extraData.wikiUrl = Json::ensureString(obj, "wiki_url"); + pack.extraData.wikiUrl = obj["wiki_url"].toString(); if (pack.extraData.wikiUrl.endsWith('/')) pack.extraData.wikiUrl.chop(1); - pack.extraData.discordUrl = Json::ensureString(obj, "discord_url"); + pack.extraData.discordUrl = obj["discord_url"].toString(); if (pack.extraData.discordUrl.endsWith('/')) pack.extraData.discordUrl.chop(1); - auto donate_arr = Json::ensureArray(obj, "donation_urls"); + auto donate_arr = obj["donation_urls"].toArray(); for (auto d : donate_arr) { auto d_obj = Json::requireObject(d); ModPlatform::DonationData donate; - donate.id = Json::ensureString(d_obj, "id"); - donate.platform = Json::ensureString(d_obj, "platform"); - donate.url = Json::ensureString(d_obj, "url"); + donate.id = d_obj["id"].toString(); + donate.platform = d_obj["platform"].toString(); + donate.url = d_obj["url"].toString(); pack.extraData.donate.append(donate); } - pack.extraData.status = Json::ensureString(obj, "status"); + pack.extraData.status = obj["status"].toString(); - pack.extraData.body = Json::ensureString(obj, "body").remove("
"); + pack.extraData.body = obj["body"].toString().remove("
"); pack.extraDataLoaded = true; } @@ -147,12 +147,12 @@ ModPlatform::IndexedVersion Modrinth::loadIndexedPackVersion(QJsonObject& obj, Q file.changelog = Json::requireString(obj, "changelog"); - auto dependencies = Json::ensureArray(obj, "dependencies"); + auto dependencies = obj["dependencies"].toArray(); for (auto d : dependencies) { - auto dep = Json::ensureObject(d); + auto dep = d.toObject(); ModPlatform::Dependency dependency; - dependency.addonId = Json::ensureString(dep, "project_id"); - dependency.version = Json::ensureString(dep, "version_id"); + dependency.addonId = dep["project_id"].toString(); + dependency.version = dep["version_id"].toString(); auto depType = Json::requireString(dep, "dependency_type"); if (depType == "required") diff --git a/launcher/modplatform/technic/SolderPackManifest.cpp b/launcher/modplatform/technic/SolderPackManifest.cpp index 38b668f6b..4b9701e7d 100644 --- a/launcher/modplatform/technic/SolderPackManifest.cpp +++ b/launcher/modplatform/technic/SolderPackManifest.cpp @@ -37,7 +37,7 @@ void loadPack(Pack& v, QJsonObject& obj) static void loadPackBuildMod(PackBuildMod& b, QJsonObject& obj) { b.name = Json::requireString(obj, "name"); - b.version = Json::ensureString(obj, "version", ""); + b.version = obj["version"].toString(""); b.md5 = Json::requireString(obj, "md5"); b.url = Json::requireString(obj, "url"); } diff --git a/launcher/modplatform/technic/TechnicPackProcessor.cpp b/launcher/modplatform/technic/TechnicPackProcessor.cpp index 9050e14d8..b762e8882 100644 --- a/launcher/modplatform/technic/TechnicPackProcessor.cpp +++ b/launcher/modplatform/technic/TechnicPackProcessor.cpp @@ -142,7 +142,7 @@ void Technic::TechnicPackProcessor::run(SettingsObjectPtr globalSettings, try { QJsonDocument doc = Json::requireDocument(data); QJsonObject root = Json::requireObject(doc, "version.json"); - QString packMinecraftVersion = Json::ensureString(root, "inheritsFrom", QString(), ""); + QString packMinecraftVersion = root["inheritsFrom"].toString(); if (packMinecraftVersion.isEmpty()) { if (fmlMinecraftVersion.isEmpty()) { emit failed(tr("Could not understand \"version.json\":\ninheritsFrom is missing")); @@ -151,21 +151,21 @@ void Technic::TechnicPackProcessor::run(SettingsObjectPtr globalSettings, packMinecraftVersion = fmlMinecraftVersion; } components->setComponentVersion("net.minecraft", packMinecraftVersion, true); - for (auto library : Json::ensureArray(root, "libraries", {})) { + for (auto library : root["libraries"].toArray()) { if (!library.isObject()) { continue; } - auto libraryObject = Json::ensureObject(library, {}, ""); - auto libraryName = Json::ensureString(libraryObject, "name", "", ""); + auto libraryObject = library.toObject(); + auto libraryName = libraryObject["name"].toString(); if (libraryName.startsWith("net.neoforged.fancymodloader:")) { // it is neoforge // no easy way to get the version from the libs so use the arguments - auto arguments = Json::ensureObject(root, "arguments", {}); + auto arguments = root["arguments"].toObject(); bool isVersionArg = false; QString neoforgeVersion; - for (auto arg : Json::ensureArray(arguments, "game", {})) { - auto argument = Json::ensureString(arg, ""); + for (auto arg : arguments["game"].toArray()) { + auto argument = arg.toString(""); if (isVersionArg) { neoforgeVersion = argument; break; diff --git a/launcher/net/HttpMetaCache.cpp b/launcher/net/HttpMetaCache.cpp index b0b3b6533..d2d16fdc9 100644 --- a/launcher/net/HttpMetaCache.cpp +++ b/launcher/net/HttpMetaCache.cpp @@ -248,15 +248,15 @@ void HttpMetaCache::Load() auto root = json.object(); // check file version first - auto version_val = Json::ensureString(root, "version"); + auto version_val = root["version"].toString(); if (version_val != "1") return; // read the entry array - auto array = Json::ensureArray(root, "entries"); + auto array = root["entries"].toArray(); for (auto element : array) { - auto element_obj = Json::ensureObject(element); - auto base = Json::ensureString(element_obj, "base"); + auto element_obj = element.toObject(); + auto base = element_obj["base"].toString(); if (!m_entries.contains(base)) continue; @@ -264,16 +264,16 @@ void HttpMetaCache::Load() auto foo = new MetaEntry(); foo->m_baseId = base; - foo->m_relativePath = Json::ensureString(element_obj, "path"); - foo->m_md5sum = Json::ensureString(element_obj, "md5sum"); - foo->m_etag = Json::ensureString(element_obj, "etag"); - foo->m_local_changed_timestamp = Json::ensureDouble(element_obj, "last_changed_timestamp"); - foo->m_remote_changed_timestamp = Json::ensureString(element_obj, "remote_changed_timestamp"); + foo->m_relativePath = element_obj["path"].toString(); + foo->m_md5sum = element_obj["md5sum"].toString(); + foo->m_etag = element_obj["etag"].toString(); + foo->m_local_changed_timestamp = element_obj["last_changed_timestamp"].toDouble(); + foo->m_remote_changed_timestamp = element_obj["remote_changed_timestamp"].toString(); - foo->makeEternal(Json::ensureBoolean(element_obj, (const QString)QStringLiteral("eternal"), false)); + foo->makeEternal(element_obj[QStringLiteral("eternal")].toBool(false)); if (!foo->isEternal()) { - foo->m_current_age = Json::ensureDouble(element_obj, "current_age"); - foo->m_max_age = Json::ensureDouble(element_obj, "max_age"); + foo->m_current_age = element_obj["current_age"].toDouble(); + foo->m_max_age = element_obj["max_age"].toDouble(); } // presumed innocent until closer examination diff --git a/launcher/translations/TranslationsModel.cpp b/launcher/translations/TranslationsModel.cpp index 860e57e54..6d5609077 100644 --- a/launcher/translations/TranslationsModel.cpp +++ b/launcher/translations/TranslationsModel.cpp @@ -251,8 +251,8 @@ void readIndex(const QString& path, QMap& languages) Language lang(iter.key()); auto langObj = Json::requireObject(iter.value()); - lang.setTranslationStats(Json::ensureInteger(langObj, "translated", 0), Json::ensureInteger(langObj, "untranslated", 0), - Json::ensureInteger(langObj, "fuzzy", 0)); + lang.setTranslationStats(langObj["translated"].toInt(), langObj["untranslated"].toInt(), + langObj["fuzzy"].toInt()); lang.file_name = Json::requireString(langObj, "file"); lang.file_sha1 = Json::requireString(langObj, "sha1"); lang.file_size = Json::requireInteger(langObj, "size"); diff --git a/launcher/ui/MainWindow.cpp b/launcher/ui/MainWindow.cpp index 3cec0ae53..77a480e70 100644 --- a/launcher/ui/MainWindow.cpp +++ b/launcher/ui/MainWindow.cpp @@ -967,7 +967,7 @@ void MainWindow::processURLs(QList urls) connect(job.get(), &Task::succeeded, this, [this, array, addonId, fileId, &dl_url, &version] { qDebug() << "Returned CFURL Json:\n" << array->toStdString().c_str(); auto doc = Json::requireDocument(*array); - auto data = Json::ensureObject(Json::ensureObject(doc.object()), "data"); + auto data = doc.object()["data"].toObject(); // No way to find out if it's a mod or a modpack before here // And also we need to check if it ends with .zip, instead of any better way version = FlameMod::loadIndexedPackVersion(data); diff --git a/launcher/ui/dialogs/skins/SkinManageDialog.cpp b/launcher/ui/dialogs/skins/SkinManageDialog.cpp index 5967281c4..cecde236a 100644 --- a/launcher/ui/dialogs/skins/SkinManageDialog.cpp +++ b/launcher/ui/dialogs/skins/SkinManageDialog.cpp @@ -481,7 +481,7 @@ void SkinManageDialog::on_userBtn_clicked() return; } const auto root = doc.object(); - auto id = Json::ensureString(root, "id"); + auto id = root["id"].toString(); if (!id.isEmpty()) { getProfile->setUrl("https://sessionserver.mojang.com/session/minecraft/profile/" + id); } else { diff --git a/launcher/ui/pages/modplatform/ImportPage.cpp b/launcher/ui/pages/modplatform/ImportPage.cpp index 1efc6199e..c43d3e1fa 100644 --- a/launcher/ui/pages/modplatform/ImportPage.cpp +++ b/launcher/ui/pages/modplatform/ImportPage.cpp @@ -141,13 +141,13 @@ void ImportPage::updateState() connect(job.get(), &NetJob::succeeded, this, [this, array, addonId, fileId] { qDebug() << "Returned CFURL Json:\n" << array->toStdString().c_str(); auto doc = Json::requireDocument(*array); - auto data = Json::ensureObject(Json::ensureObject(doc.object()), "data"); + auto data = doc.object()["data"].toObject(); // No way to find out if it's a mod or a modpack before here // And also we need to check if it ends with .zip, instead of any better way - auto fileName = Json::ensureString(data, "fileName"); + auto fileName = data["fileName"].toString(); if (fileName.endsWith(".zip")) { // Have to use ensureString then use QUrl to get proper url encoding - auto dl_url = QUrl(Json::ensureString(data, "downloadUrl", "", "downloadUrl")); + auto dl_url = QUrl(data["downloadUrl"].toString("")); if (!dl_url.isValid()) { CustomMessageBox::selectable( this, tr("Error"), @@ -158,7 +158,7 @@ void ImportPage::updateState() } QFileInfo dl_file(dl_url.fileName()); - QString pack_name = Json::ensureString(data, "displayName", dl_file.completeBaseName(), "displayName"); + QString pack_name = data["displayName"].toString(dl_file.completeBaseName()); QMap extra_info; extra_info.insert("pack_id", addonId); diff --git a/launcher/ui/pages/modplatform/technic/TechnicModel.cpp b/launcher/ui/pages/modplatform/technic/TechnicModel.cpp index 62bad833b..4fc50ab8d 100644 --- a/launcher/ui/pages/modplatform/technic/TechnicModel.cpp +++ b/launcher/ui/pages/modplatform/technic/TechnicModel.cpp @@ -191,7 +191,7 @@ void Technic::ListModel::searchRequestFinished() if (pack.slug == "vanilla") continue; - auto rawURL = Json::ensureString(technicPackObject, "iconUrl", "null"); + auto rawURL = technicPackObject["iconUrl"].toString("null"); if (rawURL == "null") { pack.logoUrl = "null"; pack.logoName = "null"; diff --git a/launcher/ui/pages/modplatform/technic/TechnicPage.cpp b/launcher/ui/pages/modplatform/technic/TechnicPage.cpp index 7d999b31e..fef665149 100644 --- a/launcher/ui/pages/modplatform/technic/TechnicPage.cpp +++ b/launcher/ui/pages/modplatform/technic/TechnicPage.cpp @@ -202,11 +202,11 @@ void TechnicPage::suggestCurrent() } } - current.minecraftVersion = Json::ensureString(obj, "minecraft", QString(), "__placeholder__"); - current.websiteUrl = Json::ensureString(obj, "platformUrl", QString(), "__placeholder__"); - current.author = Json::ensureString(obj, "user", QString(), "__placeholder__"); - current.description = Json::ensureString(obj, "description", QString(), "__placeholder__"); - current.currentVersion = Json::ensureString(obj, "version", QString(), "__placeholder__"); + current.minecraftVersion = obj["minecraft"].toString(); + current.websiteUrl = obj["platformUrl"].toString(); + current.author = obj["user"].toString(); + current.description = obj["description"].toString(); + current.currentVersion = obj["version"].toString(); current.metadataLoaded = true; metadataLoaded(); diff --git a/launcher/ui/themes/CatPack.cpp b/launcher/ui/themes/CatPack.cpp index 416b86139..7d39c8c05 100644 --- a/launcher/ui/themes/CatPack.cpp +++ b/launcher/ui/themes/CatPack.cpp @@ -63,12 +63,12 @@ QString BasicCatPack::path() const JsonCatPack::PartialDate partialDate(QJsonObject date) { - auto month = Json::ensureInteger(date, "month", 1); + auto month = date["month"].toInt(1); if (month > 12) month = 12; else if (month <= 0) month = 1; - auto day = Json::ensureInteger(date, "day", 1); + auto day = date["day"].toInt(1); if (day > 31) day = 31; else if (day <= 0) @@ -83,9 +83,9 @@ JsonCatPack::JsonCatPack(QFileInfo& manifestInfo) : BasicCatPack(manifestInfo.di const auto root = doc.object(); m_name = Json::requireString(root, "name", "Catpack name"); m_default_path = FS::PathCombine(path, Json::requireString(root, "default", "Default Cat")); - auto variants = Json::ensureArray(root, "variants", QJsonArray(), "Catpack Variants"); + auto variants = root["variants"].toArray(); for (auto v : variants) { - auto variant = Json::ensureObject(v, QJsonObject(), "Cat variant"); + auto variant = v.toObject(); m_variants << Variant{ FS::PathCombine(path, Json::requireString(variant, "path", "Variant path")), partialDate(Json::requireObject(variant, "startTime", "Variant startTime")), partialDate(Json::requireObject(variant, "endTime", "Variant endTime")) }; diff --git a/launcher/ui/themes/CustomTheme.cpp b/launcher/ui/themes/CustomTheme.cpp index b8c5738b7..560d0ece8 100644 --- a/launcher/ui/themes/CustomTheme.cpp +++ b/launcher/ui/themes/CustomTheme.cpp @@ -179,10 +179,10 @@ bool CustomTheme::read(const QString& path, bool& hasCustomLogColors) const QJsonObject root = doc.object(); m_name = Json::requireString(root, "name", "Theme name"); m_widgets = Json::requireString(root, "widgets", "Qt widget theme"); - m_qssFilePath = Json::ensureString(root, "qssFilePath", "themeStyle.css"); + m_qssFilePath = root["qssFilePath"].toString("themeStyle.css"); auto readColor = [](const QJsonObject& colors, const QString& colorName) -> QColor { - auto colorValue = Json::ensureString(colors, colorName, QString()); + auto colorValue = colors[colorName].toString(); if (!colorValue.isEmpty()) { QColor color(colorValue); if (!color.isValid()) { @@ -222,7 +222,7 @@ bool CustomTheme::read(const QString& path, bool& hasCustomLogColors) // fade m_fadeColor = readColor(colorsRoot, "fadeColor"); - m_fadeAmount = Json::ensureDouble(colorsRoot, "fadeAmount", 0.5, "fade amount"); + m_fadeAmount = colorsRoot["fadeAmount"].toDouble(0.5); } if (root.contains("logColors")) { diff --git a/launcher/updater/prismupdater/PrismUpdater.cpp b/launcher/updater/prismupdater/PrismUpdater.cpp index 815924d52..61c94046c 100644 --- a/launcher/updater/prismupdater/PrismUpdater.cpp +++ b/launcher/updater/prismupdater/PrismUpdater.cpp @@ -1239,13 +1239,13 @@ int PrismUpdaterApp::parseReleasePage(const QByteArray* response) GitHubRelease release = {}; release.id = Json::requireInteger(release_obj, "id"); - release.name = Json::ensureString(release_obj, "name"); + release.name = release_obj["name"].toString(); release.tag_name = Json::requireString(release_obj, "tag_name"); release.created_at = QDateTime::fromString(Json::requireString(release_obj, "created_at"), Qt::ISODate); - release.published_at = QDateTime::fromString(Json::ensureString(release_obj, "published_at"), Qt::ISODate); + release.published_at = QDateTime::fromString(release_obj["published_at"].toString(), Qt::ISODate); release.draft = Json::requireBoolean(release_obj, "draft"); release.prerelease = Json::requireBoolean(release_obj, "prerelease"); - release.body = Json::ensureString(release_obj, "body"); + release.body = release_obj["body"].toString(); release.version = Version(release.tag_name); auto release_assets_obj = Json::requireArray(release_obj, "assets"); @@ -1254,7 +1254,7 @@ int PrismUpdaterApp::parseReleasePage(const QByteArray* response) GitHubReleaseAsset asset = {}; asset.id = Json::requireInteger(asset_obj, "id"); asset.name = Json::requireString(asset_obj, "name"); - asset.label = Json::ensureString(asset_obj, "label"); + asset.label = asset_obj["label"].toString(); asset.content_type = Json::requireString(asset_obj, "content_type"); asset.size = Json::requireInteger(asset_obj, "size"); asset.created_at = QDateTime::fromString(Json::requireString(asset_obj, "created_at"), Qt::ISODate);