]> gitweb.hamatoma.de Git - reqt/commitdiff
ReFind: anti patterns (excluding filename patterns)
authorhama <hama@siduction.net>
Tue, 2 Jun 2015 21:22:25 +0000 (23:22 +0200)
committerhama <hama@siduction.net>
Tue, 2 Jun 2015 21:26:13 +0000 (23:26 +0200)
appl/refind/filefinder.cpp
appl/refind/filefinder.hpp
appl/refind/mainwindow.ui

index 8a754b9092a60c45df0ff4de55e6e3251bcf7751..a6b7a992d1d6a5c82954ddb9dd7f9489ab610351 100644 (file)
@@ -20,6 +20,7 @@
 FileFinder::FileFinder() :
             m_lines(0),
             m_patterns(),
+            m_antiPatterns(),
             m_minSize(0),
             m_maxSize(-1),
             m_youngerThan(),
@@ -67,10 +68,11 @@ QString fileSize(int64_t size){
 }
 /**
  * Returns the type of the file.
+ *
  * @param info  the file info
  * @return      a string describing the text
  */
-QString typeOf(QFileInfo& info){
+QString typeOf(const QFileInfo& info){
    QString rc;
    if (info.isSymLink()){
       if (info.isDir())
@@ -111,15 +113,30 @@ void FileFinder::fillTable(const QString& path, int depth, QTableWidget* table,
       entries = dir.entryInfoList(filters, QDir::NoSort);
    else
       entries = dir.entryInfoList(m_patterns, filters, QDir::NoSort);
-   QList <QFileInfo>::iterator it;
    QString relativePath = ReQStringUtil::nativePath(
       path.mid(1 + m_baseDir.length()));
    QString node, ext;
-
+   QList<QRegExp*> antiPatterns;
+   QStringList::const_iterator it3;
+   for (it3 = m_antiPatterns.begin(); it3 != m_antiPatterns.end(); ++it3){
+       QString pattern(*it3);
+       antiPatterns.append(new QRegExp(pattern, Qt::CaseInsensitive, QRegExp::Wildcard));
+   }
+   QList<QRegExp*>::const_iterator it2;
+   QList <QFileInfo>::const_iterator it;
    for (it = entries.begin(); it != entries.end(); ++it){
       node = it->fileName();
       if (node == "." || node == "..")
          continue;
+      bool ignore = false;
+      for (it2 = antiPatterns.begin(); it2 != antiPatterns.end(); ++it2){
+          if ((*it2)->indexIn(node) >= 0){
+              ignore = true;
+              break;
+          }
+      }
+      if (ignore)
+          continue;
       if (depth >= m_minDepth && isValid(*it)){
          if (m_lines >= table->rowCount()){
             table->setRowCount(m_lines + 500);
@@ -147,6 +164,9 @@ void FileFinder::fillTable(const QString& path, int depth, QTableWidget* table,
          m_lines++;
       }
    }
+   for (it2 = antiPatterns.begin(); it2 != antiPatterns.end(); ++it2){
+       delete *it2;
+   }
    if (depth < m_maxDepth || m_maxDepth < 0){
       entries = dir.entryInfoList(
          QDir::NoSymLinks | QDir::NoDotAndDotDot | QDir::AllDirs, QDir::NoSort);
@@ -287,7 +307,19 @@ void FileFinder::setOlderThan(const QDateTime& olderThan){
  * @param patterns  the patterns to set
  */
 void FileFinder::setPatterns(const QStringList& patterns){
-   m_patterns = patterns;
+   m_patterns.clear();
+   m_antiPatterns.clear();
+   QStringList::const_iterator it;
+   for (it = patterns.begin(); it != patterns.end(); ++it){
+       QString pattern = *it;
+       if (pattern.startsWith("-")){
+           if (pattern.length() > 1)
+               m_antiPatterns.append(pattern.mid(1));
+       } else {
+           if (pattern.length() > 0)
+               m_patterns.append(pattern);
+       }
+   }
 }
 
 /**
index b9a7ef949b12e538cd0e8c7aab47de3737d398cf..5de97717927e038bb77d6783bf1f5b5ac758b981 100644 (file)
@@ -40,6 +40,7 @@ private:
 private:
    int m_lines;
    QStringList m_patterns;
+   QStringList m_antiPatterns;
    int64_t m_minSize;
    int64_t m_maxSize;
    QDateTime m_youngerThan;
index 4f7bffc8fb0dd22e7c673348fbb825fc6c799004..3636517a64b1a6e0e5c00394db88d5712794edb1 100644 (file)
             <item row="2" column="1">
              <widget class="QComboBox" name="comboBoxFilePatterns">
               <property name="toolTip">
-               <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;A comma (',') separated list of filename patterns&lt;/p&gt;&lt;p&gt;Example: *.txt,*.odt&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+               <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;A comma (',') separated list of filename patterns. A prefix of '-'  means inversion: if a filename matches it will not be found.&lt;/p&gt;&lt;p&gt;Example: *.txt,*.odt&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
               </property>
               <property name="editable">
                <bool>true</bool>