sneedmc/launcher/modplatform/flame/FileResolvingTask.cpp

50 lines
1.7 KiB
C++
Raw Normal View History

#include "FileResolvingTask.h"
#include "Json.h"
Flame::FileResolvingTask::FileResolvingTask(shared_qobject_ptr<QNetworkAccessManager> network, Flame::Manifest& toProcess)
: m_network(network), m_toProcess(toProcess)
2022-05-08 07:22:50 +00:00
{}
2017-04-22 16:51:04 +00:00
void Flame::FileResolvingTask::executeTask()
{
2018-07-15 12:51:05 +00:00
setStatus(tr("Resolving mod IDs..."));
setProgress(0, m_toProcess.files.size());
m_dljob = new NetJob("Mod id resolver", m_network);
2018-07-15 12:51:05 +00:00
results.resize(m_toProcess.files.size());
int index = 0;
2022-05-08 07:22:50 +00:00
for (auto& file : m_toProcess.files) {
2018-07-15 12:51:05 +00:00
auto projectIdStr = QString::number(file.projectId);
auto fileIdStr = QString::number(file.fileId);
2022-05-08 07:22:50 +00:00
QString metaurl = QString("https://api.curseforge.com/v1/mods/%1/files/%2").arg(projectIdStr, fileIdStr);
2018-07-15 12:51:05 +00:00
auto dl = Net::Download::makeByteArray(QUrl(metaurl), &results[index]);
m_dljob->addNetAction(dl);
2022-05-08 07:22:50 +00:00
index++;
2018-07-15 12:51:05 +00:00
}
connect(m_dljob.get(), &NetJob::finished, this, &Flame::FileResolvingTask::netJobFinished);
m_dljob->start();
}
2017-04-22 16:51:04 +00:00
void Flame::FileResolvingTask::netJobFinished()
{
2018-07-15 12:51:05 +00:00
bool failed = false;
int index = 0;
2022-05-08 07:22:50 +00:00
for (auto& bytes : results) {
auto& out = m_toProcess.files[index];
try {
failed &= (!out.parseFromBytes(bytes));
2022-05-08 07:22:50 +00:00
} catch (const JSONValidationError& e) {
2018-07-15 12:51:05 +00:00
qCritical() << "Resolving of" << out.projectId << out.fileId << "failed because of a parsing error:";
qCritical() << e.cause();
qCritical() << "JSON:";
qCritical() << bytes;
failed = true;
}
index++;
}
2022-05-08 07:22:50 +00:00
if (!failed) {
2018-07-15 12:51:05 +00:00
emitSucceeded();
2022-05-08 07:22:50 +00:00
} else {
2018-07-15 12:51:05 +00:00
emitFailed(tr("Some mod ID resolving tasks failed."));
}
}