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