vsearchengine.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #ifndef VSEARCHENGINE_H
  2. #define VSEARCHENGINE_H
  3. #include "isearchengine.h"
  4. #include <QThread>
  5. #include <QRegExp>
  6. #include <QAtomicInt>
  7. #include <QList>
  8. #include "vsearchconfig.h"
  9. #define BATCH_ITEM_SIZE 100
  10. class VSearchEngineWorker : public QThread
  11. {
  12. Q_OBJECT
  13. friend class VSearchEngine;
  14. public:
  15. explicit VSearchEngineWorker(QObject *p_parent = nullptr);
  16. void setData(const QStringList &p_files,
  17. const VSearchToken &p_token,
  18. const QSharedPointer<VSearchConfig> &p_config);
  19. public slots:
  20. void stop();
  21. signals:
  22. void resultItemsReady(const QList<QSharedPointer<VSearchResultItem> > &p_items);
  23. protected:
  24. void run() Q_DECL_OVERRIDE;
  25. private:
  26. void appendError(const QString &p_err);
  27. VSearchResultItem *searchFile(const QString &p_fileName);
  28. void postAndClearResults();
  29. QAtomicInt m_stop;
  30. QStringList m_files;
  31. VSearchToken m_token;
  32. QSharedPointer<VSearchConfig> m_config;
  33. VSearchState m_state;
  34. QString m_error;
  35. QList<QSharedPointer<VSearchResultItem> > m_results;
  36. };
  37. inline void VSearchEngineWorker::appendError(const QString &p_err)
  38. {
  39. if (m_error.isEmpty()) {
  40. m_error = p_err;
  41. } else {
  42. m_error = "\n" + p_err;
  43. }
  44. }
  45. class VSearchEngine : public ISearchEngine
  46. {
  47. Q_OBJECT
  48. public:
  49. explicit VSearchEngine(QObject *p_parent = nullptr);
  50. ~VSearchEngine();
  51. void search(const QSharedPointer<VSearchConfig> &p_config,
  52. const QSharedPointer<VSearchResult> &p_result) Q_DECL_OVERRIDE;
  53. void stop() Q_DECL_OVERRIDE;
  54. void clear() Q_DECL_OVERRIDE;
  55. private slots:
  56. void handleWorkerFinished();
  57. private:
  58. void clearAllWorkers();
  59. int m_finishedWorkers;
  60. QVector<VSearchEngineWorker *> m_workers;
  61. };
  62. #endif // VSEARCHENGINE_H