Fix Modrinth update crashing
Signed-off-by: TheKodeToad <TheKodeToad@proton.me>
This commit is contained in:
parent
92a906e0d4
commit
8e586c883c
1 changed files with 14 additions and 20 deletions
|
@ -63,8 +63,7 @@ void ModrinthCheckUpdate::getUpdateModsForLoader(std::optional<ModPlatform::ModL
|
||||||
QStringList hashes = m_mappings.keys();
|
QStringList hashes = m_mappings.keys();
|
||||||
auto job = api.latestVersions(hashes, m_hash_type, m_game_versions, loader, response);
|
auto job = api.latestVersions(hashes, m_hash_type, m_game_versions, loader, response);
|
||||||
|
|
||||||
connect(job.get(), &Task::succeeded, this,
|
connect(job.get(), &Task::succeeded, this, [this, response, loader] { checkVersionsResponse(response, loader); });
|
||||||
[this, response, loader] { checkVersionsResponse(response, loader); });
|
|
||||||
|
|
||||||
connect(job.get(), &Task::failed, this, &ModrinthCheckUpdate::checkNextLoader);
|
connect(job.get(), &Task::failed, this, &ModrinthCheckUpdate::checkNextLoader);
|
||||||
|
|
||||||
|
@ -72,8 +71,7 @@ void ModrinthCheckUpdate::getUpdateModsForLoader(std::optional<ModPlatform::ModL
|
||||||
job->start();
|
job->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModrinthCheckUpdate::checkVersionsResponse(std::shared_ptr<QByteArray> response,
|
void ModrinthCheckUpdate::checkVersionsResponse(std::shared_ptr<QByteArray> response, std::optional<ModPlatform::ModLoaderTypes> loader)
|
||||||
std::optional<ModPlatform::ModLoaderTypes> loader)
|
|
||||||
{
|
{
|
||||||
setStatus(tr("Parsing the API response from Modrinth..."));
|
setStatus(tr("Parsing the API response from Modrinth..."));
|
||||||
setProgress(m_progress + 1, m_progressTotal);
|
setProgress(m_progress + 1, m_progressTotal);
|
||||||
|
@ -90,8 +88,10 @@ void ModrinthCheckUpdate::checkVersionsResponse(std::shared_ptr<QByteArray> resp
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (auto iter = m_mappings.begin(); iter != m_mappings.end(); iter++) {
|
auto iter = m_mappings.begin();
|
||||||
const QString& hash = iter.key();
|
|
||||||
|
while (iter != m_mappings.end()) {
|
||||||
|
const QString hash = iter.key();
|
||||||
Resource* resource = iter.value();
|
Resource* resource = iter.value();
|
||||||
|
|
||||||
auto project_obj = doc[hash].toObject();
|
auto project_obj = doc[hash].toObject();
|
||||||
|
@ -101,7 +101,7 @@ void ModrinthCheckUpdate::checkVersionsResponse(std::shared_ptr<QByteArray> resp
|
||||||
if (project_obj.isEmpty()) {
|
if (project_obj.isEmpty()) {
|
||||||
qDebug() << "Mod " << m_mappings.find(hash).value()->name() << " got an empty response."
|
qDebug() << "Mod " << m_mappings.find(hash).value()->name() << " got an empty response."
|
||||||
<< "Hash: " << hash;
|
<< "Hash: " << hash;
|
||||||
|
++iter;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -126,23 +126,15 @@ void ModrinthCheckUpdate::checkVersionsResponse(std::shared_ptr<QByteArray> resp
|
||||||
auto project_ver = Modrinth::loadIndexedPackVersion(project_obj, m_hash_type, loader_filter);
|
auto project_ver = Modrinth::loadIndexedPackVersion(project_obj, m_hash_type, loader_filter);
|
||||||
if (project_ver.downloadUrl.isEmpty()) {
|
if (project_ver.downloadUrl.isEmpty()) {
|
||||||
qCritical() << "Modrinth mod without download url!" << project_ver.fileName;
|
qCritical() << "Modrinth mod without download url!" << project_ver.fileName;
|
||||||
|
++iter;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto mod_iter = m_mappings.find(hash);
|
|
||||||
if (mod_iter == m_mappings.end()) {
|
|
||||||
qCritical() << "Failed to remap mod from Modrinth!";
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
auto mod = *mod_iter;
|
|
||||||
m_mappings.remove(hash);
|
|
||||||
|
|
||||||
// Fake pack with the necessary info to pass to the download task :)
|
// Fake pack with the necessary info to pass to the download task :)
|
||||||
auto pack = std::make_shared<ModPlatform::IndexedPack>();
|
auto pack = std::make_shared<ModPlatform::IndexedPack>();
|
||||||
pack->name = mod->name();
|
pack->name = resource->name();
|
||||||
pack->slug = mod->metadata()->slug;
|
pack->slug = resource->metadata()->slug;
|
||||||
pack->addonId = mod->metadata()->project_id;
|
pack->addonId = resource->metadata()->project_id;
|
||||||
pack->provider = ModPlatform::ResourceProvider::MODRINTH;
|
pack->provider = ModPlatform::ResourceProvider::MODRINTH;
|
||||||
if ((project_ver.hash != hash && project_ver.is_preferred) || (resource->status() == ResourceStatus::NOT_INSTALLED)) {
|
if ((project_ver.hash != hash && project_ver.is_preferred) || (resource->status() == ResourceStatus::NOT_INSTALLED)) {
|
||||||
auto download_task = makeShared<ResourceDownloadTask>(pack, project_ver, m_resource_model);
|
auto download_task = makeShared<ResourceDownloadTask>(pack, project_ver, m_resource_model);
|
||||||
|
@ -159,6 +151,8 @@ void ModrinthCheckUpdate::checkVersionsResponse(std::shared_ptr<QByteArray> resp
|
||||||
project_ver.changelog, ModPlatform::ResourceProvider::MODRINTH, download_task);
|
project_ver.changelog, ModPlatform::ResourceProvider::MODRINTH, download_task);
|
||||||
}
|
}
|
||||||
m_deps.append(std::make_shared<GetModDependenciesTask::PackDependency>(pack, project_ver));
|
m_deps.append(std::make_shared<GetModDependenciesTask::PackDependency>(pack, project_ver));
|
||||||
|
|
||||||
|
iter = m_mappings.erase(iter);
|
||||||
}
|
}
|
||||||
} catch (Json::JsonException& e) {
|
} catch (Json::JsonException& e) {
|
||||||
emitFailed(e.cause() + ": " + e.what());
|
emitFailed(e.cause() + ": " + e.what());
|
||||||
|
@ -184,7 +178,7 @@ void ModrinthCheckUpdate::checkNextLoader()
|
||||||
if (m_loader_idx < m_loaders_list.size()) {
|
if (m_loader_idx < m_loaders_list.size()) {
|
||||||
getUpdateModsForLoader(m_loaders_list.at(m_loader_idx));
|
getUpdateModsForLoader(m_loaders_list.at(m_loader_idx));
|
||||||
m_loader_idx++;
|
m_loader_idx++;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto resource : m_mappings) {
|
for (auto resource : m_mappings) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue