]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Fix some search issues
authorPeter Penz <peter.penz19@gmail.com>
Thu, 10 Mar 2011 18:55:00 +0000 (19:55 +0100)
committerPeter Penz <peter.penz19@gmail.com>
Thu, 10 Mar 2011 18:58:26 +0000 (19:58 +0100)
- Always merge the query from the "Find:"-field with the current facet-query. This assures that the facet-query never gets overwritten if the user changes the "Find:"-field.
- Always trigger a searching if the text of the "Find:"-field has been cleared.

Still a lot of usability issues are left, but this is at least a first step...

src/panels/search/searchpanel.cpp
src/search/dolphinsearchbox.cpp

index 715f683a43affa725310523f09ce1982348957fe..bfcaeacb712f991c7389d67df1daf0309e55095b 100644 (file)
@@ -72,8 +72,16 @@ bool SearchPanel::urlChanged()
     }
 
     if (isVisible() && DolphinSearchInformation::instance().isIndexingEnabled()) {
-        setQuery(Nepomuk::Query::Query());
+        const Nepomuk::Query::FileQuery query(m_unfacetedRestQuery && m_facetWidget->queryTerm());
+        if (query.toSearchUrl() == url()) {
+            // The new URL has been triggered by the SearchPanel itself in
+            // slotQueryTermChanged() and no further handling is required.
+            return true;
+        }
 
+        // Reset the current query and disable the facet-widget until
+        // the new query has been determined by KIO::stat():
+        setQuery(Nepomuk::Query::Query());
         delete m_lastSetUrlStatJob;
 
         m_lastSetUrlStatJob = KIO::stat(url(), KIO::HideProgressInfo);
@@ -178,9 +186,12 @@ void SearchPanel::slotSetUrlStatFinished(KJob* job)
 
     const KIO::UDSEntry uds = static_cast<KIO::StatJob*>(job)->statResult();
     const QString nepomukQueryStr = uds.stringValue(KIO::UDSEntry::UDS_NEPOMUK_QUERY);
+    const Nepomuk::Query::Term facetQueryTerm = m_facetWidget->queryTerm();
     Nepomuk::Query::FileQuery nepomukQuery;
     if (!nepomukQueryStr.isEmpty()) {
-        nepomukQuery = Nepomuk::Query::Query::fromString(nepomukQueryStr);
+        // Always merge the query that has been retrieved by SearchPanel::setUrl() with
+        // the current facet-query, so that the user settings don't get lost.
+        nepomukQuery = Nepomuk::Query::Query::fromString(nepomukQueryStr) && facetQueryTerm;
     } else if (url().isLocalFile()) {
         // Fallback query for local file URLs: List all files
         Nepomuk::Query::ComparisonTerm compTerm(
@@ -192,7 +203,13 @@ void SearchPanel::slotSetUrlStatFinished(KJob* job)
         }
         nepomukQuery.setTerm(compTerm);
     }
+
     setQuery(nepomukQuery);
+
+    if (facetQueryTerm.isValid()) {
+        Nepomuk::Query::FileQuery query(m_unfacetedRestQuery && facetQueryTerm);
+        emit urlActivated(query.toSearchUrl());
+    }
 }
 
 void SearchPanel::slotQueryTermChanged(const Nepomuk::Query::Term& term)
index dce47c4691778ef5767a075ba82b2df063b04f88..8119e821f74d4ad4a4587094fe92d3469951c14c 100644 (file)
@@ -205,11 +205,7 @@ void DolphinSearchBox::slotConfigurationChanged()
 
 void DolphinSearchBox::slotSearchTextChanged(const QString& text)
 {
-    if (text.isEmpty()) {
-        m_startSearchTimer->stop();
-    } else {
-        m_startSearchTimer->start();
-    }
+    m_startSearchTimer->start();
     emit searchTextChanged(text);
 }
 
@@ -355,23 +351,20 @@ KUrl DolphinSearchBox::nepomukUrlForSearching() const
 #ifdef HAVE_NEPOMUK
     Nepomuk::Query::AndTerm andTerm;
 
-    // Add input from search filter
     const QString text = m_searchInput->text();
-    if (!text.isEmpty()) {
-        if (m_fileNameButton->isChecked()) {
-            QString regex = QRegExp::escape(text);
-            regex.replace("\\*", QLatin1String(".*"));
-            regex.replace("\\?", QLatin1String("."));
-            regex.replace("\\", "\\\\");
-            andTerm.addSubTerm(Nepomuk::Query::ComparisonTerm(
-                                    Nepomuk::Vocabulary::NFO::fileName(),
-                                    Nepomuk::Query::LiteralTerm(regex),
-                                    Nepomuk::Query::ComparisonTerm::Regexp));
-        } else {
-            const Nepomuk::Query::Query customQuery = Nepomuk::Query::QueryParser::parseQuery(text, Nepomuk::Query::QueryParser::DetectFilenamePattern);
-            if (customQuery.isValid()) {
-                andTerm.addSubTerm(customQuery.term());
-            }
+    if (m_fileNameButton->isChecked()) {
+        QString regex = QRegExp::escape(text);
+        regex.replace("\\*", QLatin1String(".*"));
+        regex.replace("\\?", QLatin1String("."));
+        regex.replace("\\", "\\\\");
+        andTerm.addSubTerm(Nepomuk::Query::ComparisonTerm(
+                                Nepomuk::Vocabulary::NFO::fileName(),
+                                Nepomuk::Query::LiteralTerm(regex),
+                                Nepomuk::Query::ComparisonTerm::Regexp));
+    } else {
+        const Nepomuk::Query::Query customQuery = Nepomuk::Query::QueryParser::parseQuery(text, Nepomuk::Query::QueryParser::DetectFilenamePattern);
+        if (customQuery.isValid()) {
+            andTerm.addSubTerm(customQuery.term());
         }
     }