┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIsmael Asensio <[email protected]>2020-06-14 13:41:29 +0200
committerIsmael Asensio <[email protected]>2020-07-11 18:33:58 +0000
commit2fc117703f304ba053e2b58b692609f9632535d7 (patch)
treee5434bfb4f2776b43266c771cbca346136f18524
parent2463a35f3e4fd32cedd630b435618714728353ee (diff)
Add support to tags: scheme in DolphinQuery
It allows to start a search from a `tags:/mytag/` view. The use case is to refine a search on additional terms (another tags, ratings, etc)
-rw-r--r--src/search/dolphinquery.cpp13
-rw-r--r--src/tests/dolphinquerytest.cpp9
2 files changed, 22 insertions, 0 deletions
diff --git a/src/search/dolphinquery.cpp b/src/search/dolphinquery.cpp
index 663ed9909..4b5499378 100644
--- a/src/search/dolphinquery.cpp
+++ b/src/search/dolphinquery.cpp
@@ -73,6 +73,14 @@ namespace {
return textParts;
}
#endif
+
+ QString trimChar(const QString& text, const QLatin1Char aChar)
+ {
+ const int start = text.startsWith(aChar) ? 1 : 0;
+ const int end = (text.length() > 1 && text.endsWith(aChar)) ? 1 : 0;
+
+ return text.mid(start, text.length() - start - end);
+ }
}
@@ -83,6 +91,10 @@ DolphinQuery DolphinQuery::fromSearchUrl(const QUrl& searchUrl)
if (searchUrl.scheme() == QLatin1String("baloosearch")) {
model.parseBalooQuery();
+ } else if (searchUrl.scheme() == QLatin1String("tags")) {
+ // tags can contain # symbols or slashes within the Url
+ QString tag = trimChar(searchUrl.toString(QUrl::RemoveScheme), QLatin1Char('/'));
+ model.m_searchTerms << QStringLiteral("tag:%1").arg(tag);
}
return model;
@@ -92,6 +104,7 @@ bool DolphinQuery::supportsScheme(const QString& urlScheme)
{
static const QStringList supportedSchemes = {
QStringLiteral("baloosearch"),
+ QStringLiteral("tags"),
};
return supportedSchemes.contains(urlScheme);
diff --git a/src/tests/dolphinquerytest.cpp b/src/tests/dolphinquerytest.cpp
index 25bd26b81..9e1c76737 100644
--- a/src/tests/dolphinquerytest.cpp
+++ b/src/tests/dolphinquerytest.cpp
@@ -150,6 +150,15 @@ void DolphinSearchBoxTest::testBalooSearchParsing_data()
QTest::newRow("allTerms/space")
<< balooQueryUrl(textS + " " + filenameS + " " + rating + " AND " + modified + " AND " + tagS)
<< textS + " " + filenameS << QStringList({modified, rating, tagR}) << true << true;
+
+ // Test tags:/ URL scheme
+ const auto tagUrl = [](const QString &tag) { return QUrl(QStringLiteral("tags:/%1/").arg(tag)); };
+ const auto tagTerms = [](const QString &tag) { return QStringList{QStringLiteral("tag:%1").arg(tag)}; };
+
+ QTest::newRow("tagsUrl") << tagUrl("tagA") << "" << tagTerms("tagA") << false << false;
+ QTest::newRow("tagsUrl/space") << tagUrl("tagB with spaces") << "" << tagTerms("tagB with spaces") << false << false;
+ QTest::newRow("tagsUrl/hash") << tagUrl("tagC#hash") << "" << tagTerms("tagC#hash") << false << false;
+ QTest::newRow("tagsUrl/slash") << tagUrl("tagD/with/slash") << "" << tagTerms("tagD/with/slash") << false << false;
}
/**