aboutsummaryrefslogtreecommitdiff
path: root/launcher/pages
diff options
context:
space:
mode:
authorJamie Mansfield <jmansfield@cadixdev.org>2021-10-16 23:31:27 +0100
committerJamie Mansfield <jmansfield@cadixdev.org>2021-10-16 23:31:27 +0100
commit175132539b14be2681bfbaf3f380f0a9b8a69a26 (patch)
tree045b2a9bffb7e677566f08275e3aa62c7186f9f4 /launcher/pages
parent6cc7788b4a9ac8caae581c8f81aec085820f3a4f (diff)
downloadPrismLauncher-175132539b14be2681bfbaf3f380f0a9b8a69a26.tar.gz
PrismLauncher-175132539b14be2681bfbaf3f380f0a9b8a69a26.tar.bz2
PrismLauncher-175132539b14be2681bfbaf3f380f0a9b8a69a26.zip
NOISSUE Filter all pack's by name to search for modpacks.ch
modpacks.ch searching has changed, and while likely a bug - we may as well make this change while we fetch all packs anyway. This makes MMC more reactive for searchs for the platform. This should be reverted if/when the modpacks.ch hits a size where we need to restrict how many packs are fetched.
Diffstat (limited to 'launcher/pages')
-rw-r--r--launcher/pages/modplatform/ftb/FtbFilterModel.cpp14
-rw-r--r--launcher/pages/modplatform/ftb/FtbFilterModel.h2
-rw-r--r--launcher/pages/modplatform/ftb/FtbListModel.cpp47
-rw-r--r--launcher/pages/modplatform/ftb/FtbListModel.h16
-rw-r--r--launcher/pages/modplatform/ftb/FtbPage.cpp9
-rw-r--r--launcher/pages/modplatform/ftb/FtbPage.h2
6 files changed, 39 insertions, 51 deletions
diff --git a/launcher/pages/modplatform/ftb/FtbFilterModel.cpp b/launcher/pages/modplatform/ftb/FtbFilterModel.cpp
index dec3a017..793b8769 100644
--- a/launcher/pages/modplatform/ftb/FtbFilterModel.cpp
+++ b/launcher/pages/modplatform/ftb/FtbFilterModel.cpp
@@ -36,9 +36,21 @@ FilterModel::Sorting FilterModel::getCurrentSorting()
return currentSorting;
}
+void FilterModel::setSearchTerm(const QString& term)
+{
+ searchTerm = term.trimmed();
+ invalidate();
+}
+
bool FilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
{
- return true;
+ if (searchTerm.isEmpty()) {
+ return true;
+ }
+
+ auto index = sourceModel()->index(sourceRow, 0, sourceParent);
+ auto pack = sourceModel()->data(index, Qt::UserRole).value<ModpacksCH::Modpack>();
+ return pack.name.contains(searchTerm, Qt::CaseInsensitive);
}
bool FilterModel::lessThan(const QModelIndex &left, const QModelIndex &right) const
diff --git a/launcher/pages/modplatform/ftb/FtbFilterModel.h b/launcher/pages/modplatform/ftb/FtbFilterModel.h
index 4fe2a274..2e712c7d 100644
--- a/launcher/pages/modplatform/ftb/FtbFilterModel.h
+++ b/launcher/pages/modplatform/ftb/FtbFilterModel.h
@@ -19,6 +19,7 @@ public:
QString translateCurrentSorting();
void setSorting(Sorting sorting);
Sorting getCurrentSorting();
+ void setSearchTerm(const QString& term);
protected:
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
@@ -27,6 +28,7 @@ protected:
private:
QMap<QString, Sorting> sortings;
Sorting currentSorting;
+ QString searchTerm { "" };
};
diff --git a/launcher/pages/modplatform/ftb/FtbListModel.cpp b/launcher/pages/modplatform/ftb/FtbListModel.cpp
index 98973f2e..f5ed106b 100644
--- a/launcher/pages/modplatform/ftb/FtbListModel.cpp
+++ b/launcher/pages/modplatform/ftb/FtbListModel.cpp
@@ -74,24 +74,6 @@ QVariant ListModel::data(const QModelIndex &index, int role) const
return QVariant();
}
-void ListModel::performSearch()
-{
- auto *netJob = new NetJob("Ftb::Search");
- QString searchUrl;
- if(currentSearchTerm.isEmpty()) {
- searchUrl = BuildConfig.MODPACKSCH_API_BASE_URL + "public/modpack/all";
- }
- else {
- searchUrl = QString(BuildConfig.MODPACKSCH_API_BASE_URL + "public/modpack/search/25?term=%1")
- .arg(currentSearchTerm);
- }
- netJob->addNetAction(Net::Download::makeByteArray(QUrl(searchUrl), &response));
- jobPtr = netJob;
- jobPtr->start();
- QObject::connect(netJob, &NetJob::succeeded, this, &ListModel::searchRequestFinished);
- QObject::connect(netJob, &NetJob::failed, this, &ListModel::searchRequestFailed);
-}
-
void ListModel::getLogo(const QString &logo, const QString &logoUrl, LogoCallback callback)
{
if(m_logoMap.contains(logo))
@@ -104,28 +86,23 @@ void ListModel::getLogo(const QString &logo, const QString &logoUrl, LogoCallbac
}
}
-void ListModel::searchWithTerm(const QString &term)
+void ListModel::request()
{
- if(searchState != Failed && currentSearchTerm == term && currentSearchTerm.isNull() == term.isNull()) {
- // unless the search has failed, then there is no need to perform an identical search.
- return;
- }
- currentSearchTerm = term;
-
- if(jobPtr) {
- jobPtr->abort();
- jobPtr.reset();
- }
-
beginResetModel();
modpacks.clear();
endResetModel();
- searchState = None;
- performSearch();
+ auto *netJob = new NetJob("Ftb::Request");
+ auto url = QString(BuildConfig.MODPACKSCH_API_BASE_URL + "public/modpack/all");
+ netJob->addNetAction(Net::Download::makeByteArray(QUrl(url), &response));
+ jobPtr = netJob;
+ jobPtr->start();
+
+ QObject::connect(netJob, &NetJob::succeeded, this, &ListModel::requestFinished);
+ QObject::connect(netJob, &NetJob::failed, this, &ListModel::requestFailed);
}
-void ListModel::searchRequestFinished()
+void ListModel::requestFinished()
{
jobPtr.reset();
remainingPacks.clear();
@@ -150,12 +127,10 @@ void ListModel::searchRequestFinished()
}
}
-void ListModel::searchRequestFailed(QString reason)
+void ListModel::requestFailed(QString reason)
{
jobPtr.reset();
remainingPacks.clear();
-
- searchState = Failed;
}
void ListModel::requestPack()
diff --git a/launcher/pages/modplatform/ftb/FtbListModel.h b/launcher/pages/modplatform/ftb/FtbListModel.h
index de94e6ba..2d6e91da 100644
--- a/launcher/pages/modplatform/ftb/FtbListModel.h
+++ b/launcher/pages/modplatform/ftb/FtbListModel.h
@@ -30,13 +30,13 @@ public:
int columnCount(const QModelIndex &parent) const override;
QVariant data(const QModelIndex &index, int role) const override;
+ void request();
+
void getLogo(const QString &logo, const QString &logoUrl, LogoCallback callback);
- void searchWithTerm(const QString & term);
private slots:
- void performSearch();
- void searchRequestFinished();
- void searchRequestFailed(QString reason);
+ void requestFinished();
+ void requestFailed(QString reason);
void requestPack();
void packRequestFinished();
@@ -52,14 +52,6 @@ private:
QList<ModpacksCH::Modpack> modpacks;
LogoMap m_logoMap;
- QString currentSearchTerm;
- enum SearchState {
- None,
- CanPossiblyFetchMore,
- ResetRequested,
- Finished,
- Failed,
- } searchState = None;
NetJobPtr jobPtr;
int currentPack;
QList<int> remainingPacks;
diff --git a/launcher/pages/modplatform/ftb/FtbPage.cpp b/launcher/pages/modplatform/ftb/FtbPage.cpp
index b7f35c5d..5917b979 100644
--- a/launcher/pages/modplatform/ftb/FtbPage.cpp
+++ b/launcher/pages/modplatform/ftb/FtbPage.cpp
@@ -63,7 +63,12 @@ bool FtbPage::shouldDisplay() const
void FtbPage::openedImpl()
{
- triggerSearch();
+ if(!initialised)
+ {
+ listModel->request();
+ initialised = true;
+ }
+
suggestCurrent();
}
@@ -96,7 +101,7 @@ void FtbPage::suggestCurrent()
void FtbPage::triggerSearch()
{
- listModel->searchWithTerm(ui->searchEdit->text());
+ filterModel->setSearchTerm(ui->searchEdit->text());
}
void FtbPage::onSortingSelectionChanged(QString data)
diff --git a/launcher/pages/modplatform/ftb/FtbPage.h b/launcher/pages/modplatform/ftb/FtbPage.h
index c9c93897..bca09e25 100644
--- a/launcher/pages/modplatform/ftb/FtbPage.h
+++ b/launcher/pages/modplatform/ftb/FtbPage.h
@@ -77,4 +77,6 @@ private:
ModpacksCH::Modpack selected;
QString selectedVersion;
+
+ bool initialised { false };
};