diff --git a/src/search/dolphinfacetswidget.h b/src/search/dolphinfacetswidget.h --- a/src/search/dolphinfacetswidget.h +++ b/src/search/dolphinfacetswidget.h @@ -52,13 +52,12 @@ explicit DolphinFacetsWidget(QWidget* parent = nullptr); ~DolphinFacetsWidget() override; - void resetOptions(); - - QString ratingTerm() const; + QStringList searchTerms() const; QString facetType() const; - bool isRatingTerm(const QString& term) const; - void setRatingTerm(const QString& term); + bool isSearchTerm(const QString& term) const; + void setSearchTerm(const QString& term); + void resetSearchTerms(); void setFacetType(const QString& type); diff --git a/src/search/dolphinfacetswidget.cpp b/src/search/dolphinfacetswidget.cpp --- a/src/search/dolphinfacetswidget.cpp +++ b/src/search/dolphinfacetswidget.cpp @@ -86,7 +86,7 @@ topLayout->addWidget(m_ratingSelector); topLayout->addWidget(m_tagsSelector); - resetOptions(); + resetSearchTerms(); } DolphinFacetsWidget::~DolphinFacetsWidget() @@ -99,12 +99,12 @@ if (isEnabled()) { updateTagsSelector(); } else { - resetOptions(); + resetSearchTerms(); } } } -void DolphinFacetsWidget::resetOptions() +void DolphinFacetsWidget::resetSearchTerms() { m_typeSelector->setCurrentIndex(0); m_dateSelector->setCurrentIndex(0); @@ -115,7 +115,7 @@ updateTagsMenu(); } -QString DolphinFacetsWidget::ratingTerm() const +QStringList DolphinFacetsWidget::searchTerms() const { QStringList terms; @@ -135,58 +135,44 @@ } } - return terms.join(QLatin1String(" AND ")); + return terms; } QString DolphinFacetsWidget::facetType() const { return m_typeSelector->currentData().toString(); } -bool DolphinFacetsWidget::isRatingTerm(const QString& term) const +bool DolphinFacetsWidget::isSearchTerm(const QString& term) const { - const QStringList subTerms = term.split(' ', QString::SkipEmptyParts); - - // If term has sub terms, then sone of the sub terms are always "rating" and "modified" terms. - bool containsRating = false; - bool containsModified = false; - bool containsTag = false; - - foreach (const QString& subTerm, subTerms) { - if (subTerm.startsWith(QLatin1String("rating>="))) { - containsRating = true; - } else if (subTerm.startsWith(QLatin1String("modified>="))) { - containsModified = true; - } else if (subTerm.startsWith(QLatin1String("tag:")) || - subTerm.startsWith(QLatin1String("tag="))) { - containsTag = true; + static const QLatin1String searchTokens[] { + QLatin1String("modified>="), + QLatin1String("rating>="), + QLatin1String("tag:"), QLatin1String("tag=") + }; + + for (const auto &searchToken : searchTokens) { + if (term.startsWith(searchToken)) { + return true; } } - - return containsModified || containsRating || containsTag; + return false; } -void DolphinFacetsWidget::setRatingTerm(const QString& term) +void DolphinFacetsWidget::setSearchTerm(const QString& term) { - // If term has sub terms, then the sub terms are always "rating" and "modified" terms. - // If term has no sub terms, then the term itself is either a "rating" term or a "modified" - // term. To avoid code duplication we add term to subTerms list, if the list is empty. - QStringList subTerms = term.split(' ', QString::SkipEmptyParts); - - foreach (const QString& subTerm, subTerms) { - if (subTerm.startsWith(QLatin1String("modified>="))) { - const QString value = subTerm.mid(10); - const QDate date = QDate::fromString(value, Qt::ISODate); - setTimespan(date); - } else if (subTerm.startsWith(QLatin1String("rating>="))) { - const QString value = subTerm.mid(8); - const int stars = value.toInt() / 2; - setRating(stars); - } else if (subTerm.startsWith(QLatin1String("tag:")) || - subTerm.startsWith(QLatin1String("tag="))) { - const QString value = subTerm.mid(4); - addSearchTag(value); - } + if (term.startsWith(QLatin1String("modified>="))) { + const QString value = term.mid(10); + const QDate date = QDate::fromString(value, Qt::ISODate); + setTimespan(date); + } else if (term.startsWith(QLatin1String("rating>="))) { + const QString value = term.mid(8); + const int stars = value.toInt() / 2; + setRating(stars); + } else if (term.startsWith(QLatin1String("tag:")) || + term.startsWith(QLatin1String("tag="))) { + const QString value = term.mid(4); + addSearchTag(value); } } diff --git a/src/search/dolphinquery.cpp b/src/search/dolphinquery.cpp --- a/src/search/dolphinquery.cpp +++ b/src/search/dolphinquery.cpp @@ -26,7 +26,7 @@ namespace { /** Checks if a given term in the Baloo::Query::searchString() is a special search term. - * This is a copy of `DolphinFacetsWidget::isRatingTerm()` method. + * This is a copy of `DolphinFacetsWidget::isSearchTerm()` method. */ bool isSearchTerm(const QString& term) { diff --git a/src/search/dolphinsearchbox.cpp b/src/search/dolphinsearchbox.cpp --- a/src/search/dolphinsearchbox.cpp +++ b/src/search/dolphinsearchbox.cpp @@ -477,11 +477,7 @@ Baloo::Query query; query.addType(m_facetsWidget->facetType()); - QStringList queryStrings; - QString ratingQuery = m_facetsWidget->ratingTerm(); - if (!ratingQuery.isEmpty()) { - queryStrings << ratingQuery; - } + QStringList queryStrings = m_facetsWidget->searchTerms(); if (m_contentButton->isChecked()) { queryStrings << text; @@ -517,11 +513,11 @@ setText(query.text()); - m_facetsWidget->resetOptions(); + m_facetsWidget->resetSearchTerms(); m_facetsWidget->setFacetType(query.type()); const QStringList searchTerms = query.searchTerms(); for (const QString& searchTerm : searchTerms) { - m_facetsWidget->setRatingTerm(searchTerm); + m_facetsWidget->setSearchTerm(searchTerm); } m_startSearchTimer->stop();