/* * * Copyright (C) 2023, KylinSoft Co., Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authors: iaom */ #ifndef SEARCHPLUGINFACTORY_H #define SEARCHPLUGINFACTORY_H #include #include #include "search-plugin-iface.h" #include "plugin-info.h" namespace UkuiSearch { class SearchPluginManager : public QObject { Q_OBJECT QStringList m_defaultPluginOrder = { "Ai Search", "Applications Search", "Note Search", "Settings Search", "Dir Search", "File Search", "File Content Search", "Web Page" }; public: bool registerPlugin(SearchPluginIface *plugin); bool registerExternalPlugin(SearchPluginIface *plugin, const QString &path); bool reRegisterPlugin(SearchPluginIface *plugin, bool isExternal, const QString &externalPluginPath = QString()); bool unregisterPlugin(SearchPluginIface *plugin, bool isExternal, const QString &externalPluginPath = QString()); //测试用接口 bool reRegisterPlugin(const QString &pluginName); bool unregisterPlugin(const QString &pluginName); bool changePluginPos(const QString &pluginName, int pos); static SearchPluginManager *getInstance(); const QList getPluginIds(); SearchPluginIface *getPlugin(const QString &pluginId); private: explicit SearchPluginManager(QObject *parent = nullptr); ~SearchPluginManager(); void initOrderSettings(); std::map m_map; std::map m_plugin_order;//绑定plugin ID和优先级 QSettings *m_orderSettings = nullptr; QStringList m_externalPlugins; Q_SIGNALS: void unregistered(const QString& pluginName); void reRegistered(const QString& pluginName); void changePos(const QString& pluginName, int index); }; } #endif // SEARCHPLUGINFACTORY_H