From: Peter Penz Date: Thu, 10 Mar 2011 18:55:00 +0000 (+0100) Subject: Fix some search issues X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/6e0583f9888fcf46bb89735423b02b5ca53f1459?ds=sidebyside Fix some search issues - 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... --- diff --git a/src/panels/search/searchpanel.cpp b/src/panels/search/searchpanel.cpp index 715f683a4..bfcaeacb7 100644 --- a/src/panels/search/searchpanel.cpp +++ b/src/panels/search/searchpanel.cpp @@ -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(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) diff --git a/src/search/dolphinsearchbox.cpp b/src/search/dolphinsearchbox.cpp index dce47c469..8119e821f 100644 --- a/src/search/dolphinsearchbox.cpp +++ b/src/search/dolphinsearchbox.cpp @@ -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()); } }