diff options
Diffstat (limited to 'PluginsManager.h')
-rw-r--r-- | PluginsManager.h | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/PluginsManager.h b/PluginsManager.h new file mode 100644 index 0000000..4e24839 --- /dev/null +++ b/PluginsManager.h @@ -0,0 +1,157 @@ +/** \file PluginsManager.h +\brief Define the class to manage and load the plugins +\author alpha_one_x86 +\licence GPL3, see the file COPYING */ + +#ifndef PLUGINS_MANAGER_H +#define PLUGINS_MANAGER_H + +#include <QObject> +#include <QList> +#include <QStringList> +#include <QDomElement> +#include <QDomDocument> +#include <QDomNode> +#include <QTreeWidgetItem> +#include <QDateTime> +#include <QAction> +#include <QMenu> +#include <QCryptographicHash> +#include <QString> +#include <QSemaphore> +#include <QRegularExpression> +#include <QThread> +#include <map> +#include <regex> + +#include "Environment.h" +#include "OptionEngine.h" +#include "ResourcesManager.h" +#include "PluginInformation.h" +#ifdef ULTRACOPIER_PLUGIN_IMPORT_SUPPORT +#include "QXzDecodeThread.h" +#include "QTarDecode.h" +#endif + +namespace Ui { + class PluginOptions; +} + +/** \brief Define the class to manage and load the resources linked with the themes + +This class provide a core load and manage the resources */ +class PluginsManager : public QThread +{ + Q_OBJECT + public: + /// \brief to get plugins of type specific + std::vector<PluginsAvailable> getPluginsByCategory(const PluginType &type) const; + /** \brief to get plugins */ + std::vector<PluginsAvailable> getPlugins(bool withError=false) const; + /// \brief get translated text + //QString getTranslatedText(PluginsAvailable plugin,QString informationName,QString mainShortName); + //QString getTranslatedText(PluginsAvailable plugin,QString informationName); + /// \brief transform short plugin name into file name + static std::string getResolvedPluginName(const std::string &name); + static bool isSamePlugin(const PluginsAvailable &pluginA,const PluginsAvailable &pluginB); + void lockPluginListEdition(); + void unlockPluginListEdition(); + bool allPluginHaveBeenLoaded() const; + /// \brief to load the get dom specific + std::string getDomSpecific(const QDomElement &root,const std::string &name,const std::vector<std::pair<std::string,std::string> > &listChildAttribute) const; + std::string getDomSpecific(const QDomElement &root,const std::string &name) const; + /// \brief set current language + void setLanguage(const std::string &language); + /// \brief Enumeration of plugin add backend + enum ImportBackend + { + ImportBackend_File, //import plugin from local file + ImportBackend_Internet //import plugin form internet + }; + static PluginsManager *pluginsManager; + /// \brief Create the manager and load the defaults variables + PluginsManager(); + /// \brief Destroy the language manager + ~PluginsManager(); + /// \brief To compare version, \return true is case of error + static bool compareVersion(const std::string &versionA,const std::string &sign,const std::string &versionB); + private: + /// \brief List of plugins + std::vector<PluginsAvailable> pluginsList; + std::map<PluginType,std::vector<PluginsAvailable> > pluginsListIndexed; + /// \brief to load the multi-language balise + void loadBalise(const QDomElement &root,const std::string &name,std::vector<std::vector<std::string> > *informations,std::string *errorString,bool needHaveOneEntryMinimum=true,bool multiLanguage=false,bool englishNeedBeFound=false); + /// \brief get the version + std::string getPluginVersion(const std::string &pluginName) const; + /// \brief list of cat plugin type + //QStringList catPlugin; + std::vector<std::string> englishPluginType; + std::vector<QTreeWidgetItem *> catItemList; + /// \brief store the current mainShortName + std::string mainShortName; + /// \brief load the plugin list + void loadPluginList(); + #ifdef ULTRACOPIER_PLUGIN_IMPORT_SUPPORT + QAction *backendMenuFile; ///< Pointer on the file backend menu + bool importingPlugin; + void lunchDecodeThread(const QByteArray &data); + QXzDecodeThread decodeThread; + void executeTheFileBackendLoader(); + #endif + #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE + /// \brief check the dependencies, return number of error + uint32_t checkDependencies(); + #endif + void loadPluginXml(PluginsAvailable * thePlugin,const QByteArray &xml); + std::vector<std::string> readPluginPath; + bool loadPluginInformation(const std::string &path); + QSemaphore editionSemList; + bool stopIt; + bool pluginLoaded; + std::string language; + std::string categoryToString(const PluginType &category) const; + std::string categoryToTranslation(const PluginType &category); + std::regex regexp_to_clean_1,regexp_to_clean_2,regexp_to_clean_3,regexp_to_clean_4,regexp_to_clean_5; + std::regex regexp_to_dep_1,regexp_to_dep_2,regexp_to_dep_3,regexp_to_dep_4,regexp_to_dep_5,regexp_to_dep_6; + PluginInformation *pluginInformation; + private slots: + /// \brief show the information + void showInformationDoubleClick(); + #ifdef ULTRACOPIER_PLUGIN_IMPORT_SUPPORT + void decodingFinished(); + #endif + #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE + void newAuthPath(const std::string &path); + #endif + void post_operation(); +/* public slots: + /// \brief to refresh the plugin list + void refreshPluginList(QString mainShortName="en");*/ + signals: + void pluginListingIsfinish() const; + void onePluginAdded(const PluginsAvailable&) const; + void onePluginInErrorAdded(const PluginsAvailable&) const; + #ifndef ULTRACOPIER_PLUGIN_ALL_IN_ONE + void onePluginWillBeRemoved(const PluginsAvailable&) const; // when will be really removed + void onePluginWillBeUnloaded(const PluginsAvailable&) const;//just unload to quit the application + #endif + void needLangToRefreshPluginList() const; + void newLanguageLoaded() const; + #ifdef ULTRACOPIER_PLUGIN_IMPORT_SUPPORT + void manuallyAdded(const PluginsAvailable&) const; + #endif + protected: + void run(); + public slots: //do gui action + void showInformation(const std::string &path); + #ifdef ULTRACOPIER_PLUGIN_IMPORT_SUPPORT + void removeThePluginSelected(const std::string &path); + void addPlugin(const ImportBackend &backend); + void tryLoadPlugin(const std::string &file); + #endif +}; + +/// \brief to do structure comparaison +bool operator==(PluginsAvailable pluginA,PluginsAvailable pluginB); + +#endif // PLUGINS_MANAGER_H |