X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/732697d0d6fcc3a834a85865dcd88870e127711b..405dd624fb:/src/search/dolphinfacetswidget.cpp diff --git a/src/search/dolphinfacetswidget.cpp b/src/search/dolphinfacetswidget.cpp index ea11a400f..d9943abcd 100644 --- a/src/search/dolphinfacetswidget.cpp +++ b/src/search/dolphinfacetswidget.cpp @@ -115,7 +115,7 @@ void DolphinFacetsWidget::resetSearchTerms() updateTagsMenu(); } -QString DolphinFacetsWidget::searchTerms() const +QStringList DolphinFacetsWidget::searchTerms() const { QStringList terms; @@ -131,11 +131,15 @@ QString DolphinFacetsWidget::searchTerms() const if (!m_searchTags.isEmpty()) { for (auto const &tag : m_searchTags) { - terms << QStringLiteral("tag:%1").arg(tag); + if (tag.contains(QLatin1Char(' '))) { + terms << QStringLiteral("tag:\"%1\"").arg(tag); + } else { + terms << QStringLiteral("tag:%1").arg(tag); + } } } - return terms.join(QLatin1String(" AND ")); + return terms; } QString DolphinFacetsWidget::facetType() const @@ -145,48 +149,34 @@ QString DolphinFacetsWidget::facetType() 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::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); } } @@ -294,6 +284,8 @@ void DolphinFacetsWidget::updateTagsMenuItems(const QUrl&, const KFileItemList& removeSearchTag(tagName); } emit facetChanged(); + + m_tagsSelector->menu()->show(); }); }