#ifndef SEARCHENGINE_H #define SEARCHENGINE_H #include "isearchengine.h" #include #include #include #include #include #include "searchtoken.h" #include "searchdata.h" namespace vnotex { struct SearchResultItem; class FileSearchEngineWorker : public AsyncWorker { Q_OBJECT friend class FileSearchEngine; public: explicit FileSearchEngineWorker(QObject *p_parent = nullptr); ~FileSearchEngineWorker() = default; void setData(const QVector &p_items, const QSharedPointer &p_option, const SearchToken &p_token); signals: void resultItemsReady(const QVector> &p_items); protected: void run() Q_DECL_OVERRIDE; private: void appendError(const QString &p_err); void searchFile(const QString &p_filePath, const QString &p_displayPath); void processBatchResults(); QVector m_items; SearchToken m_token; QSharedPointer m_option; SearchState m_state = SearchState::Idle; QStringList m_errors; QVector> m_results; }; class FileSearchEngine : public ISearchEngine { Q_OBJECT public: FileSearchEngine(); ~FileSearchEngine(); void search(const QSharedPointer &p_option, const SearchToken &p_token, const QVector &p_items) Q_DECL_OVERRIDE; void stop() Q_DECL_OVERRIDE; void clear() Q_DECL_OVERRIDE; private slots: void handleWorkerFinished(); private: void clearWorkers(); // Need non-virtual version of this. void stopInternal(); // Need non-virtual version of this. void clearInternal(); int m_numOfFinishedWorkers = 0; QVector> m_workers; }; } #endif // SEARCHENGINE_H