diff --git a/launcher/modplatform/ResourceAPI.cpp b/launcher/modplatform/ResourceAPI.cpp index b4e059b46..d65285d31 100644 --- a/launcher/modplatform/ResourceAPI.cpp +++ b/launcher/modplatform/ResourceAPI.cpp @@ -83,7 +83,7 @@ Task::Ptr ResourceAPI::getProjectVersions(VersionSearchArgs&& args, Callback(QString("%1::Versions").arg(args.pack.name), APPLICATION->network()); + auto netJob = makeShared(QString("%1::Versions").arg(args.pack->name), APPLICATION->network()); auto response = std::make_shared(); netJob->addNetAction(Net::ApiDownload::makeByteArray(versions_url, response)); @@ -107,7 +107,7 @@ Task::Ptr ResourceAPI::getProjectVersions(VersionSearchArgs&& args, CallbackaddonId; if (file.fileId.isValid() && !file.downloadUrl.isEmpty()) // Heuristic to check if the returned value is valid unsortedVersions.append(file); @@ -146,10 +146,10 @@ Task::Ptr ResourceAPI::getProjectVersions(VersionSearchArgs&& args, Callback&& callbacks) const +Task::Ptr ResourceAPI::getProjectInfo(ProjectInfoArgs&& args, Callback&& callbacks) const { auto response = std::make_shared(); - auto job = getProject(args.pack.addonId.toString(), response); + auto job = getProject(args.pack->addonId.toString(), response); QObject::connect(job.get(), &NetJob::succeeded, [this, response, callbacks, args] { auto pack = args.pack; @@ -165,8 +165,8 @@ Task::Ptr ResourceAPI::getProjectInfo(ProjectInfoArgs&& args, Callback> mcVersions; std::optional loaders; @@ -96,7 +96,7 @@ class ResourceAPI { }; struct ProjectInfoArgs { - ModPlatform::IndexedPack pack; + ModPlatform::IndexedPack::Ptr pack; }; struct DependencySearchArgs { @@ -115,7 +115,7 @@ class ResourceAPI { virtual Task::Ptr getProject(QString addonId, std::shared_ptr response) const; virtual Task::Ptr getProjects(QStringList addonIds, std::shared_ptr response) const = 0; - virtual Task::Ptr getProjectInfo(ProjectInfoArgs&&, Callback&&) const; + virtual Task::Ptr getProjectInfo(ProjectInfoArgs&&, Callback&&) const; Task::Ptr getProjectVersions(VersionSearchArgs&& args, Callback>&& callbacks) const; virtual Task::Ptr getDependencyVersion(DependencySearchArgs&&, Callback&&) const; diff --git a/launcher/modplatform/flame/FlameAPI.h b/launcher/modplatform/flame/FlameAPI.h index 799e142ce..0be8144ab 100644 --- a/launcher/modplatform/flame/FlameAPI.h +++ b/launcher/modplatform/flame/FlameAPI.h @@ -126,7 +126,7 @@ class FlameAPI : public ResourceAPI { std::optional getVersionsURL(VersionSearchArgs const& args) const override { - auto addonId = args.pack.addonId.toString(); + auto addonId = args.pack->addonId.toString(); QString url = QString(BuildConfig.FLAME_BASE_URL + "/mods/%1/files?pageSize=10000").arg(addonId); if (args.mcVersions.has_value()) @@ -160,10 +160,7 @@ class FlameAPI : public ResourceAPI { void loadExtraPackInfo(ModPlatform::IndexedPack& m, [[maybe_unused]] QJsonObject&) const override { FlameMod::loadBody(m); } private: - std::optional getInfoURL(QString const& id) const override - { - return QString(BuildConfig.FLAME_BASE_URL + "/mods/%1").arg(id); - } + std::optional getInfoURL(QString const& id) const override { return QString(BuildConfig.FLAME_BASE_URL + "/mods/%1").arg(id); } std::optional getDependencyURL(DependencySearchArgs const& args) const override { auto addonId = args.dependency.addonId.toString(); diff --git a/launcher/modplatform/flame/FlameCheckUpdate.cpp b/launcher/modplatform/flame/FlameCheckUpdate.cpp index 17d13deda..937f3dc7a 100644 --- a/launcher/modplatform/flame/FlameCheckUpdate.cpp +++ b/launcher/modplatform/flame/FlameCheckUpdate.cpp @@ -46,7 +46,9 @@ void FlameCheckUpdate::executeTask() connect(netJob, &Task::stepProgress, this, &FlameCheckUpdate::propagateStepProgress); connect(netJob, &Task::details, this, &FlameCheckUpdate::setDetails); for (auto* resource : m_resources) { - auto versionsUrlOptional = api.getVersionsURL({ { resource->metadata()->project_id.toString() }, m_gameVersions }); + auto project = std::make_shared(); + project->addonId = resource->metadata()->project_id.toString(); + auto versionsUrlOptional = api.getVersionsURL({ project, m_gameVersions }); if (!versionsUrlOptional.has_value()) continue; diff --git a/launcher/modplatform/flame/FlameModIndex.cpp b/launcher/modplatform/flame/FlameModIndex.cpp index d92ee729c..a20c770a1 100644 --- a/launcher/modplatform/flame/FlameModIndex.cpp +++ b/launcher/modplatform/flame/FlameModIndex.cpp @@ -26,12 +26,15 @@ void FlameMod::loadIndexedPack(ModPlatform::IndexedPack& pack, QJsonObject& obj) } auto authors = Json::ensureArray(obj, "authors"); - for (auto authorIter : authors) { - auto author = Json::requireObject(authorIter); - ModPlatform::ModpackAuthor packAuthor; - packAuthor.name = Json::requireString(author, "name"); - packAuthor.url = Json::requireString(author, "url"); - pack.authors.append(packAuthor); + if (!authors.isEmpty()) { + pack.authors.clear(); + for (auto authorIter : authors) { + auto author = Json::requireObject(authorIter); + ModPlatform::ModpackAuthor packAuthor; + packAuthor.name = Json::requireString(author, "name"); + packAuthor.url = Json::requireString(author, "url"); + pack.authors.append(packAuthor); + } } pack.extraDataLoaded = false; diff --git a/launcher/modplatform/modrinth/ModrinthAPI.h b/launcher/modplatform/modrinth/ModrinthAPI.h index c2714b3c8..1990350d4 100644 --- a/launcher/modplatform/modrinth/ModrinthAPI.h +++ b/launcher/modplatform/modrinth/ModrinthAPI.h @@ -45,7 +45,8 @@ class ModrinthAPI : public ResourceAPI { { QStringList l; for (auto loader : { ModPlatform::NeoForge, ModPlatform::Forge, ModPlatform::Fabric, ModPlatform::Quilt, ModPlatform::LiteLoader, - ModPlatform::DataPack, ModPlatform::Babric, ModPlatform::BTA, ModPlatform::LegacyFabric, ModPlatform::Ornithe, ModPlatform::Rift }) { + ModPlatform::DataPack, ModPlatform::Babric, ModPlatform::BTA, ModPlatform::LegacyFabric, ModPlatform::Ornithe, + ModPlatform::Rift }) { if (types & loader) { l << getModLoaderAsString(loader); } @@ -188,7 +189,7 @@ class ModrinthAPI : public ResourceAPI { get_arguments.append(QString("loaders=[\"%1\"]").arg(getModLoaderStrings(args.loaders.value()).join("\",\""))); return QString("%1/project/%2/version%3%4") - .arg(BuildConfig.MODRINTH_PROD_URL, args.pack.addonId.toString(), get_arguments.isEmpty() ? "" : "?", get_arguments.join('&')); + .arg(BuildConfig.MODRINTH_PROD_URL, args.pack->addonId.toString(), get_arguments.isEmpty() ? "" : "?", get_arguments.join('&')); }; QString getGameVersionsArray(std::list mcVersions) const @@ -204,7 +205,8 @@ class ModrinthAPI : public ResourceAPI { static inline auto validateModLoaders(ModPlatform::ModLoaderTypes loaders) -> bool { return loaders & (ModPlatform::NeoForge | ModPlatform::Forge | ModPlatform::Fabric | ModPlatform::Quilt | ModPlatform::LiteLoader | - ModPlatform::DataPack | ModPlatform::Babric | ModPlatform::BTA | ModPlatform::LegacyFabric | ModPlatform::Ornithe | ModPlatform::Rift); + ModPlatform::DataPack | ModPlatform::Babric | ModPlatform::BTA | ModPlatform::LegacyFabric | + ModPlatform::Ornithe | ModPlatform::Rift); } std::optional getDependencyURL(DependencySearchArgs const& args) const override diff --git a/launcher/modplatform/modrinth/ModrinthPackIndex.cpp b/launcher/modplatform/modrinth/ModrinthPackIndex.cpp index 702a8f309..ec835678c 100644 --- a/launcher/modplatform/modrinth/ModrinthPackIndex.cpp +++ b/launcher/modplatform/modrinth/ModrinthPackIndex.cpp @@ -33,7 +33,7 @@ bool shouldDownloadOnSide(QString side) return side == "required" || side == "optional"; } -// https://docs.modrinth.com/api-spec/#tag/projects/operation/getProject +// https://docs.modrinth.com/api/operations/getproject/ void Modrinth::loadIndexedPack(ModPlatform::IndexedPack& pack, QJsonObject& obj) { pack.addonId = Json::ensureString(obj, "project_id"); @@ -54,10 +54,12 @@ void Modrinth::loadIndexedPack(ModPlatform::IndexedPack& pack, QJsonObject& obj) pack.logoUrl = Json::ensureString(obj, "icon_url", ""); pack.logoName = QString("%1.%2").arg(Json::ensureString(obj, "slug"), QFileInfo(QUrl(pack.logoUrl).fileName()).suffix()); - ModPlatform::ModpackAuthor modAuthor; - modAuthor.name = Json::ensureString(obj, "author", QObject::tr("No author(s)")); - modAuthor.url = api.getAuthorURL(modAuthor.name); - pack.authors.append(modAuthor); + if (obj.contains("author")) { + ModPlatform::ModpackAuthor modAuthor; + modAuthor.name = Json::ensureString(obj, "author"); + modAuthor.url = api.getAuthorURL(modAuthor.name); + pack.authors = { modAuthor }; + } auto client = shouldDownloadOnSide(Json::ensureString(obj, "client_side")); auto server = shouldDownloadOnSide(Json::ensureString(obj, "server_side")); diff --git a/launcher/ui/pages/instance/ManagedPackPage.cpp b/launcher/ui/pages/instance/ManagedPackPage.cpp index e97935650..230cf1bdf 100644 --- a/launcher/ui/pages/instance/ManagedPackPage.cpp +++ b/launcher/ui/pages/instance/ManagedPackPage.cpp @@ -6,12 +6,14 @@ #include #include #include +#include "modplatform/ModIndex.h" #include "ui_ManagedPackPage.h" #include #include #include #include +#include #include "Application.h" #include "BuildConfig.h" @@ -284,7 +286,8 @@ void ModrinthManagedPackPage::parseManagedPack() }; callbacks.on_fail = [this](QString reason, int) { setFailState(); }; callbacks.on_abort = [this]() { setFailState(); }; - m_fetch_job = m_api.getProjectVersions({ m_pack, {}, {}, ModPlatform::ResourceType::Modpack }, std::move(callbacks)); + m_fetch_job = m_api.getProjectVersions( + { std::make_shared(m_pack), {}, {}, ModPlatform::ResourceType::Modpack }, std::move(callbacks)); ui->changelogTextBrowser->setText(tr("Fetching changelogs...")); @@ -455,7 +458,8 @@ void FlameManagedPackPage::parseManagedPack() }; callbacks.on_fail = [this](QString reason, int) { setFailState(); }; callbacks.on_abort = [this]() { setFailState(); }; - m_fetch_job = m_api.getProjectVersions({ m_pack, {}, {}, ModPlatform::ResourceType::Modpack }, std::move(callbacks)); + m_fetch_job = m_api.getProjectVersions( + { std::make_shared(m_pack), {}, {}, ModPlatform::ResourceType::Modpack }, std::move(callbacks)); m_fetch_job->start(); } diff --git a/launcher/ui/pages/modplatform/DataPackModel.cpp b/launcher/ui/pages/modplatform/DataPackModel.cpp index 846ef5aa4..fb535ae03 100644 --- a/launcher/ui/pages/modplatform/DataPackModel.cpp +++ b/launcher/ui/pages/modplatform/DataPackModel.cpp @@ -23,14 +23,14 @@ ResourceAPI::SearchArgs DataPackResourceModel::createSearchArguments() ResourceAPI::VersionSearchArgs DataPackResourceModel::createVersionsArguments(const QModelIndex& entry) { - auto& pack = m_packs[entry.row()]; - return { *pack, {}, ModPlatform::ModLoaderType::DataPack }; + auto pack = m_packs[entry.row()]; + return { pack, {}, ModPlatform::ModLoaderType::DataPack }; } ResourceAPI::ProjectInfoArgs DataPackResourceModel::createInfoArguments(const QModelIndex& entry) { - auto& pack = m_packs[entry.row()]; - return { *pack }; + auto pack = m_packs[entry.row()]; + return { pack }; } void DataPackResourceModel::searchWithTerm(const QString& term, unsigned int sort) diff --git a/launcher/ui/pages/modplatform/ModModel.cpp b/launcher/ui/pages/modplatform/ModModel.cpp index c5a03e1fd..430424cfa 100644 --- a/launcher/ui/pages/modplatform/ModModel.cpp +++ b/launcher/ui/pages/modplatform/ModModel.cpp @@ -49,7 +49,7 @@ ResourceAPI::SearchArgs ModModel::createSearchArguments() ResourceAPI::VersionSearchArgs ModModel::createVersionsArguments(const QModelIndex& entry) { - auto& pack = *m_packs[entry.row()]; + auto pack = m_packs[entry.row()]; auto profile = static_cast(m_base_instance).getPackProfile(); Q_ASSERT(profile); @@ -67,7 +67,7 @@ ResourceAPI::VersionSearchArgs ModModel::createVersionsArguments(const QModelInd ResourceAPI::ProjectInfoArgs ModModel::createInfoArguments(const QModelIndex& entry) { - auto& pack = *m_packs[entry.row()]; + auto pack = m_packs[entry.row()]; return { pack }; } diff --git a/launcher/ui/pages/modplatform/ResourceModel.cpp b/launcher/ui/pages/modplatform/ResourceModel.cpp index eea7af25e..2d5add0c0 100644 --- a/launcher/ui/pages/modplatform/ResourceModel.cpp +++ b/launcher/ui/pages/modplatform/ResourceModel.cpp @@ -141,7 +141,7 @@ void ResourceModel::search() if (m_search_term.startsWith("#")) { auto projectId = m_search_term.mid(1); if (!projectId.isEmpty()) { - ResourceAPI::Callback callbacks; + ResourceAPI::Callback callbacks; callbacks.on_fail = [this](QString reason, int) { if (!s_running_models.constFind(this).value()) @@ -159,7 +159,9 @@ void ResourceModel::search() return; searchRequestForOneSucceeded(pack); }; - if (auto job = m_api->getProjectInfo({ projectId }, std::move(callbacks)); job) + auto project = std::make_shared(); + project->addonId = projectId; + if (auto job = m_api->getProjectInfo({ project }, std::move(callbacks)); job) runSearchJob(job); return; } @@ -219,7 +221,7 @@ void ResourceModel::loadEntry(const QModelIndex& entry) if (!pack->extraDataLoaded) { auto args{ createInfoArguments(entry) }; - ResourceAPI::Callback callbacks{}; + ResourceAPI::Callback callbacks{}; callbacks.on_succeed = [this, entry](auto& newpack) { if (!s_running_models.constFind(this).value()) @@ -388,12 +390,12 @@ void ResourceModel::searchRequestSucceeded(QList& endInsertRows(); } -void ResourceModel::searchRequestForOneSucceeded(ModPlatform::IndexedPack& pack) +void ResourceModel::searchRequestForOneSucceeded(ModPlatform::IndexedPack::Ptr pack) { m_search_state = SearchState::Finished; beginInsertRows(QModelIndex(), m_packs.size(), m_packs.size() + 1); - m_packs.append(std::make_shared(pack)); + m_packs.append(pack); endInsertRows(); } @@ -448,18 +450,17 @@ void ResourceModel::versionRequestSucceeded(QVector emit versionListUpdated(index); } -void ResourceModel::infoRequestSucceeded(ModPlatform::IndexedPack& pack, const QModelIndex& index) +void ResourceModel::infoRequestSucceeded(ModPlatform::IndexedPack::Ptr pack, const QModelIndex& index) { auto current_pack = data(index, Qt::UserRole).value(); // Check if the index is still valid for this resource or not - if (pack.addonId != current_pack->addonId) + if (pack->addonId != current_pack->addonId) return; - *current_pack = pack; // Cache info :^) QVariant new_pack; - new_pack.setValue(current_pack); + new_pack.setValue(pack); if (!setData(index, new_pack, Qt::UserRole)) { qWarning() << "Failed to cache resource info!"; return; diff --git a/launcher/ui/pages/modplatform/ResourceModel.h b/launcher/ui/pages/modplatform/ResourceModel.h index 0b56b2b6a..a261c6e43 100644 --- a/launcher/ui/pages/modplatform/ResourceModel.h +++ b/launcher/ui/pages/modplatform/ResourceModel.h @@ -138,13 +138,13 @@ class ResourceModel : public QAbstractListModel { private: /* Default search request callbacks */ void searchRequestSucceeded(QList&); - void searchRequestForOneSucceeded(ModPlatform::IndexedPack&); + void searchRequestForOneSucceeded(ModPlatform::IndexedPack::Ptr); void searchRequestFailed(QString reason, int network_error_code); void searchRequestAborted(); void versionRequestSucceeded(QVector&, QVariant, const QModelIndex&); - void infoRequestSucceeded(ModPlatform::IndexedPack&, const QModelIndex&); + void infoRequestSucceeded(ModPlatform::IndexedPack::Ptr, const QModelIndex&); signals: void versionListUpdated(const QModelIndex& index); diff --git a/launcher/ui/pages/modplatform/ResourcePackModel.cpp b/launcher/ui/pages/modplatform/ResourcePackModel.cpp index e774c6f64..53a40faa2 100644 --- a/launcher/ui/pages/modplatform/ResourcePackModel.cpp +++ b/launcher/ui/pages/modplatform/ResourcePackModel.cpp @@ -25,14 +25,14 @@ ResourceAPI::SearchArgs ResourcePackResourceModel::createSearchArguments() ResourceAPI::VersionSearchArgs ResourcePackResourceModel::createVersionsArguments(const QModelIndex& entry) { - auto& pack = m_packs[entry.row()]; - return { *pack, {}, {}, ModPlatform::ResourceType::ResourcePack }; + auto pack = m_packs[entry.row()]; + return { pack, {}, {}, ModPlatform::ResourceType::ResourcePack }; } ResourceAPI::ProjectInfoArgs ResourcePackResourceModel::createInfoArguments(const QModelIndex& entry) { - auto& pack = m_packs[entry.row()]; - return { *pack }; + auto pack = m_packs[entry.row()]; + return { pack }; } void ResourcePackResourceModel::searchWithTerm(const QString& term, unsigned int sort) diff --git a/launcher/ui/pages/modplatform/ShaderPackModel.cpp b/launcher/ui/pages/modplatform/ShaderPackModel.cpp index f54a868db..5349b69ab 100644 --- a/launcher/ui/pages/modplatform/ShaderPackModel.cpp +++ b/launcher/ui/pages/modplatform/ShaderPackModel.cpp @@ -22,14 +22,14 @@ ResourceAPI::SearchArgs ShaderPackResourceModel::createSearchArguments() ResourceAPI::VersionSearchArgs ShaderPackResourceModel::createVersionsArguments(const QModelIndex& entry) { - auto& pack = m_packs[entry.row()]; - return { *pack, {}, {}, ModPlatform::ResourceType::ShaderPack }; + auto pack = m_packs[entry.row()]; + return { pack, {}, {}, ModPlatform::ResourceType::ShaderPack }; } ResourceAPI::ProjectInfoArgs ShaderPackResourceModel::createInfoArguments(const QModelIndex& entry) { - auto& pack = m_packs[entry.row()]; - return { *pack }; + auto pack = m_packs[entry.row()]; + return { pack }; } void ShaderPackResourceModel::searchWithTerm(const QString& term, unsigned int sort) diff --git a/launcher/ui/pages/modplatform/flame/FlameModel.cpp b/launcher/ui/pages/modplatform/flame/FlameModel.cpp index da94a84c4..3ae700fb4 100644 --- a/launcher/ui/pages/modplatform/flame/FlameModel.cpp +++ b/launcher/ui/pages/modplatform/flame/FlameModel.cpp @@ -11,6 +11,7 @@ #include #include +#include namespace Flame { @@ -167,7 +168,7 @@ void ListModel::performPaginatedSearch() if (m_currentSearchTerm.startsWith("#")) { auto projectId = m_currentSearchTerm.mid(1); if (!projectId.isEmpty()) { - ResourceAPI::Callback callbacks; + ResourceAPI::Callback callbacks; callbacks.on_fail = [this](QString reason, int) { searchRequestFailed(reason); }; callbacks.on_succeed = [this](auto& pack) { searchRequestForOneSucceeded(pack); }; @@ -175,7 +176,9 @@ void ListModel::performPaginatedSearch() qCritical() << "Search task aborted by an unknown reason!"; searchRequestFailed("Aborted"); }; - if (auto job = api.getProjectInfo({ { projectId } }, std::move(callbacks)); job) { + auto project = std::make_shared(); + project->addonId = projectId; + if (auto job = api.getProjectInfo({ project }, std::move(callbacks)); job) { m_jobPtr = job; m_jobPtr->start(); } @@ -245,12 +248,12 @@ void Flame::ListModel::searchRequestFinished(QList(pack)); + m_modpacks.append(pack); endInsertRows(); } diff --git a/launcher/ui/pages/modplatform/flame/FlameModel.h b/launcher/ui/pages/modplatform/flame/FlameModel.h index f98e2be96..92ff098d4 100644 --- a/launcher/ui/pages/modplatform/flame/FlameModel.h +++ b/launcher/ui/pages/modplatform/flame/FlameModel.h @@ -50,7 +50,7 @@ class ListModel : public QAbstractListModel { void searchRequestFinished(QList&); void searchRequestFailed(QString reason); - void searchRequestForOneSucceeded(ModPlatform::IndexedPack&); + void searchRequestForOneSucceeded(ModPlatform::IndexedPack::Ptr); private: void requestLogo(QString file, QString url); diff --git a/launcher/ui/pages/modplatform/flame/FlamePage.cpp b/launcher/ui/pages/modplatform/flame/FlamePage.cpp index 059d65438..79faccbc1 100644 --- a/launcher/ui/pages/modplatform/flame/FlamePage.cpp +++ b/launcher/ui/pages/modplatform/flame/FlamePage.cpp @@ -203,7 +203,7 @@ void FlamePage::onSelectionChanged(QModelIndex curr, [[maybe_unused]] QModelInde CustomMessageBox::selectable(this, tr("Error"), reason, QMessageBox::Critical)->exec(); }; - auto netJob = api.getProjectVersions({ *m_current, {}, {}, ModPlatform::ResourceType::Modpack }, std::move(callbacks)); + auto netJob = api.getProjectVersions({ m_current, {}, {}, ModPlatform::ResourceType::Modpack }, std::move(callbacks)); m_job = netJob; netJob->start(); diff --git a/launcher/ui/pages/modplatform/modrinth/ModrinthModel.cpp b/launcher/ui/pages/modplatform/modrinth/ModrinthModel.cpp index ef6f314c1..33aeb494e 100644 --- a/launcher/ui/pages/modplatform/modrinth/ModrinthModel.cpp +++ b/launcher/ui/pages/modplatform/modrinth/ModrinthModel.cpp @@ -47,6 +47,7 @@ #include "net/ApiDownload.h" #include +#include namespace Modrinth { @@ -137,7 +138,7 @@ void ModpackListModel::performPaginatedSearch() if (m_currentSearchTerm.startsWith("#")) { auto projectId = m_currentSearchTerm.mid(1); if (!projectId.isEmpty()) { - ResourceAPI::Callback callbacks; + ResourceAPI::Callback callbacks; callbacks.on_fail = [this](QString reason, int) { searchRequestFailed(reason); }; callbacks.on_succeed = [this](auto& pack) { searchRequestForOneSucceeded(pack); }; @@ -145,7 +146,9 @@ void ModpackListModel::performPaginatedSearch() qCritical() << "Search task aborted by an unknown reason!"; searchRequestFailed("Aborted"); }; - if (auto job = api.getProjectInfo({ projectId }, std::move(callbacks)); job) { + auto project = std::make_shared(); + project->addonId = projectId; + if (auto job = api.getProjectInfo({ project }, std::move(callbacks)); job) { m_jobPtr = job; m_jobPtr->start(); } @@ -304,12 +307,12 @@ void ModpackListModel::searchRequestFinished(QList(pack)); + m_modpacks.append(pack); endInsertRows(); } diff --git a/launcher/ui/pages/modplatform/modrinth/ModrinthModel.h b/launcher/ui/pages/modplatform/modrinth/ModrinthModel.h index 7037f4745..114c07ca6 100644 --- a/launcher/ui/pages/modplatform/modrinth/ModrinthModel.h +++ b/launcher/ui/pages/modplatform/modrinth/ModrinthModel.h @@ -86,7 +86,7 @@ class ModpackListModel : public QAbstractListModel { public slots: void searchRequestFinished(QList& doc_all); void searchRequestFailed(QString reason); - void searchRequestForOneSucceeded(ModPlatform::IndexedPack&); + void searchRequestForOneSucceeded(ModPlatform::IndexedPack::Ptr); protected slots: diff --git a/launcher/ui/pages/modplatform/modrinth/ModrinthPage.cpp b/launcher/ui/pages/modplatform/modrinth/ModrinthPage.cpp index 8de263078..a29b1ae36 100644 --- a/launcher/ui/pages/modplatform/modrinth/ModrinthPage.cpp +++ b/launcher/ui/pages/modplatform/modrinth/ModrinthPage.cpp @@ -146,7 +146,7 @@ void ModrinthPage::onSelectionChanged(QModelIndex curr, [[maybe_unused]] QModelI if (!m_current->extraDataLoaded) { qDebug() << "Loading modrinth modpack information"; - ResourceAPI::Callback callbacks; + ResourceAPI::Callback callbacks; auto id = m_current->addonId; callbacks.on_fail = [this](QString reason, int) { @@ -157,10 +157,8 @@ void ModrinthPage::onSelectionChanged(QModelIndex curr, [[maybe_unused]] QModelI return; // wrong request? } - *m_current = pack; - QVariant current_updated; - current_updated.setValue(m_current); + current_updated.setValue(pack); if (!m_model->setData(curr, current_updated, Qt::UserRole)) qWarning() << "Failed to cache extra info for the current pack!"; @@ -168,7 +166,7 @@ void ModrinthPage::onSelectionChanged(QModelIndex curr, [[maybe_unused]] QModelI suggestCurrent(); updateUI(); }; - if (auto netJob = m_api.getProjectInfo({ { m_current->addonId } }, std::move(callbacks)); netJob) { + if (auto netJob = m_api.getProjectInfo({ m_current }, std::move(callbacks)); netJob) { m_job = netJob; m_job->start(); } @@ -220,7 +218,7 @@ void ModrinthPage::onSelectionChanged(QModelIndex curr, [[maybe_unused]] QModelI CustomMessageBox::selectable(this, tr("Error"), reason, QMessageBox::Critical)->exec(); }; - auto netJob = m_api.getProjectVersions({ *m_current, {}, {}, ModPlatform::ResourceType::Modpack }, std::move(callbacks)); + auto netJob = m_api.getProjectVersions({ m_current, {}, {}, ModPlatform::ResourceType::Modpack }, std::move(callbacks)); m_job2 = netJob; m_job2->start();