From cbf833fa08d0f60c62984ff3c6a89dba529c26eb Mon Sep 17 00:00:00 2001 From: iaom Date: Thu, 6 Jul 2023 15:27:23 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B2=BE=E7=AE=80=E4=BB=A3=E7=A0=81=EF=BC=9B?= =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=90=9C=E7=B4=A2=E6=9C=8D=E5=8A=A1=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E7=94=9F=E5=91=BD=E5=91=A8=E6=9C=9F=E7=AE=A1=E7=90=86?= =?UTF-8?q?;=E5=A2=9E=E5=8A=A0=E6=90=9C=E7=B4=A2=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E9=9A=90=E8=97=8F=E6=96=87=E4=BB=B6=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../search-task-plugin-iface.h | 2 +- .../search-task-plugin-manager.cpp | 9 +- .../search-controller-private.h | 86 ---- .../searchinterface/search-controller.cpp | 378 +++++------------- libsearch/searchinterface/search-controller.h | 15 +- .../searchinterface/search-interface.pri | 1 - .../searchtasks/app-search-task.cpp | 12 +- .../searchtasks/app-search-task.h | 6 +- .../searchtasks/file-content-search-task.cpp | 16 +- .../searchtasks/file-content-search-task.h | 10 +- .../searchtasks/file-search-task.cpp | 28 +- .../searchtasks/file-search-task.h | 9 +- .../searchinterface/ukui-search-task.cpp | 50 +-- libsearch/searchinterface/ukui-search-task.h | 6 + 14 files changed, 186 insertions(+), 442 deletions(-) delete mode 100644 libsearch/searchinterface/search-controller-private.h diff --git a/libsearch/plugininterface/search-task-plugin-iface.h b/libsearch/plugininterface/search-task-plugin-iface.h index 4a7f4fe..237240c 100644 --- a/libsearch/plugininterface/search-task-plugin-iface.h +++ b/libsearch/plugininterface/search-task-plugin-iface.h @@ -34,7 +34,7 @@ class SearchTaskPluginIface : public QObject, public PluginInterface { Q_OBJECT public: - virtual void setController(const std::shared_ptr &searchController) = 0; + virtual void setController(const SearchController &searchController) = 0; virtual QString getCustomSearchType() = 0; virtual SearchProperty::SearchType getSearchType() = 0; //Asynchronous,multithread. diff --git a/libsearch/pluginmanage/search-task-plugin-manager.cpp b/libsearch/pluginmanage/search-task-plugin-manager.cpp index f48da76..d29d620 100644 --- a/libsearch/pluginmanage/search-task-plugin-manager.cpp +++ b/libsearch/pluginmanage/search-task-plugin-manager.cpp @@ -76,13 +76,13 @@ SearchTaskPluginIface *SearchTaskPluginManager::getPlugin(SearchProperty::Search } else { switch (searchType) { case SearchProperty::SearchType::File: - searchPlugin = new FileSearchTask(this); + searchPlugin = new FileSearchTask(); break; case SearchProperty::SearchType::FileContent: - searchPlugin = new FileContentSearchTask(this); + searchPlugin = new FileContentSearchTask(); break; case SearchProperty::SearchType::Application: - searchPlugin = new AppSearchTask(this); + searchPlugin = new AppSearchTask(); break; default: break; @@ -148,6 +148,8 @@ void SearchTaskPluginManager::destroyPlugins(const QUuid &uuid) ManagedPlugin::~ManagedPlugin() { + qDeleteAll(m_internalPlugins); + qDeleteAll(m_externalPlugin); } bool ManagedPlugin::insertInternalPlugin(const SearchProperty::SearchType &searchType, SearchTaskPluginIface *plugin) @@ -163,7 +165,6 @@ bool ManagedPlugin::insertInternalPlugin(const SearchProperty::SearchType &searc plugin->deleteLater(); } - return false; } diff --git a/libsearch/searchinterface/search-controller-private.h b/libsearch/searchinterface/search-controller-private.h deleted file mode 100644 index da4ef37..0000000 --- a/libsearch/searchinterface/search-controller-private.h +++ /dev/null @@ -1,86 +0,0 @@ -#ifndef SEARCHCONTROLLERPRIVATE_H -#define SEARCHCONTROLLERPRIVATE_H - -#include -#include -#include "search-controller.h" -#include "search-result-property.h" -namespace UkuiSearch { - -class SearchControllerPrivate -{ -public: - explicit SearchControllerPrivate(SearchController *parent); - ~SearchControllerPrivate(); - size_t refreshSearchId(); - DataQueue* refreshDataqueue(); - DataQueue* initDataQueue(); - - void addSearchDir(const QString &path); - void setRecurse(bool recurse = true); - void addKeyword(const QString &keyword); - void setActiveKeywordSegmentation(bool active); - void addFileLabel(const QString &label); - void setOnlySearchFile(bool onlySearchFile); - void setOnlySearchDir(bool onlySearchDir); - void setSearchOnlineApps(bool searchOnlineApps); - - size_t getCurrentSearchId(); - DataQueue* getDataQueue(); - SearchResultProperties getResultProperties(SearchProperty::SearchType searchType); - QStringList getCustomResultDataType(QString customSearchType); - bool beginSearchIdCheck(size_t searchId); - void finishSearchIdCheck(); - void stop(); - QStringList getSearchDir(); - bool isRecurse(); - QStringList getKeyword(); - bool isKeywordSegmentationActived(); - QStringList getFileLabel(); - bool isSearchFileOnly(); - bool isSearchDirOnly(); - bool isSearchOnlineApps(); - void clearAllConditions(); - void clearKeyWords(); - void clearSearchDir(); - void clearFileLabel(); - - bool setResultProperties(SearchProperty::SearchType searchType, UkuiSearch::SearchResultProperties searchResultProperties); - void setCustomResultDataType(QString customSearchType, QStringList dataType); - - /** - * @brief - * @param maxResults 每次搜索结果集的数量 - */ - void setMaxResultNum(unsigned int maxResults); - void setInformNum(int num = 0); - - unsigned int maxResults() const; - int informNum() const; - -private: - void copyData(); - - std::shared_ptr> m_sharedDataQueue = nullptr; - size_t m_searchId = 0; - QMutex m_searchIdMutex; - SearchController *q = nullptr; - std::shared_ptr m_formerController = nullptr; - - QStringList m_keywords; - QStringList m_searchDirs; - QStringList m_FileLabels; - bool m_recurse = true; - bool m_activeKeywordSegmentation = false; - bool m_onlySearchFile = false; - bool m_onlySearchDir = false; - bool m_searchOnlineApps = false; - unsigned int m_maxResults = 100; //默认取100条结果 - int m_informNum = 0; - - QMap m_searchType2ResultProperties; - QMap m_customSearchType2ResultDataType; -}; -} - -#endif // SEARCHCONTROLLERPRIVATE_H diff --git a/libsearch/searchinterface/search-controller.cpp b/libsearch/searchinterface/search-controller.cpp index 93fab5b..effa6e2 100644 --- a/libsearch/searchinterface/search-controller.cpp +++ b/libsearch/searchinterface/search-controller.cpp @@ -1,392 +1,230 @@ #include "search-controller.h" -#include "search-controller-private.h" -#include "ukui-search-task.h" +#include +#include #include -using namespace UkuiSearch; -SearchControllerPrivate::SearchControllerPrivate(SearchController *parent) - : q(parent), - m_formerController(q->m_parent) //如果构造参数里包含父节点智能指针,则子节点带有一个智能指针指向父节点 -{ - copyData(); -} +#include "search-result-property.h" +#include "ukui-search-task.h" +namespace UkuiSearch { -SearchControllerPrivate::~SearchControllerPrivate() +class SearchControllerPrivate { -} +public: + void clearAllConditions(); -size_t SearchControllerPrivate::refreshSearchId() -{ - m_searchIdMutex.lock(); - m_searchId += 1; - m_searchIdMutex.unlock(); - return m_searchId; -} - -DataQueue *SearchControllerPrivate::refreshDataqueue() -{ - if(!m_sharedDataQueue.get()) { -// m_dataQueue = new DataQueue; - m_sharedDataQueue = std::make_shared>(); - return m_sharedDataQueue.get(); - } - m_sharedDataQueue.get()->clear(); - return m_sharedDataQueue.get(); -} - -DataQueue *SearchControllerPrivate::initDataQueue() -{ - if(!m_sharedDataQueue.get()) { - m_sharedDataQueue = std::make_shared>(); - return m_sharedDataQueue.get(); - } - return m_sharedDataQueue.get(); -} - -void SearchControllerPrivate::addSearchDir(const QString &path) -{ - m_searchDirs.append(path); -} - -void SearchControllerPrivate::setRecurse(bool recurse) -{ - m_recurse = recurse; -} - -void SearchControllerPrivate::addKeyword(const QString &keyword) -{ - m_keywords.append(keyword); -} - -void SearchControllerPrivate::setActiveKeywordSegmentation(bool active) -{ - m_activeKeywordSegmentation = active; -} - -void SearchControllerPrivate::addFileLabel(const QString &label) -{ - m_FileLabels.append(label); -} - -void SearchControllerPrivate::setOnlySearchFile(bool onlySearchFile) -{ - m_onlySearchFile = onlySearchFile; -} - -void SearchControllerPrivate::setOnlySearchDir(bool onlySearchDir) -{ - m_onlySearchDir = onlySearchDir; -} - -void SearchControllerPrivate::setSearchOnlineApps(bool searchOnlineApps) -{ - m_searchOnlineApps = searchOnlineApps; -} - -size_t SearchControllerPrivate::getCurrentSearchId() -{ - m_searchIdMutex.lock(); - size_t searchId = m_searchId; - m_searchIdMutex.unlock(); - - return searchId; -} - -DataQueue *SearchControllerPrivate::getDataQueue() -{ - return m_sharedDataQueue.get(); -} - -SearchResultProperties SearchControllerPrivate::getResultProperties(SearchProperty::SearchType searchType) -{ - return m_searchType2ResultProperties[searchType]; -} - -QStringList SearchControllerPrivate::getCustomResultDataType(QString customSearchType) -{ - return m_customSearchType2ResultDataType[customSearchType]; -} - -bool SearchControllerPrivate::beginSearchIdCheck(size_t searchId) -{ - if(q->m_parent) { - return q->m_parent->beginSearchIdCheck(searchId); - } - m_searchIdMutex.lock(); - return m_searchId == searchId; -} - -void SearchControllerPrivate::finishSearchIdCheck() -{ - if(q->m_parent) { - return q->m_parent->finishSearchIdCheck(); - } - m_searchIdMutex.unlock(); - return; -} - -void SearchControllerPrivate::stop() -{ - m_searchIdMutex.lock(); - m_searchId += 1; - m_searchIdMutex.unlock(); -} - -QStringList SearchControllerPrivate::getSearchDir() -{ - return m_searchDirs; -} - -bool SearchControllerPrivate::isRecurse() -{ - return m_recurse; -} - -QStringList SearchControllerPrivate::getKeyword() -{ - return m_keywords; -} - -bool SearchControllerPrivate::isKeywordSegmentationActived() -{ - return m_activeKeywordSegmentation; -} - -QStringList SearchControllerPrivate::getFileLabel() -{ - return m_FileLabels; -} - -bool SearchControllerPrivate::isSearchFileOnly() -{ - return m_onlySearchFile; -} - -bool SearchControllerPrivate::isSearchDirOnly() -{ - return m_onlySearchDir; -} - -bool SearchControllerPrivate::isSearchOnlineApps() -{ - return m_searchOnlineApps; -} - -void SearchControllerPrivate::copyData() -{ - if(m_formerController.get()) { - m_searchId = m_formerController->d->m_searchId; - m_sharedDataQueue = m_formerController->d->m_sharedDataQueue; - m_keywords = m_formerController->d->m_keywords; - m_searchDirs = m_formerController->d->m_searchDirs; - m_FileLabels = m_formerController->d->m_FileLabels; - m_onlySearchFile = m_formerController->d->m_onlySearchFile; - m_onlySearchDir = m_formerController->d->m_onlySearchDir; - m_recurse = m_formerController->d->m_recurse; - m_activeKeywordSegmentation = m_formerController->d->m_activeKeywordSegmentation; - m_maxResults = m_formerController->d->m_maxResults; - m_informNum = m_formerController->d->m_informNum; - m_searchOnlineApps = m_formerController->d->m_searchOnlineApps; - m_searchType2ResultProperties = m_formerController->d->m_searchType2ResultProperties; - m_customSearchType2ResultDataType = m_formerController->d->m_customSearchType2ResultDataType; - } -} + std::shared_ptr> m_sharedDataQueue = nullptr; + size_t m_searchId = 0; + QMutex m_searchIdMutex; + QStringList m_keywords; + QStringList m_searchDirs; + QStringList m_FileLabels; + bool m_recurse = true; + bool m_activeKeywordSegmentation = false; + bool m_onlySearchFile = false; + bool m_onlySearchDir = false; + bool m_searchOnlineApps = false; + bool m_searchHiddenFiles = false; + unsigned int m_maxResults = 100; //默认取100条结果 + int m_informNum = 0; + QMap m_searchType2ResultProperties; + QMap m_customSearchType2ResultDataType; +}; void SearchControllerPrivate::clearAllConditions() -{ - clearKeyWords(); - clearSearchDir(); - clearFileLabel(); -} - -void SearchControllerPrivate::clearKeyWords() { m_keywords.clear(); -} - -void SearchControllerPrivate::clearSearchDir() -{ m_searchDirs.clear(); -} - -void SearchControllerPrivate::clearFileLabel() -{ m_FileLabels.clear(); + m_recurse = true; + m_activeKeywordSegmentation = false; + m_onlySearchFile = false; + m_onlySearchDir = false; + m_searchOnlineApps = false; } -bool SearchControllerPrivate::setResultProperties(SearchProperty::SearchType searchType, SearchResultProperties searchResultProperties) +SearchController::SearchController(): d(new SearchControllerPrivate) { - bool res(true); - m_searchType2ResultProperties[searchType] = searchResultProperties; - return res; } -void SearchControllerPrivate::setCustomResultDataType(QString customSearchType, QStringList dataType) +SearchController::SearchController(const SearchController &other):d(other.d) { - m_customSearchType2ResultDataType[customSearchType] = dataType; } -void SearchControllerPrivate::setMaxResultNum(unsigned int maxResults) +SearchController &SearchController::operator =(const SearchController &other) { - m_maxResults = maxResults; + d = other.d; + return *this; } - -void SearchControllerPrivate::setInformNum(int num) -{ - if(num >= 0) { - m_informNum = num; - } -} - -unsigned int SearchControllerPrivate::maxResults() const -{ - return m_maxResults; -} - -int SearchControllerPrivate::informNum() const -{ - return m_informNum; -} - -SearchController::SearchController(std::shared_ptr parent) : m_parent(parent), d(new SearchControllerPrivate(this)) +SearchController &SearchController::operator=(SearchController &&other) Q_DECL_NOEXCEPT { + d = other.d; + other.d.reset(); + return *this; } SearchController::~SearchController() { - if(d) { - delete d; - d = nullptr; - } + d.reset(); } DataQueue *SearchController::refreshDataqueue() { - return d->refreshDataqueue(); + if(!d->m_sharedDataQueue.get()) { +// m_dataQueue = new DataQueue; + d->m_sharedDataQueue = std::make_shared>(); + return d->m_sharedDataQueue.get(); + } + d->m_sharedDataQueue.get()->clear(); + return d->m_sharedDataQueue.get(); } size_t SearchController::refreshSearchId() { - return d->refreshSearchId(); + d->m_searchIdMutex.lock(); + d->m_searchId += 1; + d->m_searchIdMutex.unlock(); + return d->m_searchId; } DataQueue *SearchController::initDataQueue() { - return d->initDataQueue(); + if(!d->m_sharedDataQueue.get()) { + d->m_sharedDataQueue = std::make_shared>(); + return d->m_sharedDataQueue.get(); + } + return d->m_sharedDataQueue.get(); } void SearchController::addSearchDir(const QString &path) { - return d->addSearchDir(path); + d->m_searchDirs.append(path); } void SearchController::setRecurse(bool recurse) { - d->setRecurse(recurse); + d->m_recurse = recurse;; } void SearchController::addKeyword(const QString &keyword) { - d->addKeyword(keyword); + d->m_keywords.append(keyword); } size_t SearchController::getCurrentSearchId() { - return d->getCurrentSearchId(); + d->m_searchIdMutex.lock(); + size_t searchId = d->m_searchId; + d->m_searchIdMutex.unlock(); + + return searchId; } DataQueue *SearchController::getDataQueue() { - return d->getDataQueue(); + return d->m_sharedDataQueue.get(); } SearchResultProperties SearchController::getResultProperties(SearchProperty::SearchType searchType) { - return d->getResultProperties(searchType); + return d->m_searchType2ResultProperties[searchType];; } QStringList SearchController::getCustomResultDataType(QString customSearchType) { - return d->getCustomResultDataType(customSearchType); + return d->m_customSearchType2ResultDataType[customSearchType]; } void SearchController::setActiveKeywordSegmentation(bool active) { - d->setActiveKeywordSegmentation(active); + d->m_activeKeywordSegmentation = active;; } void SearchController::addFileLabel(const QString &label) { - d->addFileLabel(label); + d->m_FileLabels.append(label);; } void SearchController::setOnlySearchFile(bool onlySearchFile) { - d->setOnlySearchFile(onlySearchFile); + d->m_onlySearchFile = onlySearchFile; } void SearchController::setOnlySearchDir(bool onlySearchDir) { - d->setOnlySearchDir(onlySearchDir); + d->m_onlySearchDir = onlySearchDir; } void SearchController::setSearchOnlineApps(bool searchOnlineApps) { - d->setSearchOnlineApps(searchOnlineApps); + d->m_searchOnlineApps = searchOnlineApps; +} + +void SearchController::setSearchHiddenFiles(bool searchHiddenFiles) +{ + d->m_searchHiddenFiles = searchHiddenFiles; } bool SearchController::beginSearchIdCheck(size_t searchId) { - return d->beginSearchIdCheck(searchId); + d->m_searchIdMutex.lock(); + return d->m_searchId == searchId; } void SearchController::finishSearchIdCheck() { - d->finishSearchIdCheck(); + d->m_searchIdMutex.unlock(); + return; } QStringList SearchController::getSearchDir() { - return d->getSearchDir(); + return d->m_searchDirs; } bool SearchController::isRecurse() { - return d->isRecurse(); + return d->m_recurse; } QStringList SearchController::getKeyword() { - return d->getKeyword(); + return d->m_keywords; } bool SearchController::isKeywordSegmentationActived() { - return d->isKeywordSegmentationActived(); + return d->m_activeKeywordSegmentation; } QStringList SearchController::getFileLabel() { - return d->getFileLabel(); + return d->m_FileLabels; } bool SearchController::isSearchFileOnly() { - return d->isSearchFileOnly(); + return d->m_onlySearchFile; } bool SearchController::isSearchDirOnly() { - return d->isSearchDirOnly(); + return d->m_onlySearchDir; } bool SearchController::isSearchOnlineApps() { - return d->isSearchOnlineApps(); + return d->m_searchOnlineApps; +} + +bool SearchController::searchHiddenFiles() +{ + return d->m_searchHiddenFiles; } void SearchController::stop() { - d->stop(); + d->m_searchIdMutex.lock(); + d->m_searchId += 1; + d->m_searchIdMutex.unlock(); } void SearchController::clearAllConditions() @@ -396,45 +234,49 @@ void SearchController::clearAllConditions() void SearchController::clearKeyWords() { - d->clearKeyWords(); + d->m_keywords.clear(); } void SearchController::clearSearchDir() { - d->clearSearchDir(); + d->m_searchDirs.clear(); } void SearchController::clearFileLabel() { - d->clearFileLabel(); + d->m_FileLabels.clear(); } void SearchController::setMaxResultNum(unsigned int maxResults) { - d->setMaxResultNum(maxResults); + d->m_maxResults = maxResults; } void SearchController::setInformNum(int num) { - d->setInformNum(num); + if(num >= 0) { + d->m_informNum = num; + } } unsigned int SearchController::maxResults() const { - return d->maxResults(); + return d->m_maxResults; } int SearchController::informNum() const { - return d->informNum(); + return d->m_informNum; } bool SearchController::setResultProperties(SearchProperty::SearchType searchType, SearchResultProperties searchResultProperties) { - return d->setResultProperties(searchType, searchResultProperties); + d->m_searchType2ResultProperties[searchType] = searchResultProperties; + return true; } void SearchController::setCustomResultDataType(QString customSearchType, QStringList dataType) { - return d->setCustomResultDataType(customSearchType, dataType); + d->m_customSearchType2ResultDataType[customSearchType] = dataType; +} } diff --git a/libsearch/searchinterface/search-controller.h b/libsearch/searchinterface/search-controller.h index a520fc6..73c3bdc 100644 --- a/libsearch/searchinterface/search-controller.h +++ b/libsearch/searchinterface/search-controller.h @@ -15,17 +15,17 @@ class SearchControllerPrivate; */ class SearchController { - friend class SearchControllerPrivate; public: - explicit SearchController(std::shared_ptr parent = nullptr); - SearchController(SearchController &) = delete; - SearchController &operator =(const SearchController &) = delete; + SearchController(); + SearchController(const SearchController &other); + SearchController &operator=(const SearchController &other); + SearchController &operator=(SearchController &&other) Q_DECL_NOEXCEPT; + ~SearchController(); DataQueue* refreshDataqueue(); size_t refreshSearchId(); DataQueue* initDataQueue(); void stop(); - void addSearchDir(const QString &path); void setRecurse(bool recurse = true); void addKeyword(const QString &keyword); @@ -34,6 +34,7 @@ public: void setOnlySearchFile(bool onlySearchFile); void setOnlySearchDir(bool onlySearchDir); void setSearchOnlineApps(bool searchOnlineApps); + void setSearchHiddenFiles(bool searchHiddenFiles); void setMaxResultNum(unsigned int maxResults); void setInformNum(int num = 0); //以上方法插件请不要调用 @@ -54,6 +55,7 @@ public: bool isSearchFileOnly(); bool isSearchDirOnly(); bool isSearchOnlineApps(); + bool searchHiddenFiles(); void clearAllConditions(); void clearKeyWords(); void clearSearchDir(); @@ -65,8 +67,7 @@ public: bool setResultProperties(SearchProperty::SearchType searchType, UkuiSearch::SearchResultProperties searchResultProperties); void setCustomResultDataType(QString customSearchType, QStringList dataType); private: - std::shared_ptr m_parent = nullptr; - SearchControllerPrivate *d = nullptr; + std::shared_ptr d; }; } diff --git a/libsearch/searchinterface/search-interface.pri b/libsearch/searchinterface/search-interface.pri index d39c945..984df54 100644 --- a/libsearch/searchinterface/search-interface.pri +++ b/libsearch/searchinterface/search-interface.pri @@ -3,7 +3,6 @@ include(searchtasks/search-tasks.pri) HEADERS += \ # $$PWD/result-item-private.h \ - $$PWD/search-controller-private.h \ $$PWD/search-controller.h \ $$PWD/result-item.h \ $$PWD/search-result-property-info.h \ diff --git a/libsearch/searchinterface/searchtasks/app-search-task.cpp b/libsearch/searchinterface/searchtasks/app-search-task.cpp index 170210d..f75d444 100644 --- a/libsearch/searchinterface/searchtasks/app-search-task.cpp +++ b/libsearch/searchinterface/searchtasks/app-search-task.cpp @@ -42,7 +42,7 @@ AppSearchTask::~AppSearchTask() m_pool->waitForDone(); } -void AppSearchTask::setController(const std::shared_ptr &searchController) +void AppSearchTask::setController(const SearchController &searchController) { m_searchController = searchController; } @@ -79,7 +79,7 @@ bool AppSearchTask::isSearching() AppSearchWorker::AppSearchWorker(AppSearchTask *AppSarchTask): m_appSearchTask(AppSarchTask) { - m_controller = new SearchController(m_appSearchTask->m_searchController); + m_controller = &m_appSearchTask->m_searchController; m_currentSearchId = m_controller->getCurrentSearchId(); } @@ -183,14 +183,6 @@ void AppSearchWorker::run() QMetaObject::invokeMethod(m_appSearchTask, "searchFinished", Q_ARG(size_t, m_currentSearchId)); } -AppSearchWorker::~AppSearchWorker() -{ - if(m_controller) { - delete m_controller; - m_controller = nullptr; - } -} - void AppSearchWorker::sendErrorMsg(const QString &msg) { QMetaObject::invokeMethod(m_appSearchTask, "searchError", diff --git a/libsearch/searchinterface/searchtasks/app-search-task.h b/libsearch/searchinterface/searchtasks/app-search-task.h index 6eb872d..e2b9461 100644 --- a/libsearch/searchinterface/searchtasks/app-search-task.h +++ b/libsearch/searchinterface/searchtasks/app-search-task.h @@ -39,7 +39,7 @@ class AppSearchTask : public SearchTaskPluginIface public: explicit AppSearchTask(QObject *parent = nullptr); ~AppSearchTask(); - void setController(const std::shared_ptr &searchController); + void setController(const SearchController &searchController); PluginType pluginType() {return PluginType::SearchTaskPlugin;} const QString name(); const QString description(); @@ -55,7 +55,7 @@ public: private: ApplicationInfo m_appinfo; - std::shared_ptr m_searchController; + SearchController m_searchController; QThreadPool *m_pool = nullptr; }; @@ -63,7 +63,7 @@ class AppSearchWorker : public QRunnable { public: explicit AppSearchWorker(AppSearchTask *AppSarchTask); - ~AppSearchWorker(); + protected: void run(); diff --git a/libsearch/searchinterface/searchtasks/file-content-search-task.cpp b/libsearch/searchinterface/searchtasks/file-content-search-task.cpp index dd35bff..2c94abb 100644 --- a/libsearch/searchinterface/searchtasks/file-content-search-task.cpp +++ b/libsearch/searchinterface/searchtasks/file-content-search-task.cpp @@ -47,7 +47,7 @@ FileContentSearchTask::~FileContentSearchTask() m_pool->waitForDone(); } -void FileContentSearchTask::setController(const std::shared_ptr &searchController) +void FileContentSearchTask::setController(const SearchController &searchController) { m_searchController = searchController; } @@ -94,7 +94,7 @@ SearchProperty::SearchType FileContentSearchTask::getSearchType() void FileContentSearchTask::startSearch() { - FileContentSearchWorker *worker = new FileContentSearchWorker(this, m_searchController); + FileContentSearchWorker *worker = new FileContentSearchWorker(this, &m_searchController); m_pool->start(worker); } @@ -108,21 +108,13 @@ bool FileContentSearchTask::isSearching() return m_pool->activeThreadCount() > 0; } -FileContentSearchWorker::FileContentSearchWorker(FileContentSearchTask *fileContentSearchTask, std::shared_ptr searchController) +FileContentSearchWorker::FileContentSearchWorker(FileContentSearchTask *fileContentSearchTask, SearchController *searchController) { m_fileContentSearchTask = fileContentSearchTask; - m_searchController = new SearchController(searchController); + m_searchController = searchController; m_currentSearchId = m_searchController->getCurrentSearchId(); } -FileContentSearchWorker::~FileContentSearchWorker() -{ - if(m_searchController) { - delete m_searchController; - m_searchController = nullptr; - } -} - void FileContentSearchWorker::run() { QStringList searchDirs = m_searchController->getSearchDir(); diff --git a/libsearch/searchinterface/searchtasks/file-content-search-task.h b/libsearch/searchinterface/searchtasks/file-content-search-task.h index 5b448c9..c453d5e 100644 --- a/libsearch/searchinterface/searchtasks/file-content-search-task.h +++ b/libsearch/searchinterface/searchtasks/file-content-search-task.h @@ -39,7 +39,7 @@ public: explicit FileContentSearchTask(QObject *parent = nullptr); ~FileContentSearchTask() override; - void setController(const std::shared_ptr &searchController) override; + void setController(const SearchController &searchController) override; PluginType pluginType() override; const QString name() override; const QString description() override; @@ -51,12 +51,12 @@ public: SearchProperty::SearchType getSearchType() override; void startSearch() override; void stop() override; - bool isSearching(); + bool isSearching() override; private: QThreadPool *m_pool = nullptr; bool m_enable = true; - std::shared_ptr m_searchController; + SearchController m_searchController; }; class FileContentSearchWorker : public QRunnable @@ -64,9 +64,7 @@ class FileContentSearchWorker : public QRunnable friend class FileContentSearchFilter; public: - explicit FileContentSearchWorker(FileContentSearchTask *fileContentSearchTask, std::shared_ptr searchController); - ~FileContentSearchWorker(); - + explicit FileContentSearchWorker(FileContentSearchTask *fileContentSearchTask, SearchController *searchController); void run() override; private: diff --git a/libsearch/searchinterface/searchtasks/file-search-task.cpp b/libsearch/searchinterface/searchtasks/file-search-task.cpp index 84b7a18..8a870af 100644 --- a/libsearch/searchinterface/searchtasks/file-search-task.cpp +++ b/libsearch/searchinterface/searchtasks/file-search-task.cpp @@ -46,7 +46,7 @@ FileSearchTask::~FileSearchTask() m_pool->waitForDone(); } -void FileSearchTask::setController(const std::shared_ptr &searchController) +void FileSearchTask::setController(const SearchController &searchController) { m_searchController = searchController; } @@ -69,7 +69,7 @@ QString FileSearchTask::getCustomSearchType() void FileSearchTask::startSearch() { FileSearchWorker *fileSearchWorker; - fileSearchWorker = new FileSearchWorker(this, m_searchController); + fileSearchWorker = new FileSearchWorker(this, &m_searchController); m_pool->start(fileSearchWorker); } @@ -83,20 +83,12 @@ bool FileSearchTask::isSearching() return m_pool->activeThreadCount() > 0; } -FileSearchWorker::FileSearchWorker(FileSearchTask *fileSarchTask, std::shared_ptr searchController) : m_FileSearchTask(fileSarchTask) +FileSearchWorker::FileSearchWorker(FileSearchTask *fileSarchTask, SearchController *searchController) : m_FileSearchTask(fileSarchTask) { - m_searchController = new SearchController(searchController); + m_searchController = searchController; m_currentSearchId = m_searchController->getCurrentSearchId(); } -FileSearchWorker::~FileSearchWorker() -{ - if(m_searchController) { - delete m_searchController; - m_searchController = nullptr; - } -} - void FileSearchWorker::run() { //1.检查是否为不可搜索目录 @@ -128,7 +120,7 @@ void FileSearchWorker::run() bool indexed = true; QStringList indexedDir = DirWatcher::getDirWatcher()->currentIndexableDir(); - if(!indexedDir.isEmpty() && IndexStatusRecorder::getInstance()->indexDatabaseEnable()) { + if(!indexedDir.isEmpty() && IndexStatusRecorder::getInstance()->indexDatabaseEnable() && !m_searchController->searchHiddenFiles()) { for(const QString &path : m_searchController->getSearchDir()) { bool pathIndexed = false; for(const QString &dir : indexedDir) { @@ -266,13 +258,17 @@ bool FileSearchWorker::directSearch() QDir dir; QFileInfoList infoList; + QDir::Filters filters; if (m_searchController->isSearchDirOnly()) { - dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot); + filters = QDir::Dirs | QDir::NoDotAndDotDot; } else { - dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); + filters = QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot; dir.setSorting(QDir::DirsFirst); } - + if(m_searchController->searchHiddenFiles()) { + filters |= QDir::Hidden; + } + dir.setFilter(filters); while (!searchPathQueue.empty()) { dir.setPath(searchPathQueue.dequeue()); if (!dir.exists()) diff --git a/libsearch/searchinterface/searchtasks/file-search-task.h b/libsearch/searchinterface/searchtasks/file-search-task.h index 926b0b8..2aef7b9 100644 --- a/libsearch/searchinterface/searchtasks/file-search-task.h +++ b/libsearch/searchinterface/searchtasks/file-search-task.h @@ -34,10 +34,10 @@ class FileSearchTask : public SearchTaskPluginIface { Q_OBJECT public: - explicit FileSearchTask(QObject *parent); + explicit FileSearchTask(QObject *parent = nullptr); ~FileSearchTask(); - void setController(const std::shared_ptr &searchController); + void setController(const SearchController &searchController); PluginType pluginType() {return PluginType::SearchTaskPlugin;} const QString name(); const QString description(); @@ -53,7 +53,7 @@ public: private: QThreadPool *m_pool = nullptr; - std::shared_ptr m_searchController; + SearchController m_searchController; }; class FileSearchWorker : public QRunnable @@ -61,8 +61,7 @@ class FileSearchWorker : public QRunnable friend class FileSearchFilter; public: - explicit FileSearchWorker(FileSearchTask *fileSarchTask, std::shared_ptr searchController); - ~FileSearchWorker(); + explicit FileSearchWorker(FileSearchTask *fileSarchTask, SearchController *searchController); protected: void run(); diff --git a/libsearch/searchinterface/ukui-search-task.cpp b/libsearch/searchinterface/ukui-search-task.cpp index 53c0ec7..2158097 100644 --- a/libsearch/searchinterface/ukui-search-task.cpp +++ b/libsearch/searchinterface/ukui-search-task.cpp @@ -8,7 +8,7 @@ class UkuiSearchTaskPrivate { friend class UkuiSearchTask; private: - std::shared_ptr m_searchCotroller = nullptr; + SearchController m_searchCotroller; size_t m_searchId = 0; QUuid m_uuid; }; @@ -16,7 +16,6 @@ private: UkuiSearchTask::UkuiSearchTask(QObject *parent) : QObject(parent), d(new UkuiSearchTaskPrivate()) { - d->m_searchCotroller = std::make_shared(); d->m_uuid = QUuid::createUuid(); } @@ -28,42 +27,47 @@ UkuiSearchTask::~UkuiSearchTask() DataQueue *UkuiSearchTask::init() { - return d->m_searchCotroller->initDataQueue(); + return d->m_searchCotroller.initDataQueue(); } void UkuiSearchTask::addSearchDir(const QString &path) { - d->m_searchCotroller->addSearchDir(path); + d->m_searchCotroller.addSearchDir(path); } void UkuiSearchTask::setRecurse(bool recurse) { - d->m_searchCotroller->setRecurse(recurse); + d->m_searchCotroller.setRecurse(recurse); } void UkuiSearchTask::addKeyword(const QString &keyword) { - d->m_searchCotroller->addKeyword(keyword); + d->m_searchCotroller.addKeyword(keyword); } void UkuiSearchTask::addFileLabel(const QString &label) { - d->m_searchCotroller->addFileLabel(label); + d->m_searchCotroller.addFileLabel(label); } void UkuiSearchTask::setOnlySearchFile(bool onlySearchFile) { - d->m_searchCotroller->setOnlySearchFile(onlySearchFile); + d->m_searchCotroller.setOnlySearchFile(onlySearchFile); } void UkuiSearchTask::setOnlySearchDir(bool onlySearchDir) { - d->m_searchCotroller->setOnlySearchDir(onlySearchDir); + d->m_searchCotroller.setOnlySearchDir(onlySearchDir); } void UkuiSearchTask::setSearchOnlineApps(bool searchOnlineApps) { - d->m_searchCotroller->setSearchOnlineApps(searchOnlineApps); + d->m_searchCotroller.setSearchOnlineApps(searchOnlineApps); +} + +void UkuiSearchTask::setSearchHiddenFiles(bool searchHiddenFiles) +{ + d->m_searchCotroller.setSearchHiddenFiles(searchHiddenFiles); } void UkuiSearchTask::initSearchPlugin(SearchProperty::SearchType searchType, const QString &customSearchType) @@ -81,25 +85,25 @@ void UkuiSearchTask::initSearchPlugin(SearchProperty::SearchType searchType, con bool UkuiSearchTask::setResultProperties(SearchProperty::SearchType searchType, SearchResultProperties searchResultProperties) { - return d->m_searchCotroller->setResultProperties(searchType, searchResultProperties); + return d->m_searchCotroller.setResultProperties(searchType, searchResultProperties); } void UkuiSearchTask::setCustomResultDataType(QString customSearchType, QStringList dataType) { - return d->m_searchCotroller->setCustomResultDataType(customSearchType, dataType); + return d->m_searchCotroller.setCustomResultDataType(customSearchType, dataType); } size_t UkuiSearchTask::startSearch(SearchProperty::SearchType searchtype, QString customSearchType) { - d->m_searchId = d->m_searchCotroller->refreshSearchId(); - if(d->m_searchCotroller->getDataQueue() == nullptr) { + d->m_searchId = d->m_searchCotroller.refreshSearchId(); + if(d->m_searchCotroller.getDataQueue() == nullptr) { qWarning() << "the date queue has not been initialized, you need run init first!"; } - d->m_searchCotroller->refreshDataqueue(); + d->m_searchCotroller.refreshDataqueue(); //plugin manager do async search here if (!SearchTaskPluginManager::getInstance()->startSearch(d->m_uuid, searchtype, customSearchType)) { - Q_EMIT searchError(d->m_searchCotroller->getCurrentSearchId(), tr("Current task uuid error or an unregistered plugin is used!")); + Q_EMIT searchError(d->m_searchCotroller.getCurrentSearchId(), tr("Current task uuid error or an unregistered plugin is used!")); } return d->m_searchId; @@ -107,7 +111,7 @@ size_t UkuiSearchTask::startSearch(SearchProperty::SearchType searchtype, QStrin void UkuiSearchTask::stop() { - d->m_searchCotroller->stop(); + d->m_searchCotroller.stop(); } bool UkuiSearchTask::isSearching(SearchProperty::SearchType searchtype, QString customSearchType) @@ -117,30 +121,30 @@ bool UkuiSearchTask::isSearching(SearchProperty::SearchType searchtype, QString void UkuiSearchTask::clearAllConditions() { - d->m_searchCotroller->clearAllConditions(); + d->m_searchCotroller.clearAllConditions(); } void UkuiSearchTask::clearKeyWords() { - d->m_searchCotroller->clearKeyWords(); + d->m_searchCotroller.clearKeyWords(); } void UkuiSearchTask::clearSearchDir() { - d->m_searchCotroller->clearSearchDir(); + d->m_searchCotroller.clearSearchDir(); } void UkuiSearchTask::clearFileLabel() { - d->m_searchCotroller->clearFileLabel(); + d->m_searchCotroller.clearFileLabel(); } void UkuiSearchTask::setMaxResultNum(unsigned int maxResults) { - d->m_searchCotroller->setMaxResultNum(maxResults); + d->m_searchCotroller.setMaxResultNum(maxResults); } void UkuiSearchTask::setInformNum(int num) { - d->m_searchCotroller->setInformNum(num); + d->m_searchCotroller.setInformNum(num); } diff --git a/libsearch/searchinterface/ukui-search-task.h b/libsearch/searchinterface/ukui-search-task.h index ea7de75..b45eb42 100644 --- a/libsearch/searchinterface/ukui-search-task.h +++ b/libsearch/searchinterface/ukui-search-task.h @@ -39,6 +39,12 @@ public: void setOnlySearchFile(bool onlySearchFile); void setOnlySearchDir(bool onlySearchDir); void setSearchOnlineApps(bool searchOnlineApps); + /** + * 是否搜索隐藏文件 + * @brief setSearchHiddenFiles + * @param searchHiddenFiles + */ + void setSearchHiddenFiles(bool searchHiddenFiles); /** * @brief initSearchPlugin 初始化搜索插件 * @param searchType