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...
This commit is contained in:
Peter Penz 2011-03-10 19:55:00 +01:00
parent 1aa14306fc
commit 6e0583f988
2 changed files with 33 additions and 23 deletions

View 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)

View 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());
}
}