Merge branch '1213-ukss' into 'ukss-dev'
Add plugin manager for search task. See merge request kylin-desktop/ukui-search!236
This commit is contained in:
commit
06ba7ce612
|
@ -5,4 +5,5 @@ INCLUDEPATH += $$PWD/parser
|
||||||
INCLUDEPATH += $$PWD/pluginmanage
|
INCLUDEPATH += $$PWD/pluginmanage
|
||||||
INCLUDEPATH += $$PWD/settingsearch
|
INCLUDEPATH += $$PWD/settingsearch
|
||||||
INCLUDEPATH += $$PWD/appsearch
|
INCLUDEPATH += $$PWD/appsearch
|
||||||
|
INCLUDEPATH += $$PWD/searchinterface
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
namespace UkuiSearch {
|
namespace UkuiSearch {
|
||||||
enum class SearchType
|
enum class SearchType
|
||||||
{
|
{
|
||||||
File,
|
File = 0,
|
||||||
FileContent,
|
FileContent,
|
||||||
Application,
|
Application,
|
||||||
Setting,
|
Setting,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
INCLUDEPATH += $$PWD \
|
INCLUDEPATH += $$PWD
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
$$PWD/action-label.h \
|
$$PWD/action-label.h \
|
||||||
|
|
|
@ -1,19 +1,21 @@
|
||||||
#ifndef SEARCHTASKPLUGINIFACE_H
|
#ifndef SEARCHTASKPLUGINIFACE_H
|
||||||
#define SEARCHTASKPLUGINIFACE_H
|
#define SEARCHTASKPLUGINIFACE_H
|
||||||
#define SearchTaskPLuginIface_iid "org.ukui.ukui-search.plugin-iface.SearchTaskPLuginIface"
|
#define SearchTaskPluginIface_iid "org.ukui.ukui-search.plugin-iface.SearchTaskPluginIface"
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QtPlugin>
|
#include <QtPlugin>
|
||||||
#include "plugin-iface.h"
|
#include "plugin-iface.h"
|
||||||
#include "search-controller.h"
|
|
||||||
#include "common-defines.h"
|
#include "common-defines.h"
|
||||||
|
#include "search-controller.h"
|
||||||
|
|
||||||
|
|
||||||
namespace UkuiSearch {
|
namespace UkuiSearch {
|
||||||
class SearchTaskPLuginIface : public QObject, public PluginInterface
|
class SearchTaskPluginIface : public QObject, public PluginInterface
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
virtual QString getSearchType() = 0;
|
virtual QString getCustomSearchType() = 0;
|
||||||
|
virtual SearchType getSearchType() = 0;
|
||||||
//Asynchronous,multithread.
|
//Asynchronous,multithread.
|
||||||
virtual void startSearch(SearchController searchController) = 0;
|
virtual void startSearch(SearchController searchController) = 0;
|
||||||
virtual void stop() = 0;
|
virtual void stop() = 0;
|
||||||
|
@ -21,7 +23,7 @@ Q_SIGNALS:
|
||||||
void searchFinished(size_t searchId);
|
void searchFinished(size_t searchId);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
Q_DECLARE_INTERFACE(UkuiSearch::SearchTaskPLuginIface, SearchTaskPLuginIface_iid)
|
Q_DECLARE_INTERFACE(UkuiSearch::SearchTaskPluginIface, SearchTaskPluginIface_iid)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "plugin-manager.h"
|
#include "plugin-manager.h"
|
||||||
#include "search-plugin-manager.h"
|
#include "search-plugin-manager.h"
|
||||||
|
#include "search-task-plugin-manager.h"
|
||||||
|
|
||||||
using namespace UkuiSearch;
|
using namespace UkuiSearch;
|
||||||
|
|
||||||
|
@ -46,6 +47,11 @@ PluginManager::PluginManager(QObject *parent) : QObject(parent)
|
||||||
SearchPluginManager::getInstance()->registerPlugin(p);
|
SearchPluginManager::getInstance()->registerPlugin(p);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case PluginInterface::PluginType::SearchTaskPlugin: {
|
||||||
|
auto p = dynamic_cast<SearchTaskPluginIface*>(plugin);
|
||||||
|
SearchTaskPluginManager::getInstance()->registerPlugin(p);
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,9 +6,9 @@
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QPluginLoader>
|
#include <QPluginLoader>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include "libsearch_global.h"
|
#include "plugin-iface.h"
|
||||||
#include "plugininterface/plugin-iface.h"
|
#include "search-plugin-iface.h"
|
||||||
#include "plugininterface/search-plugin-iface.h"
|
#include "search-task-plugin-iface.h"
|
||||||
|
|
||||||
namespace UkuiSearch {
|
namespace UkuiSearch {
|
||||||
class LIBSEARCH_EXPORT PluginManager : public QObject
|
class LIBSEARCH_EXPORT PluginManager : public QObject
|
||||||
|
|
|
@ -2,8 +2,10 @@ INCLUDEPATH += $$PWD
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
$$PWD/search-plugin-manager.h \
|
$$PWD/search-plugin-manager.h \
|
||||||
$$PWD/plugin-manager.h
|
$$PWD/plugin-manager.h \
|
||||||
|
$$PWD/search-task-plugin-manager.h
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
$$PWD/search-plugin-manager.cpp \
|
$$PWD/search-plugin-manager.cpp \
|
||||||
$$PWD/plugin-manager.cpp
|
$$PWD/plugin-manager.cpp \
|
||||||
|
$$PWD/search-task-plugin-manager.cpp
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
#include "search-task-plugin-manager.h"
|
||||||
|
#include <QDebug>
|
||||||
|
using namespace UkuiSearch;
|
||||||
|
static SearchTaskPluginManager *global_instance = nullptr;
|
||||||
|
SearchTaskPluginManager *SearchTaskPluginManager::getInstance()
|
||||||
|
{
|
||||||
|
if (!global_instance) {
|
||||||
|
global_instance = new SearchTaskPluginManager;
|
||||||
|
}
|
||||||
|
return global_instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SearchTaskPluginManager::registerPlugin(SearchTaskPluginIface *plugin)
|
||||||
|
{
|
||||||
|
//这里把内部插件和外部插件分开写是考虑到异常处理,因为内部插件我们可以保证质量,但外部插件可能有各种各样的问题。
|
||||||
|
//但异常处理我没想好怎么加。。
|
||||||
|
//by zpf
|
||||||
|
if(plugin->getCustomSearchType().isEmpty() || m_loadedPlugin.contains(plugin->getCustomSearchType())) {
|
||||||
|
qWarning() << "search task plugin load failed! plugin type:" << plugin->getCustomSearchType();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
m_loadedPlugin.insert(plugin->getCustomSearchType(), plugin);
|
||||||
|
connect(plugin, &SearchTaskPluginIface::searchFinished, this, &SearchTaskPluginManager::searchFinished);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SearchTaskPluginManager::registerBuildinPlugin(SearchTaskPluginIface *plugin)
|
||||||
|
{
|
||||||
|
m_buildinPlugin.insert(static_cast<int>(plugin->getSearchType()), plugin);
|
||||||
|
connect(plugin, &SearchTaskPluginIface::searchFinished, this, &SearchTaskPluginManager::searchFinished);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
SearchTaskPluginManager::SearchTaskPluginManager(QObject *parent) : QObject(parent)
|
||||||
|
{
|
||||||
|
//register buildin plugin into m_buildinPlugin
|
||||||
|
//registerBuildinPlugin();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SearchTaskPluginManager::pluginSearch(SearchType searchType, SearchController searchController)
|
||||||
|
{
|
||||||
|
int type = static_cast<int>(searchType);
|
||||||
|
if(m_buildinPlugin.contains(type)) {
|
||||||
|
if(!m_buildinPlugin.value(type)->isEnable()) {
|
||||||
|
Q_EMIT this->pluginDisable(searchController.getCurrentSearchId());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
m_buildinPlugin.value(type)->startSearch(searchController);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SearchTaskPluginManager::pluginSearch(QString customSearchType, SearchController searchController)
|
||||||
|
{
|
||||||
|
if(m_loadedPlugin.contains(customSearchType)) {
|
||||||
|
if(!m_loadedPlugin.value(customSearchType)->isEnable()) {
|
||||||
|
Q_EMIT this->pluginDisable(searchController.getCurrentSearchId());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
m_loadedPlugin.value(customSearchType)->startSearch(searchController);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
#ifndef SEARCHTASKPLUGINMANAGER_H
|
||||||
|
#define SEARCHTASKPLUGINMANAGER_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include "search-task-plugin-iface.h"
|
||||||
|
namespace UkuiSearch {
|
||||||
|
|
||||||
|
class SearchTaskPluginManager : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
static SearchTaskPluginManager *getInstance();
|
||||||
|
bool registerPlugin(SearchTaskPluginIface *plugin);
|
||||||
|
bool registerBuildinPlugin(SearchTaskPluginIface *plugin);
|
||||||
|
void pluginSearch(SearchType searchType, SearchController searchController);
|
||||||
|
void pluginSearch(QString customSearchType, SearchController searchController);
|
||||||
|
Q_SIGNALS:
|
||||||
|
void searchFinished(size_t searchId);
|
||||||
|
void pluginDisable(size_t searchId);
|
||||||
|
private:
|
||||||
|
explicit SearchTaskPluginManager(QObject *parent = nullptr);
|
||||||
|
|
||||||
|
QHash<int, SearchTaskPluginIface*> m_buildinPlugin;
|
||||||
|
QHash<QString, SearchTaskPluginIface*> m_loadedPlugin;
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // SEARCHTASKPLUGINMANAGER_H
|
|
@ -18,5 +18,6 @@ private:
|
||||||
ResultItem *q;
|
ResultItem *q;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif // RESULTITEMPRIVATE_H
|
#endif // RESULTITEMPRIVATE_H
|
||||||
|
|
|
@ -1,6 +1,15 @@
|
||||||
#include "result-item.h"
|
#include "result-item.h"
|
||||||
#include "result-item-private.h"
|
#include "result-item-private.h"
|
||||||
using namespace UkuiSearch;
|
using namespace UkuiSearch;
|
||||||
|
ResultItemPrivate::ResultItemPrivate::ResultItemPrivate(const QString &itemKey, ResultItem *parent)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ResultItemPrivate::~ResultItemPrivate()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
ResultItem::ResultItem(const QString &itemKey)
|
ResultItem::ResultItem(const QString &itemKey)
|
||||||
{
|
{
|
||||||
d = new ResultItemPrivate(itemKey, this);
|
d = new ResultItemPrivate(itemKey, this);
|
||||||
|
|
|
@ -17,18 +17,21 @@ public:
|
||||||
DataQueue<ResultItem>* refreshDataqueue();
|
DataQueue<ResultItem>* refreshDataqueue();
|
||||||
size_t refreshSearchId();
|
size_t refreshSearchId();
|
||||||
DataQueue<ResultItem>* initDataQueue();
|
DataQueue<ResultItem>* initDataQueue();
|
||||||
|
void stop();
|
||||||
|
|
||||||
void addSearchDir(QString &path);
|
void addSearchDir(QString &path);
|
||||||
void setRecurse(bool recurse = true);
|
void setRecurse(bool recurse = true);
|
||||||
void addKeyword(QString &keyword);
|
void addKeyword(QString &keyword);
|
||||||
void setActiveKeywordSegmentation(bool active);
|
void setActiveKeywordSegmentation(bool active);
|
||||||
void addFileLabel(QString &label);
|
void addFileLabel(QString &label);
|
||||||
|
//以上方法插件请不要调用
|
||||||
|
|
||||||
|
//以下方法插件可以调用
|
||||||
size_t getCurrentSearchId();
|
size_t getCurrentSearchId();
|
||||||
DataQueue<ResultItem>* getDataQueue();
|
DataQueue<ResultItem>* getDataQueue();
|
||||||
bool beginSearchIdCheck(size_t searchId);
|
bool beginSearchIdCheck(size_t searchId);
|
||||||
void finishSearchIdCheck();
|
void finishSearchIdCheck();
|
||||||
void stop();
|
|
||||||
QStringList getSearchDir();
|
QStringList getSearchDir();
|
||||||
bool isRecurse();
|
bool isRecurse();
|
||||||
QStringList getKeyword();
|
QStringList getKeyword();
|
||||||
|
|
|
@ -14,7 +14,7 @@ const QString FileSearchTask::description()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QString FileSearchTask::getSearchType()
|
QString FileSearchTask::getCustomSearchType()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
#include "search-controller.h"
|
#include "search-controller.h"
|
||||||
#include <QIcon>
|
#include <QIcon>
|
||||||
namespace UkuiSearch {
|
namespace UkuiSearch {
|
||||||
class FileSearchTask : public SearchTaskPLuginIface
|
class FileSearchTask : public SearchTaskPluginIface
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
|
@ -16,7 +16,8 @@ public:
|
||||||
void setEnable(bool enable) {}
|
void setEnable(bool enable) {}
|
||||||
bool isEnable() {}
|
bool isEnable() {}
|
||||||
|
|
||||||
QString getSearchType();
|
SearchType getSearchType() {return SearchType::File;}
|
||||||
|
QString getCustomSearchType();
|
||||||
void startSearch(SearchController searchController);
|
void startSearch(SearchController searchController);
|
||||||
void stop();
|
void stop();
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -21,7 +21,7 @@ public:
|
||||||
void addKeyword(QString &keyword);
|
void addKeyword(QString &keyword);
|
||||||
void addFileLabel(QString &label);
|
void addFileLabel(QString &label);
|
||||||
void setSearchOnlineApps(bool searchOnlineApps);
|
void setSearchOnlineApps(bool searchOnlineApps);
|
||||||
size_t startSearch(SearchType searchtype);
|
size_t startSearch(SearchType searchtype, QString customSearchType = QString());
|
||||||
void stop();
|
void stop();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "ukui-search-task.h"
|
#include "ukui-search-task.h"
|
||||||
#include "ukui-search-task-private.h"
|
#include "ukui-search-task-private.h"
|
||||||
|
#include "search-task-plugin-manager.h"
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
using namespace UkuiSearch;
|
using namespace UkuiSearch;
|
||||||
UkuiSearchTaskPrivate::UkuiSearchTaskPrivate(UkuiSearchTask *parent)
|
UkuiSearchTaskPrivate::UkuiSearchTaskPrivate(UkuiSearchTask *parent)
|
||||||
|
@ -43,17 +44,21 @@ void UkuiSearchTaskPrivate::setSearchOnlineApps(bool searchOnlineApps)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t UkuiSearchTaskPrivate::startSearch(SearchType searchtype)
|
size_t UkuiSearchTaskPrivate::startSearch(SearchType searchtype, QString customSearchType)
|
||||||
{
|
{
|
||||||
|
|
||||||
m_searchId = m_searchCotroller->refreshSearchId();
|
m_searchId = m_searchCotroller->refreshSearchId();
|
||||||
// if(!m_dataQueue) {
|
if(m_searchCotroller->getDataQueue() == nullptr) {
|
||||||
// qWarning() << "Please run init first!";
|
qWarning() << "the date queue has not been initialized, you need run init first!";
|
||||||
// return -1;
|
}
|
||||||
// }
|
|
||||||
|
|
||||||
//plugin manager do async search here
|
//plugin manager do async search here
|
||||||
// plugin->search(SearchController(m_searchController))
|
if(SearchType::Custom != searchtype) {
|
||||||
|
SearchTaskPluginManager::getInstance()->pluginSearch(searchtype, SearchController(m_searchCotroller));
|
||||||
|
} else {
|
||||||
|
SearchTaskPluginManager::getInstance()->pluginSearch(customSearchType, SearchController(m_searchCotroller));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
return m_searchId;
|
return m_searchId;
|
||||||
}
|
}
|
||||||
|
@ -102,9 +107,9 @@ void UkuiSearchTask::setSearchOnlineApps(bool searchOnlineApps)
|
||||||
d->setSearchOnlineApps(searchOnlineApps);
|
d->setSearchOnlineApps(searchOnlineApps);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t UkuiSearchTask::startSearch(SearchType searchtype)
|
size_t UkuiSearchTask::startSearch(SearchType searchtype, QString customSearchTYpe)
|
||||||
{
|
{
|
||||||
return d->startSearch(searchtype);
|
return d->startSearch(searchtype, customSearchTYpe);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UkuiSearchTask::stop()
|
void UkuiSearchTask::stop()
|
||||||
|
|
|
@ -18,7 +18,7 @@ public:
|
||||||
void addKeyword(QString &keyword);
|
void addKeyword(QString &keyword);
|
||||||
void addFileLabel(QString &label);
|
void addFileLabel(QString &label);
|
||||||
void setSearchOnlineApps(bool searchOnlineApps);
|
void setSearchOnlineApps(bool searchOnlineApps);
|
||||||
size_t startSearch(SearchType searchtype);
|
size_t startSearch(SearchType searchtype, QString customSearchTYpe = QString());
|
||||||
void stop();
|
void stop();
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
|
|
Loading…
Reference in New Issue