| 335 | } |
| 336 | |
| 337 | QString PackInstallTask::getVersionForLoader(QString uid) |
| 338 | { |
| 339 | if(m_version.loader.recommended || m_version.loader.latest || m_version.loader.choose) { |
| 340 | auto vlist = APPLICATION->metadataIndex()->get(uid); |
| 341 | if(!vlist) |
| 342 | { |
| 343 | emitFailed(tr("Failed to get local metadata index for %1").arg(uid)); |
| 344 | return Q_NULLPTR; |
| 345 | } |
| 346 | |
| 347 | if(!vlist->isLoaded()) { |
| 348 | vlist->load(Net::Mode::Online); |
| 349 | } |
| 350 | |
| 351 | if(m_version.loader.recommended || m_version.loader.latest) { |
| 352 | for (int i = 0; i < vlist->versions().size(); i++) { |
| 353 | auto version = vlist->versions().at(i); |
| 354 | auto reqs = version->required(); |
| 355 | |
| 356 | // filter by minecraft version, if the loader depends on a certain version. |
| 357 | // not all mod loaders depend on a given Minecraft version, so we won't do this |
| 358 | // filtering for those loaders. |
| 359 | if (m_version.loader.type != "fabric") { |
| 360 | auto iter = std::find_if(reqs.begin(), reqs.end(), [](const Meta::Require &req) { |
| 361 | return req.uid == "net.minecraft"; |
| 362 | }); |
| 363 | if (iter == reqs.end()) continue; |
| 364 | if (iter->equalsVersion != m_version.minecraft) continue; |
| 365 | } |
| 366 | |
| 367 | if (m_version.loader.recommended) { |
| 368 | // first recommended build we find, we use. |
| 369 | if (!version->isRecommended()) continue; |
| 370 | } |
| 371 | |
| 372 | return version->descriptor(); |
| 373 | } |
| 374 | |
| 375 | emitFailed(tr("Failed to find version for %1 loader").arg(m_version.loader.type)); |
| 376 | return Q_NULLPTR; |
| 377 | } |
| 378 | else if(m_version.loader.choose) { |
| 379 | // Fabric Loader doesn't depend on a given Minecraft version. |
| 380 | if (m_version.loader.type == "fabric") { |
| 381 | return m_support->chooseVersion(vlist, Q_NULLPTR); |
| 382 | } |
| 383 | |
| 384 | return m_support->chooseVersion(vlist, m_version.minecraft); |
| 385 | } |
| 386 | } |
| 387 | |
| 388 | if (m_version.loader.version == Q_NULLPTR || m_version.loader.version.isEmpty()) { |
| 389 | emitFailed(tr("No loader version set for modpack!")); |
| 390 | return Q_NULLPTR; |
| 391 | } |
| 392 | |
| 393 | return m_version.loader.version; |
| 394 | } |
nothing calls this directly
no test coverage detected