mirror of
https://github.com/PrismLauncher/PrismLauncher.git
synced 2025-12-05 01:10:12 +00:00
Remove ensure JSON helpers
Signed-off-by: TheKodeToad <TheKodeToad@proton.me>
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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++;
|
||||
}
|
||||
|
||||
@@ -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()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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() };
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"));
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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.";
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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(); });
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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")) {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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 });
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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")) };
|
||||
|
||||
@@ -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")) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user