Very Temporary Fix for curseforge

This commit is contained in:
timoreo
2022-05-20 21:19:19 +02:00
parent 1e6df7eec0
commit 6afe59e76b
3 changed files with 118 additions and 93 deletions

View File

@ -31,7 +31,21 @@ void Flame::FileResolvingTask::netJobFinished()
for (auto& bytes : results) {
auto& out = m_toProcess.files[index];
try {
failed &= (!out.parseFromBytes(bytes));
bool fail = (!out.parseFromBytes(bytes));
if(fail){
//failed :( probably disabled mod, try to add to the list
auto doc = Json::requireDocument(bytes);
if (!doc.isObject()) {
throw JSONValidationError(QString("data is not an object? that's not supposed to happen"));
}
auto obj = Json::ensureObject(doc.object(), "data");
//FIXME : HACK, MAY NOT WORK FOR LONG
out.url = QUrl(QString("https://media.forgecdn.net/files/%1/%2/%3")
.arg(QString::number(QString::number(out.fileId).leftRef(4).toInt())
,QString::number(QString::number(out.fileId).rightRef(3).toInt())
,QUrl::toPercentEncoding(out.fileName)), QUrl::TolerantMode);
}
failed &= fail;
} catch (const JSONValidationError& e) {
qCritical() << "Resolving of" << out.projectId << out.fileId << "failed because of a parsing error:";
qCritical() << e.cause();

View File

@ -71,11 +71,6 @@ bool Flame::File::parseFromBytes(const QByteArray& bytes)
fileName = Json::requireString(obj, "fileName");
QString rawUrl = Json::requireString(obj, "downloadUrl");
url = QUrl(rawUrl, QUrl::TolerantMode);
if (!url.isValid()) {
throw JSONValidationError(QString("Invalid URL: %1").arg(rawUrl));
}
// This is a piece of a Flame project JSON pulled out into the file metadata (here) for convenience
// It is also optional
type = File::Type::SingleFile;
@ -87,7 +82,16 @@ bool Flame::File::parseFromBytes(const QByteArray& bytes)
// this is probably a mod, dunno what else could modpacks download
targetFolder = "mods";
}
if(!obj.contains("downloadUrl") || obj["downloadUrl"].isNull() || !obj["downloadUrl"].isString() || obj["downloadUrl"].toString().isEmpty()){
//either there somehow is an emtpy string as a link, or it's null either way it's invalid
//soft failing
return false;
}
QString rawUrl = Json::requireString(obj, "downloadUrl");
url = QUrl(rawUrl, QUrl::TolerantMode);
if (!url.isValid()) {
throw JSONValidationError(QString("Invalid URL: %1").arg(rawUrl));
}
resolved = true;
return true;
}