mirror of
https://github.com/PrismLauncher/PrismLauncher.git
synced 2026-07-05 04:46:57 +03:00
optimize: Improve mod versions request to Modrinth
This uses more arguments in the GET request for mod versions on the Modrinth API, filtering what versions can be returned, decreasing load on Modrinth servers and improving a little the time it takes for the versions to be available to the user. This also removes the now unneeded check on correct modloaders in ModrinthPackIndex, since it is now filtered by the Modrinth server. Lastly, this adds a couple of helper functions in ModModel.
This commit is contained in:
parent
e13ca94061
commit
d00c320c00
8 changed files with 61 additions and 36 deletions
|
|
@ -16,7 +16,6 @@ auto ListModel::debugName() const -> QString
|
|||
return m_parent->debugName();
|
||||
}
|
||||
|
||||
|
||||
/******** Make data requests ********/
|
||||
|
||||
void ListModel::fetchMore(const QModelIndex& parent)
|
||||
|
|
@ -61,19 +60,14 @@ auto ListModel::data(const QModelIndex& index, int role) const -> QVariant
|
|||
|
||||
void ListModel::requestModVersions(ModPlatform::IndexedPack const& current)
|
||||
{
|
||||
m_parent->apiProvider()->getVersions(this, current.addonId.toString());
|
||||
m_parent->apiProvider()->getVersions(this,
|
||||
{ current.addonId.toString(), getMineVersions(), hasFabric() ? ModAPI::ModLoaderType::Fabric : ModAPI::ModLoaderType::Forge });
|
||||
}
|
||||
|
||||
void ListModel::performPaginatedSearch()
|
||||
{
|
||||
QString mcVersion = (dynamic_cast<MinecraftInstance*>((dynamic_cast<ModPage*>(parent()))->m_instance))->getPackProfile()->getComponentVersion("net.minecraft");
|
||||
bool hasFabric = !(dynamic_cast<MinecraftInstance*>((dynamic_cast<ModPage*>(parent()))->m_instance))
|
||||
->getPackProfile()
|
||||
->getComponentVersion("net.fabricmc.fabric-loader")
|
||||
.isEmpty();
|
||||
|
||||
m_parent->apiProvider()->searchMods(
|
||||
this, { nextSearchOffset, currentSearchTerm, getSorts()[currentSort], hasFabric ? ModAPI::Fabric : ModAPI::Forge, mcVersion });
|
||||
m_parent->apiProvider()->searchMods(this,
|
||||
{ nextSearchOffset, currentSearchTerm, getSorts()[currentSort], hasFabric() ? ModAPI::Fabric : ModAPI::Forge, getMineVersions().at(0) });
|
||||
}
|
||||
|
||||
void ListModel::searchWithTerm(const QString& term, const int sort)
|
||||
|
|
@ -131,7 +125,6 @@ void ListModel::requestLogo(QString logo, QString url)
|
|||
m_loadingLogos.append(logo);
|
||||
}
|
||||
|
||||
|
||||
/******** Request callbacks ********/
|
||||
|
||||
void ListModel::logoLoaded(QString logo, QIcon out)
|
||||
|
|
@ -208,7 +201,7 @@ void ListModel::versionRequestSucceeded(QJsonDocument doc, QString addonId)
|
|||
{
|
||||
auto& current = m_parent->getCurrent();
|
||||
if (addonId != current.addonId) { return; }
|
||||
|
||||
|
||||
QJsonArray arr = doc.array();
|
||||
try {
|
||||
loadIndexedPackVersions(current, arr);
|
||||
|
|
@ -221,3 +214,19 @@ void ListModel::versionRequestSucceeded(QJsonDocument doc, QString addonId)
|
|||
}
|
||||
|
||||
} // namespace ModPlatform
|
||||
|
||||
/******** Helpers ********/
|
||||
auto ModPlatform::ListModel::hasFabric() const -> bool
|
||||
{
|
||||
return !(dynamic_cast<MinecraftInstance*>((dynamic_cast<ModPage*>(parent()))->m_instance))
|
||||
->getPackProfile()
|
||||
->getComponentVersion("net.fabricmc.fabric-loader")
|
||||
.isEmpty();
|
||||
}
|
||||
|
||||
auto ModPlatform::ListModel::getMineVersions() const -> QList<QString>
|
||||
{
|
||||
return { (dynamic_cast<MinecraftInstance*>((dynamic_cast<ModPage*>(parent()))->m_instance))
|
||||
->getPackProfile()
|
||||
->getComponentVersion("net.minecraft") };
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue