| 20 | } |
| 21 | |
| 22 | ModPlatform::IndexedPack getProjectInfo(ModPlatform::IndexedVersion& ver_info) |
| 23 | { |
| 24 | ModPlatform::IndexedPack pack; |
| 25 | |
| 26 | QEventLoop loop; |
| 27 | |
| 28 | auto get_project_job = new NetJob("Flame::GetProjectJob", APPLICATION->network()); |
| 29 | |
| 30 | auto response = new QByteArray(); |
| 31 | auto url = QString("https://api.curseforge.com/v1/mods/%1").arg(ver_info.addonId.toString()); |
| 32 | auto dl = Net::Download::makeByteArray(url, response); |
| 33 | get_project_job->addNetAction(dl); |
| 34 | |
| 35 | QObject::connect(get_project_job, &NetJob::succeeded, [response, &pack]() { |
| 36 | QJsonParseError parse_error{}; |
| 37 | QJsonDocument doc = QJsonDocument::fromJson(*response, &parse_error); |
| 38 | if (parse_error.error != QJsonParseError::NoError) { |
| 39 | qWarning() << "Error while parsing JSON response from FlameCheckUpdate at " << parse_error.offset |
| 40 | << " reason: " << parse_error.errorString(); |
| 41 | qWarning() << *response; |
| 42 | return; |
| 43 | } |
| 44 | |
| 45 | try { |
| 46 | auto doc_obj = Json::requireObject(doc); |
| 47 | auto data_obj = Json::requireObject(doc_obj, "data"); |
| 48 | FlameMod::loadIndexedPack(pack, data_obj); |
| 49 | } catch (Json::JsonException& e) { |
| 50 | qWarning() << e.cause(); |
| 51 | qDebug() << doc; |
| 52 | } |
| 53 | }); |
| 54 | |
| 55 | QObject::connect(get_project_job, &NetJob::finished, [&loop, get_project_job] { |
| 56 | get_project_job->deleteLater(); |
| 57 | loop.quit(); |
| 58 | }); |
| 59 | |
| 60 | get_project_job->start(); |
| 61 | loop.exec(); |
| 62 | |
| 63 | return pack; |
| 64 | } |
| 65 | |
| 66 | ModPlatform::IndexedVersion getFileInfo(int addonId, int fileId) |
| 67 | { |
no test coverage detected