Remove ensure JSON helpers

Signed-off-by: TheKodeToad <TheKodeToad@proton.me>
This commit is contained in:
TheKodeToad
2025-11-09 18:30:07 +00:00
parent 7e8cf628e8
commit e42c9d2a1d
38 changed files with 228 additions and 239 deletions

View File

@@ -153,7 +153,7 @@ QJsonValue toJson<QVariant>(const QVariant& variant)
template <>
QByteArray requireIsType<QByteArray>(const QJsonValue& value, const QString& what)
{
const QString string = ensureIsType<QString>(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<QDateTime>(const QJsonValue& value, const QString& what)
template <>
QUrl requireIsType<QUrl>(const QJsonValue& value, const QString& what)
{
const QString string = ensureIsType<QString>(value, what);
const QString string = value.toString(what);
if (string.isEmpty()) {
return QUrl();
}

View File

@@ -248,19 +248,10 @@ QList<T> ensureIsArrayOf(const QJsonObject& parent,
{ \
return requireIsType<TYPE>(value, what); \
} \
inline TYPE ensure##NAME(const QJsonValue& value, const TYPE default_ = TYPE(), const QString& what = "Value") \
{ \
return ensureIsType<TYPE>(value, default_, what); \
} \
inline TYPE require##NAME(const QJsonObject& parent, const QString& key, const QString& what = "__placeholder__") \
{ \
return requireIsType<TYPE>(parent, key, what); \
} \
inline TYPE ensure##NAME(const QJsonObject& parent, const QString& key, const TYPE default_ = TYPE(), \
const QString& what = "__placeholder") \
{ \
return ensureIsType<TYPE>(parent, key, default_, what); \
}
JSON_HELPERFUNCTIONS(Array, QJsonArray)
JSON_HELPERFUNCTIONS(Object, QJsonObject)

View File

@@ -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;

View File

@@ -52,27 +52,27 @@ MetadataPtr parseJavaMeta(const QJsonObject& in)
{
auto meta = std::make_shared<Metadata>();
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;

View File

@@ -77,27 +77,27 @@ void ManifestDownloadTask::downloadJava(const QJsonDocument& doc)
// valid json doc, begin making jre spot
FS::ensureFolderPathExists(m_final_path);
std::vector<File> 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
} // namespace Java

View File

@@ -40,8 +40,8 @@ static std::shared_ptr<Index> 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<VersionList>(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<Index>(lists);
@@ -52,14 +52,14 @@ static Version::Ptr parseCommonVersion(const QString& uid, const QJsonObject& ob
{
Version::Ptr version = std::make_shared<Version>(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<VersionList>(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++;
}

View File

@@ -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()));
}
}

View File

@@ -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<Component>(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;
}

View File

@@ -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() };
}

View File

@@ -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("<u>%1</u>").arg(result);
}
@@ -234,14 +234,14 @@ QString processComponent(const QJsonObject& obj, bool strikethrough, bool underl
result = QString("<s>%1</s>").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("<span %1>%2</span>").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("<a href=\"%1\">%2</a>").arg(value, result);
}
@@ -366,4 +366,4 @@ void LocalDataPackParseTask::executeTask()
}
emitSucceeded();
}
}

View File

@@ -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"));

View File

@@ -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;
}

View File

@@ -21,7 +21,6 @@
#include <QPainter>
#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";

View File

@@ -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.";

View File

@@ -97,7 +97,7 @@ Task::Ptr ResourceAPI::getProjectVersions(VersionSearchArgs&& args, Callback<QVe
QVector<ModPlatform::IndexedVersion> 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<ModPlatform::IndexedVersion> versions;

View File

@@ -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";

View File

@@ -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);
}

View File

@@ -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(); });

View File

@@ -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
{

View File

@@ -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")) {

View File

@@ -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 = "<ul>" + content + "</ul>";
return content.toUtf8();
}
}

View File

@@ -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;
}

View File

@@ -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();

View File

@@ -147,7 +147,7 @@ QList<ModPlatform::Category> ModrinthAPI::loadCategories(std::shared_ptr<QByteAr
for (auto val : arr) {
auto cat = Json::requireObject(val);
auto name = Json::requireString(cat, "name");
if (Json::ensureString(cat, "project_type", "") == projectType)
if (cat["project_type"].toString() == projectType)
categories.push_back({ name, name });
}

View File

@@ -371,8 +371,8 @@ bool ModrinthCreationTask::parseManifest(const QString& index_path,
if (set_internal_data) {
if (m_managed_version_id.isEmpty())
m_managed_version_id = Json::ensureString(obj, "versionId", {}, "Managed ID");
m_managed_name = Json::ensureString(obj, "name", {}, "Managed Name");
m_managed_version_id = obj["versionId"].toString();
m_managed_name = obj["name"].toString();
}
auto jsonFiles = Json::requireIsArrayOf<QJsonObject>(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();

View File

@@ -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("<br>");
pack.extraData.body = obj["body"].toString().remove("<br>");
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")

View File

@@ -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");
}

View File

@@ -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;

View File

@@ -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

View File

@@ -251,8 +251,8 @@ void readIndex(const QString& path, QMap<QString, Language>& 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");

View File

@@ -967,7 +967,7 @@ void MainWindow::processURLs(QList<QUrl> 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);

View File

@@ -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 {

View File

@@ -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<QString, QString> extra_info;
extra_info.insert("pack_id", addonId);

View File

@@ -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";

View File

@@ -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();

View File

@@ -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")) };

View File

@@ -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")) {

View File

@@ -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);