From 8d92c8be7f117dee18710ee1ba6b7cfa45d3f5f0 Mon Sep 17 00:00:00 2001 From: Ismael Asensio Date: Wed, 13 Nov 2019 22:16:35 +0100 Subject: refactor(search): De-couple baloo URL parsing logic from UI Summary: Extracts the logic that parses `baloosearch:` urls into a new model class. The parser logic itself is kept as is. The search box UI is later updated using the model fields. This refactor has been proposed by @bruns in the review of D24422, as it largely simplifies the unit tests and further expansion/improvements. Test Plan: No behavior changes. Test case is added in the follow-up revision: D25258 Reviewers: #dolphin, elvisangelaccio, bruns Reviewed By: #dolphin, elvisangelaccio, bruns Subscribers: ngraham, bruns, kfm-devel Tags: #dolphin Differential Revision: https://phabricator.kde.org/D25257 --- src/search/dolphinsearchbox.cpp | 34 ++++++++++------------------------ 1 file changed, 10 insertions(+), 24 deletions(-) (limited to 'src/search/dolphinsearchbox.cpp') diff --git a/src/search/dolphinsearchbox.cpp b/src/search/dolphinsearchbox.cpp index 751b23942..ee7cbe628 100644 --- a/src/search/dolphinsearchbox.cpp +++ b/src/search/dolphinsearchbox.cpp @@ -22,6 +22,7 @@ #include "dolphin_searchsettings.h" #include "dolphinfacetswidget.h" +#include "dolphinquery.h" #include "panels/places/placesitemmodel.h" #include @@ -143,7 +144,8 @@ QUrl DolphinSearchBox::urlForSearching() const void DolphinSearchBox::fromSearchUrl(const QUrl& url) { if (url.scheme() == QLatin1String("baloosearch")) { - fromBalooSearchUrl(url); + const DolphinQuery query = DolphinQuery::fromBalooSearchUrl(url); + updateFromQuery(query); } else if (url.scheme() == QLatin1String("filenamesearch")) { const QUrlQuery query(url); setText(query.queryItemValue(QStringLiteral("search"))); @@ -498,11 +500,8 @@ QUrl DolphinSearchBox::balooUrlForSearching() const #endif } -void DolphinSearchBox::fromBalooSearchUrl(const QUrl& url) +void DolphinSearchBox::updateFromQuery(const DolphinQuery& query) { -#ifdef HAVE_BALOO - const Baloo::Query query = Baloo::Query::fromSearchUrl(url); - // Block all signals to avoid unnecessary "searchRequest" signals // while we adjust the search text and the facet widget. blockSignals(true); @@ -514,30 +513,17 @@ void DolphinSearchBox::fromBalooSearchUrl(const QUrl& url) setSearchPath(QUrl::fromLocalFile(QDir::homePath())); } - m_facetsWidget->resetOptions(); - - setText(query.searchString()); - - QStringList types = query.types(); - if (!types.isEmpty()) { - m_facetsWidget->setFacetType(types.first()); - } + setText(query.text()); - const QStringList subTerms = query.searchString().split(' ', QString::SkipEmptyParts); - foreach (const QString& subTerm, subTerms) { - if (subTerm.startsWith(QLatin1String("filename:"))) { - const QString value = subTerm.mid(9); - setText(value); - } else if (m_facetsWidget->isRatingTerm(subTerm)) { - m_facetsWidget->setRatingTerm(subTerm); - } + m_facetsWidget->resetOptions(); + m_facetsWidget->setFacetType(query.type()); + const QStringList searchTerms = query.searchTerms(); + for (const QString& searchTerm : searchTerms) { + m_facetsWidget->setRatingTerm(searchTerm); } m_startSearchTimer->stop(); blockSignals(false); -#else - Q_UNUSED(url) -#endif } void DolphinSearchBox::updateFacetsVisible() -- cgit v1.3