| 386 | |
| 387 | static const FlameAPI flameAPI; |
| 388 | bool ModFolderModel::installMod(QString file_path, ModPlatform::IndexedVersion& vers) |
| 389 | { |
| 390 | if (vers.addonId.isValid()) { |
| 391 | ModPlatform::IndexedPack pack{ |
| 392 | vers.addonId, |
| 393 | ModPlatform::ResourceProvider::FLAME, |
| 394 | }; |
| 395 | |
| 396 | QEventLoop loop; |
| 397 | |
| 398 | auto response = std::make_shared<QByteArray>(); |
| 399 | auto job = flameAPI.getProject(vers.addonId.toString(), response); |
| 400 | |
| 401 | QObject::connect(job.get(), &Task::failed, [&loop] { loop.quit(); }); |
| 402 | QObject::connect(job.get(), &Task::aborted, &loop, &QEventLoop::quit); |
| 403 | QObject::connect(job.get(), &Task::succeeded, [response, this, &vers, &loop, &pack] { |
| 404 | QJsonParseError parse_error{}; |
| 405 | QJsonDocument doc = QJsonDocument::fromJson(*response, &parse_error); |
| 406 | if (parse_error.error != QJsonParseError::NoError) { |
| 407 | qWarning() << "Error while parsing JSON response for mod info at " << parse_error.offset |
| 408 | << " reason: " << parse_error.errorString(); |
| 409 | qDebug() << *response; |
| 410 | return; |
| 411 | } |
| 412 | try { |
| 413 | auto obj = Json::requireObject(Json::requireObject(doc), "data"); |
| 414 | FlameMod::loadIndexedPack(pack, obj); |
| 415 | } catch (const JSONValidationError& e) { |
| 416 | qDebug() << doc; |
| 417 | qWarning() << "Error while reading mod info: " << e.cause(); |
| 418 | } |
| 419 | LocalModUpdateTask update_metadata(indexDir(), pack, vers); |
| 420 | QObject::connect(&update_metadata, &Task::finished, &loop, &QEventLoop::quit); |
| 421 | update_metadata.start(); |
| 422 | }); |
| 423 | |
| 424 | job->start(); |
| 425 | |
| 426 | loop.exec(); |
| 427 | } |
| 428 | return ResourceFolderModel::installResource(file_path); |
| 429 | } |
no test coverage detected