diff options
| author | Jamie Mansfield <jmansfield@cadixdev.org> | 2021-10-16 23:31:27 +0100 | 
|---|---|---|
| committer | Jamie Mansfield <jmansfield@cadixdev.org> | 2021-10-16 23:31:27 +0100 | 
| commit | 175132539b14be2681bfbaf3f380f0a9b8a69a26 (patch) | |
| tree | 045b2a9bffb7e677566f08275e3aa62c7186f9f4 /launcher/pages/modplatform | |
| parent | 6cc7788b4a9ac8caae581c8f81aec085820f3a4f (diff) | |
| download | PrismLauncher-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/modplatform')
| -rw-r--r-- | launcher/pages/modplatform/ftb/FtbFilterModel.cpp | 14 | ||||
| -rw-r--r-- | launcher/pages/modplatform/ftb/FtbFilterModel.h | 2 | ||||
| -rw-r--r-- | launcher/pages/modplatform/ftb/FtbListModel.cpp | 47 | ||||
| -rw-r--r-- | launcher/pages/modplatform/ftb/FtbListModel.h | 16 | ||||
| -rw-r--r-- | launcher/pages/modplatform/ftb/FtbPage.cpp | 9 | ||||
| -rw-r--r-- | launcher/pages/modplatform/ftb/FtbPage.h | 2 | 
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 };  }; | 
