| 86 | } |
| 87 | |
| 88 | void EnsureMetadataTask::executeTask() |
| 89 | { |
| 90 | setStatus(tr("Checking if mods have metadata...")); |
| 91 | |
| 92 | for (auto* mod : m_mods) { |
| 93 | if (!mod->valid()) { |
| 94 | qDebug() << "Mod" << mod->name() << "is invalid!"; |
| 95 | emitFail(mod); |
| 96 | continue; |
| 97 | } |
| 98 | |
| 99 | // They already have the right metadata :o |
| 100 | if (mod->status() != ModStatus::NoMetadata && mod->metadata() && mod->metadata()->provider == m_provider) { |
| 101 | qDebug() << "Mod" << mod->name() << "already has metadata!"; |
| 102 | emitReady(mod); |
| 103 | continue; |
| 104 | } |
| 105 | |
| 106 | // Folders don't have metadata |
| 107 | if (mod->type() == ResourceType::FOLDER) { |
| 108 | emitReady(mod); |
| 109 | } |
| 110 | } |
| 111 | |
| 112 | Task::Ptr version_task; |
| 113 | |
| 114 | switch (m_provider) { |
| 115 | case (ModPlatform::ResourceProvider::MODRINTH): |
| 116 | version_task = modrinthVersionsTask(); |
| 117 | break; |
| 118 | case (ModPlatform::ResourceProvider::FLAME): |
| 119 | version_task = flameVersionsTask(); |
| 120 | break; |
| 121 | } |
| 122 | |
| 123 | auto invalidade_leftover = [this] { |
| 124 | for (auto mod = m_mods.constBegin(); mod != m_mods.constEnd(); mod++) |
| 125 | emitFail(mod.value(), mod.key(), RemoveFromList::No); |
| 126 | m_mods.clear(); |
| 127 | |
| 128 | emitSucceeded(); |
| 129 | }; |
| 130 | |
| 131 | connect(version_task.get(), &Task::finished, this, [this, invalidade_leftover] { |
| 132 | Task::Ptr project_task; |
| 133 | |
| 134 | switch (m_provider) { |
| 135 | case (ModPlatform::ResourceProvider::MODRINTH): |
| 136 | project_task = modrinthProjectsTask(); |
| 137 | break; |
| 138 | case (ModPlatform::ResourceProvider::FLAME): |
| 139 | project_task = flameProjectsTask(); |
| 140 | break; |
| 141 | } |
| 142 | |
| 143 | if (!project_task) { |
| 144 | invalidade_leftover(); |
| 145 | return; |