File indexing completed on 2024-05-05 17:57:23

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