]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Allow to use wildcards when searching filenames or simple text files with the filenam...
authorPeter Penz <peter.penz19@gmail.com>
Fri, 8 Oct 2010 20:07:13 +0000 (20:07 +0000)
committerPeter Penz <peter.penz19@gmail.com>
Fri, 8 Oct 2010 20:07:13 +0000 (20:07 +0000)
svn path=/trunk/KDE/kdebase/apps/; revision=1183944

src/search/filenamesearchprotocol.cpp
src/search/filenamesearchprotocol.h

index a08d883f3a5af9968d07ebbee024e590244f9252..59e49782fa90aba9923b76cc75a3ae5b5d368196 100644 (file)
  
 #include <QCoreApplication>
 #include <QEventLoop>
+#include <QRegExp>
 
 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;
          }
      }
index 70d3e631c406d37c3b5aa3459b6d8a7b9e69be29..1a2b8ad68bf16e5e5b61ac424bc2ef3ff7310ba2 100644 (file)
@@ -23,6 +23,7 @@
 #include <kio/slavebase.h>
 
 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