pollymc/launcher/modplatform/flame/FileResolvingTask.cpp

64 lines
1.8 KiB
C++
Raw Normal View History

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