1 #include "searchworker.h"
6 SearchWorker::SearchWorker(QObject
*parent
) :
8 m_cancelled(NotCancelled
)
12 SearchWorker::~SearchWorker()
16 void SearchWorker::startSearch(QString directory
, QString searchTerm
)
19 emit
errorOccurred(tr("Search already in progress"), "");
22 if (directory
.isEmpty() || searchTerm
.isEmpty()) {
23 emit
errorOccurred(tr("Bad search parameters"), "");
27 m_directory
= directory
;
28 m_searchTerm
= searchTerm
;
29 m_currentDirectory
= directory
;
30 m_cancelled
.storeRelease(NotCancelled
);
34 void SearchWorker::cancel()
36 m_cancelled
.storeRelease(Cancelled
);
39 void SearchWorker::run() Q_DECL_OVERRIDE
41 QString errMsg
= searchRecursively(m_directory
, m_searchTerm
.toLower());
42 if (!errMsg
.isEmpty())
43 emit
errorOccurred(errMsg
, m_currentDirectory
);
45 emit
progressChanged("");
49 QString
SearchWorker::searchRecursively(QString directory
, QString searchTerm
)
51 // skip some system folders - they don't really have any interesting stuff
52 if (directory
.startsWith("/proc") ||
53 directory
.startsWith("/sys/block"))
57 if (!dir
.exists()) // skip "non-existent" directories (found in /dev)
61 m_currentDirectory
= directory
;
62 emit
progressChanged(m_currentDirectory
);
65 bool hiddenSetting
= settings
.value("show-hidden-files", false).toBool();
66 QDir::Filter hidden
= hiddenSetting
? QDir::Hidden
: (QDir::Filter
)0;
69 QStringList names
= dir
.entryList(QDir::NoDotAndDotDot
| QDir::AllDirs
| hidden
);
70 for (int i
= 0 ; i
< names
.count() ; ++i
) {
72 if (m_cancelled
.loadAcquire() == Cancelled
)
75 QString filename
= names
.at(i
);
76 QString fullpath
= dir
.absoluteFilePath(filename
);
78 if (filename
.toLower().indexOf(searchTerm
) >= 0)
79 emit
matchFound(fullpath
);
81 QFileInfo
info(fullpath
); // skip symlinks to prevent infinite loops
85 QString errmsg
= searchRecursively(fullpath
, searchTerm
);
86 if (!errmsg
.isEmpty())
91 names
= dir
.entryList(QDir::Files
| hidden
);
92 for (int i
= 0 ; i
< names
.count() ; ++i
) {
94 if (m_cancelled
.loadAcquire() == Cancelled
)
97 QString filename
= names
.at(i
);
98 QString fullpath
= dir
.absoluteFilePath(filename
);
100 if (filename
.toLower().indexOf(searchTerm
) >= 0)
101 emit
matchFound(fullpath
);