Merge pull request #4177 from jamierocks/mch-search
NOISSUE Fix modpacks.ch search
This commit is contained in:
commit
e6cb7b7710
@ -36,9 +36,21 @@ FilterModel::Sorting FilterModel::getCurrentSorting()
|
|||||||
return currentSorting;
|
return currentSorting;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FilterModel::setSearchTerm(const QString& term)
|
||||||
|
{
|
||||||
|
searchTerm = term.trimmed();
|
||||||
|
invalidate();
|
||||||
|
}
|
||||||
|
|
||||||
bool FilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
|
bool FilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
|
||||||
{
|
{
|
||||||
|
if (searchTerm.isEmpty()) {
|
||||||
return true;
|
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
|
bool FilterModel::lessThan(const QModelIndex &left, const QModelIndex &right) const
|
||||||
|
@ -19,6 +19,7 @@ public:
|
|||||||
QString translateCurrentSorting();
|
QString translateCurrentSorting();
|
||||||
void setSorting(Sorting sorting);
|
void setSorting(Sorting sorting);
|
||||||
Sorting getCurrentSorting();
|
Sorting getCurrentSorting();
|
||||||
|
void setSearchTerm(const QString& term);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
|
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
|
||||||
@ -27,6 +28,7 @@ protected:
|
|||||||
private:
|
private:
|
||||||
QMap<QString, Sorting> sortings;
|
QMap<QString, Sorting> sortings;
|
||||||
Sorting currentSorting;
|
Sorting currentSorting;
|
||||||
|
QString searchTerm { "" };
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -74,24 +74,6 @@ QVariant ListModel::data(const QModelIndex &index, int role) const
|
|||||||
return QVariant();
|
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)
|
void ListModel::getLogo(const QString &logo, const QString &logoUrl, LogoCallback callback)
|
||||||
{
|
{
|
||||||
if(m_logoMap.contains(logo))
|
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();
|
beginResetModel();
|
||||||
modpacks.clear();
|
modpacks.clear();
|
||||||
endResetModel();
|
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();
|
jobPtr.reset();
|
||||||
remainingPacks.clear();
|
remainingPacks.clear();
|
||||||
@ -150,12 +127,10 @@ void ListModel::searchRequestFinished()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ListModel::searchRequestFailed(QString reason)
|
void ListModel::requestFailed(QString reason)
|
||||||
{
|
{
|
||||||
jobPtr.reset();
|
jobPtr.reset();
|
||||||
remainingPacks.clear();
|
remainingPacks.clear();
|
||||||
|
|
||||||
searchState = Failed;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ListModel::requestPack()
|
void ListModel::requestPack()
|
||||||
|
@ -30,13 +30,13 @@ public:
|
|||||||
int columnCount(const QModelIndex &parent) const override;
|
int columnCount(const QModelIndex &parent) const override;
|
||||||
QVariant data(const QModelIndex &index, int role) const override;
|
QVariant data(const QModelIndex &index, int role) const override;
|
||||||
|
|
||||||
|
void request();
|
||||||
|
|
||||||
void getLogo(const QString &logo, const QString &logoUrl, LogoCallback callback);
|
void getLogo(const QString &logo, const QString &logoUrl, LogoCallback callback);
|
||||||
void searchWithTerm(const QString & term);
|
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void performSearch();
|
void requestFinished();
|
||||||
void searchRequestFinished();
|
void requestFailed(QString reason);
|
||||||
void searchRequestFailed(QString reason);
|
|
||||||
|
|
||||||
void requestPack();
|
void requestPack();
|
||||||
void packRequestFinished();
|
void packRequestFinished();
|
||||||
@ -52,14 +52,6 @@ private:
|
|||||||
QList<ModpacksCH::Modpack> modpacks;
|
QList<ModpacksCH::Modpack> modpacks;
|
||||||
LogoMap m_logoMap;
|
LogoMap m_logoMap;
|
||||||
|
|
||||||
QString currentSearchTerm;
|
|
||||||
enum SearchState {
|
|
||||||
None,
|
|
||||||
CanPossiblyFetchMore,
|
|
||||||
ResetRequested,
|
|
||||||
Finished,
|
|
||||||
Failed,
|
|
||||||
} searchState = None;
|
|
||||||
NetJobPtr jobPtr;
|
NetJobPtr jobPtr;
|
||||||
int currentPack;
|
int currentPack;
|
||||||
QList<int> remainingPacks;
|
QList<int> remainingPacks;
|
||||||
|
@ -32,7 +32,7 @@ FtbPage::FtbPage(NewInstanceDialog* dialog, QWidget *parent)
|
|||||||
}
|
}
|
||||||
ui->sortByBox->setCurrentText(filterModel->translateCurrentSorting());
|
ui->sortByBox->setCurrentText(filterModel->translateCurrentSorting());
|
||||||
|
|
||||||
connect(ui->searchButton, &QPushButton::clicked, this, &FtbPage::triggerSearch);
|
connect(ui->searchEdit, &QLineEdit::textChanged, this, &FtbPage::triggerSearch);
|
||||||
connect(ui->sortByBox, &QComboBox::currentTextChanged, this, &FtbPage::onSortingSelectionChanged);
|
connect(ui->sortByBox, &QComboBox::currentTextChanged, this, &FtbPage::onSortingSelectionChanged);
|
||||||
connect(ui->packView->selectionModel(), &QItemSelectionModel::currentChanged, this, &FtbPage::onSelectionChanged);
|
connect(ui->packView->selectionModel(), &QItemSelectionModel::currentChanged, this, &FtbPage::onSelectionChanged);
|
||||||
connect(ui->versionSelectionBox, &QComboBox::currentTextChanged, this, &FtbPage::onVersionSelectionChanged);
|
connect(ui->versionSelectionBox, &QComboBox::currentTextChanged, this, &FtbPage::onVersionSelectionChanged);
|
||||||
@ -63,7 +63,12 @@ bool FtbPage::shouldDisplay() const
|
|||||||
|
|
||||||
void FtbPage::openedImpl()
|
void FtbPage::openedImpl()
|
||||||
{
|
{
|
||||||
triggerSearch();
|
if(!initialised)
|
||||||
|
{
|
||||||
|
listModel->request();
|
||||||
|
initialised = true;
|
||||||
|
}
|
||||||
|
|
||||||
suggestCurrent();
|
suggestCurrent();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,7 +101,7 @@ void FtbPage::suggestCurrent()
|
|||||||
|
|
||||||
void FtbPage::triggerSearch()
|
void FtbPage::triggerSearch()
|
||||||
{
|
{
|
||||||
listModel->searchWithTerm(ui->searchEdit->text());
|
filterModel->setSearchTerm(ui->searchEdit->text());
|
||||||
}
|
}
|
||||||
|
|
||||||
void FtbPage::onSortingSelectionChanged(QString data)
|
void FtbPage::onSortingSelectionChanged(QString data)
|
||||||
|
@ -65,6 +65,7 @@ private:
|
|||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void triggerSearch();
|
void triggerSearch();
|
||||||
|
|
||||||
void onSortingSelectionChanged(QString data);
|
void onSortingSelectionChanged(QString data);
|
||||||
void onSelectionChanged(QModelIndex first, QModelIndex second);
|
void onSelectionChanged(QModelIndex first, QModelIndex second);
|
||||||
void onVersionSelectionChanged(QString data);
|
void onVersionSelectionChanged(QString data);
|
||||||
@ -77,4 +78,6 @@ private:
|
|||||||
|
|
||||||
ModpacksCH::Modpack selected;
|
ModpacksCH::Modpack selected;
|
||||||
QString selectedVersion;
|
QString selectedVersion;
|
||||||
|
|
||||||
|
bool initialised { false };
|
||||||
};
|
};
|
||||||
|
@ -36,12 +36,8 @@
|
|||||||
<property name="placeholderText">
|
<property name="placeholderText">
|
||||||
<string>Search and filter ...</string>
|
<string>Search and filter ...</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
<property name="clearButtonEnabled">
|
||||||
</item>
|
<bool>true</bool>
|
||||||
<item row="0" column="1">
|
|
||||||
<widget class="QPushButton" name="searchButton">
|
|
||||||
<property name="text">
|
|
||||||
<string>Search</string>
|
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
@ -49,15 +45,15 @@
|
|||||||
<layout class="QGridLayout" name="gridLayout_3">
|
<layout class="QGridLayout" name="gridLayout_3">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QTreeView" name="packView">
|
<widget class="QTreeView" name="packView">
|
||||||
|
<property name="alternatingRowColors">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
<property name="iconSize">
|
<property name="iconSize">
|
||||||
<size>
|
<size>
|
||||||
<width>48</width>
|
<width>48</width>
|
||||||
<height>48</height>
|
<height>48</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
<property name="alternatingRowColors">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
@ -76,7 +72,6 @@
|
|||||||
</widget>
|
</widget>
|
||||||
<tabstops>
|
<tabstops>
|
||||||
<tabstop>searchEdit</tabstop>
|
<tabstop>searchEdit</tabstop>
|
||||||
<tabstop>searchButton</tabstop>
|
|
||||||
<tabstop>versionSelectionBox</tabstop>
|
<tabstop>versionSelectionBox</tabstop>
|
||||||
</tabstops>
|
</tabstops>
|
||||||
<resources/>
|
<resources/>
|
||||||
|
Loading…
Reference in New Issue
Block a user