feat: cache mod versions

Signed-off-by: flow <flowlnlnln@gmail.com>
This commit is contained in:
flow 2022-07-18 19:28:46 -03:00
parent 6f052baa94
commit 0808a10b7b
No known key found for this signature in database
GPG Key ID: 8D0F221F0A59F469
3 changed files with 14 additions and 6 deletions

View File

@ -96,12 +96,12 @@ bool ListModel::setData(const QModelIndex &index, const QVariant &value, int rol
return true; return true;
} }
void ListModel::requestModVersions(ModPlatform::IndexedPack const& current) void ListModel::requestModVersions(ModPlatform::IndexedPack const& current, QModelIndex index)
{ {
auto profile = (dynamic_cast<MinecraftInstance*>((dynamic_cast<ModPage*>(parent()))->m_instance))->getPackProfile(); auto profile = (dynamic_cast<MinecraftInstance*>((dynamic_cast<ModPage*>(parent()))->m_instance))->getPackProfile();
m_parent->apiProvider()->getVersions({ current.addonId.toString(), getMineVersions(), profile->getModLoaders() }, m_parent->apiProvider()->getVersions({ current.addonId.toString(), getMineVersions(), profile->getModLoaders() },
[this, current](QJsonDocument& doc, QString addonId) { versionRequestSucceeded(doc, addonId); }); [this, current, index](QJsonDocument& doc, QString addonId) { versionRequestSucceeded(doc, addonId, index); });
} }
void ListModel::performPaginatedSearch() void ListModel::performPaginatedSearch()
@ -293,7 +293,7 @@ void ListModel::infoRequestFinished(QJsonDocument& doc, ModPlatform::IndexedPack
m_parent->updateUi(); m_parent->updateUi();
} }
void ListModel::versionRequestSucceeded(QJsonDocument doc, QString addonId) void ListModel::versionRequestSucceeded(QJsonDocument doc, QString addonId, const QModelIndex& index)
{ {
auto& current = m_parent->getCurrent(); auto& current = m_parent->getCurrent();
if (addonId != current.addonId) { if (addonId != current.addonId) {
@ -309,6 +309,14 @@ void ListModel::versionRequestSucceeded(QJsonDocument doc, QString addonId)
qWarning() << "Error while reading " << debugName() << " mod version: " << e.cause(); qWarning() << "Error while reading " << debugName() << " mod version: " << e.cause();
} }
// Cache info :^)
QVariant new_pack;
new_pack.setValue(current);
if (!setData(index, new_pack, Qt::UserRole)) {
qWarning() << "Failed to cache mod versions!";
}
m_parent->updateModVersions(); m_parent->updateModVersions();
} }

View File

@ -38,7 +38,7 @@ class ListModel : public QAbstractListModel {
void refresh(); void refresh();
void searchWithTerm(const QString& term, const int sort, const bool filter_changed); void searchWithTerm(const QString& term, const int sort, const bool filter_changed);
void requestModInfo(ModPlatform::IndexedPack& current, QModelIndex index); void requestModInfo(ModPlatform::IndexedPack& current, QModelIndex index);
void requestModVersions(const ModPlatform::IndexedPack& current); void requestModVersions(const ModPlatform::IndexedPack& current, QModelIndex index);
virtual void loadIndexedPack(ModPlatform::IndexedPack& m, QJsonObject& obj) = 0; virtual void loadIndexedPack(ModPlatform::IndexedPack& m, QJsonObject& obj) = 0;
virtual void loadExtraPackInfo(ModPlatform::IndexedPack& m, QJsonObject& obj) {}; virtual void loadExtraPackInfo(ModPlatform::IndexedPack& m, QJsonObject& obj) {};
@ -54,7 +54,7 @@ class ListModel : public QAbstractListModel {
void infoRequestFinished(QJsonDocument& doc, ModPlatform::IndexedPack& pack, const QModelIndex& index); void infoRequestFinished(QJsonDocument& doc, ModPlatform::IndexedPack& pack, const QModelIndex& index);
void versionRequestSucceeded(QJsonDocument doc, QString addonId); void versionRequestSucceeded(QJsonDocument doc, QString addonId, const QModelIndex& index);
protected slots: protected slots:

View File

@ -183,7 +183,7 @@ void ModPage::onSelectionChanged(QModelIndex curr, QModelIndex prev)
ui->modSelectionButton->setText(tr("Loading versions...")); ui->modSelectionButton->setText(tr("Loading versions..."));
ui->modSelectionButton->setEnabled(false); ui->modSelectionButton->setEnabled(false);
listModel->requestModVersions(current); listModel->requestModVersions(current, curr);
} else { } else {
for (int i = 0; i < current.versions.size(); i++) { for (int i = 0; i < current.versions.size(); i++) {
ui->versionSelectionBox->addItem(current.versions[i].version, QVariant(i)); ui->versionSelectionBox->addItem(current.versions[i].version, QVariant(i));