File indexing completed on 2024-05-19 09:48:37
0001 /* 0002 SPDX-FileCopyrightText: 2001 Shie Erlich <krusader@users.sourceforge.net> 0003 SPDX-FileCopyrightText: 2001 Rafi Yanai <krusader@users.sourceforge.net> 0004 SPDX-FileCopyrightText: 2004-2022 Krusader Krew <https://krusader.org> 0005 0006 SPDX-License-Identifier: GPL-2.0-or-later 0007 */ 0008 0009 #ifndef KRSEARCHMOD_H 0010 #define KRSEARCHMOD_H 0011 0012 // QtCore 0013 #include <QDateTime> 0014 #include <QElapsedTimer> 0015 #include <QObject> 0016 #include <QStack> 0017 #include <QStringList> 0018 #include <QUrl> 0019 0020 #include <KIO/Global> 0021 0022 class KrQuery; 0023 class FileItem; 0024 class FileSystem; 0025 class DefaultFileSystem; 0026 class VirtualFileSystem; 0027 0028 /** 0029 * Search for files based on a search query. 0030 * 0031 * Subdirectories are included if query->isRecursive() is true. 0032 */ 0033 class KrSearchMod : public QObject 0034 { 0035 Q_OBJECT 0036 public: 0037 explicit KrSearchMod(const KrQuery *query); 0038 ~KrSearchMod() override; 0039 0040 void start(); 0041 void stop(); 0042 0043 private: 0044 void scanUrl(const QUrl &url); 0045 void scanDirectory(const QUrl &url); 0046 FileSystem *getFileSystem(const QUrl &url); 0047 0048 signals: 0049 void searching(const QString &url); 0050 void found(const FileItem &file, const QString &foundText); 0051 // NOTE: unused 0052 void error(const QUrl &url); 0053 void finished(); 0054 0055 private slots: 0056 void slotProcessEvents(bool &stopped); 0057 0058 private: 0059 KrQuery *m_query; 0060 DefaultFileSystem *m_defaultFileSystem; 0061 VirtualFileSystem *m_virtualFileSystem; 0062 0063 bool m_stopSearch; 0064 0065 QStack<QUrl> m_scannedUrls; 0066 QStack<QUrl> m_unScannedUrls; 0067 QElapsedTimer m_timer; 0068 }; 0069 0070 #endif