#endif
namespace {
+#ifdef HAVE_BALOO
/** Checks if a given term in the Baloo::Query::searchString() is a special search term
* @return: the specific search token of the term, or an empty QString() if none is found
*/
QStringList splitOutsideQuotes(const QString& text)
{
- const QRegularExpression subTermsRegExp("(\\S*?\"[^\"]*?\"|(?<=\\s|^)\\S+(?=\\s|$))");
+ // Match groups on 3 possible conditions:
+ // - Groups with two leading quotes must close both on them (filename:""abc xyz" tuv")
+ // - Groups enclosed in quotes
+ // - Words separated by spaces
+ const QRegularExpression subTermsRegExp("(\\S*?\"\"[^\"]+\"[^\"]+\"+|\\S*?\"[^\"]+\"+|(?<=\\s|^)\\S+(?=\\s|$))");
auto subTermsMatchIterator = subTermsRegExp.globalMatch(text);
QStringList textParts;
}
return textParts;
}
+#endif
}
-DolphinQuery DolphinQuery::fromBalooSearchUrl(const QUrl& searchUrl)
+
+DolphinQuery DolphinQuery::fromSearchUrl(const QUrl& searchUrl)
{
DolphinQuery model;
model.m_searchUrl = searchUrl;
+ if (searchUrl.scheme() == QLatin1String("baloosearch")) {
+ model.parseBalooQuery();
+ }
+
+ return model;
+}
+
+bool DolphinQuery::supportsScheme(const QString& urlScheme)
+{
+ static const QStringList supportedSchemes = {
+ QStringLiteral("baloosearch"),
+ };
+
+ return supportedSchemes.contains(urlScheme);
+}
+
+void DolphinQuery::parseBalooQuery()
+{
#ifdef HAVE_BALOO
- const Baloo::Query query = Baloo::Query::fromSearchUrl(searchUrl);
+ const Baloo::Query query = Baloo::Query::fromSearchUrl(m_searchUrl);
- model.m_includeFolder = query.includeFolder();
+ m_includeFolder = query.includeFolder();
const QStringList types = query.types();
- model.m_fileType = types.isEmpty() ? QString() : types.first();
+ m_fileType = types.isEmpty() ? QString() : types.first();
QStringList textParts;
QString fileName;
if (token == QLatin1String("filename:")) {
if (!value.isEmpty()) {
fileName = value;
- model.m_hasFileName = true;
+ m_hasFileName = true;
}
continue;
} else if (!token.isEmpty()) {
- model.m_searchTerms << token + value;
+ m_searchTerms << token + value;
continue;
} else if (subTerm == QLatin1String("AND") && subTerm != subTerms.at(0) && subTerm != subTerms.back()) {
continue;
} else if (!value.isEmpty()) {
textParts << value;
- model.m_hasContentSearch = true;
+ m_hasContentSearch = true;
}
}
- if (model.m_hasFileName) {
- if (model.m_hasContentSearch) {
+ if (m_hasFileName) {
+ if (m_hasContentSearch) {
textParts << QStringLiteral("filename:\"%1\"").arg(fileName);
} else {
textParts << fileName;
}
}
- model.m_searchText = textParts.join(QLatin1Char(' '));
-
+ m_searchText = textParts.join(QLatin1Char(' '));
#endif
- return model;
}
+
QUrl DolphinQuery::searchUrl() const
{
return m_searchUrl;