From 396706a741c3bb43be2aac6f77cc8e6412c6187c Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Fri, 8 Oct 2010 20:07:13 +0000 Subject: [PATCH] Allow to use wildcards when searching filenames or simple text files with the filenamesearchprotocol. svn path=/trunk/KDE/kdebase/apps/; revision=1183944 --- src/search/filenamesearchprotocol.cpp | 17 ++++++++++++----- src/search/filenamesearchprotocol.h | 3 ++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/search/filenamesearchprotocol.cpp b/src/search/filenamesearchprotocol.cpp index a08d883f3..59e49782f 100644 --- a/src/search/filenamesearchprotocol.cpp +++ b/src/search/filenamesearchprotocol.cpp @@ -26,24 +26,29 @@ #include #include +#include FileNameSearchProtocol::FileNameSearchProtocol( const QByteArray &pool, const QByteArray &app ) : SlaveBase("search", pool, app), m_checkContent(false), - m_searchPattern() + m_regExp(0) { } FileNameSearchProtocol::~FileNameSearchProtocol() { + delete m_regExp; + m_regExp = 0; } void FileNameSearchProtocol::listDir(const KUrl& url) { + delete m_regExp; + m_regExp = 0; + const QStringList searchValues = url.allQueryItemValues("search"); - m_searchPattern.clear(); if (!searchValues.isEmpty()) { - m_searchPattern = searchValues.first(); + m_regExp = new QRegExp(searchValues.first(), Qt::CaseInsensitive, QRegExp::Wildcard); } m_checkContent = false; @@ -79,7 +84,7 @@ void FileNameSearchProtocol::searchDirectory(const KUrl& directory) const KFileItemList items = dirLister->items(); foreach (const KFileItem& item, items) { bool addItem = false; - if (m_searchPattern.isEmpty() || item.name().contains(m_searchPattern, Qt::CaseInsensitive)) { + if ((m_regExp == 0) || item.name().contains(*m_regExp)) { addItem = true; } else if (m_checkContent && item.mimetype().startsWith(QLatin1String("text/"))) { addItem = containsPattern(item.url()); @@ -105,6 +110,8 @@ void FileNameSearchProtocol::searchDirectory(const KUrl& directory) bool FileNameSearchProtocol::containsPattern(const KUrl& fileName) const { + Q_ASSERT(m_regExp != 0); + QFile file(fileName.path()); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { return false; @@ -113,7 +120,7 @@ bool FileNameSearchProtocol::containsPattern(const KUrl& fileName) const QTextStream in(&file); while (!in.atEnd()) { const QString line = in.readLine(); - if (line.contains(m_searchPattern)) { + if (line.contains(*m_regExp)) { return true; } } diff --git a/src/search/filenamesearchprotocol.h b/src/search/filenamesearchprotocol.h index 70d3e631c..1a2b8ad68 100644 --- a/src/search/filenamesearchprotocol.h +++ b/src/search/filenamesearchprotocol.h @@ -23,6 +23,7 @@ #include class KUrl; +class QRegExp; /** * @brief Lists files where the filename matches do a given query. @@ -49,7 +50,7 @@ private: bool containsPattern(const KUrl& fileName) const; bool m_checkContent; - QString m_searchPattern; + QRegExp* m_regExp; }; #endif -- 2.47.3