diff --git a/SrcBehaviorLoader/PluginLoader.cpp b/SrcBehaviorLoader/PluginLoader.cpp index 703eafff128827eeafcd2d4b3d877428c0cd9756..a7754e80da2939239330fb3fce89a9658bfd64b4 100644 --- a/SrcBehaviorLoader/PluginLoader.cpp +++ b/SrcBehaviorLoader/PluginLoader.cpp @@ -205,6 +205,7 @@ std::vector<std::string> PluginLoader::searchDirectoriesForPlugins(std::vector<s PluginLoader::PluginLoader(QObject *parent) { + m_MetaData = nullptr; m_PluginLoader = new QPluginLoader(this); m_PluginListModel = new QStringListModel(); } @@ -233,6 +234,7 @@ bool PluginLoader::loadPluginFromFilename(QString const& filename) retval = m_PluginLoader->load(); QString s = m_PluginLoader->errorString(); std::string ss = s.toStdString(); + addPluginnameToLists(getCurrentPluginName(), filename); if (!m_PluginLoader->isLoaded()) { @@ -248,6 +250,14 @@ bool PluginLoader::loadPluginFromFilename(QString const& filename) return retval; } +void PluginLoader::addPluginnameToLists(QString mstring, QString filename) +{ + if (!m_PluginList.contains(mstring)) + m_PluginList.append(mstring); + m_PluginListModel->setStringList(m_PluginList); + m_PluginMap.insert(std::pair<QString, QString>(mstring, filename)); +} + bool PluginLoader::loadPluginFromName(QString name) { QString filename = m_PluginMap.find(name)->second; return loadPluginFromFilename(filename); @@ -266,10 +276,7 @@ int PluginLoader::addToPluginList(QString filename, QString suffix) { QJsonValue pluginMeda(loader.metaData().value("MetaData")); QJsonObject metaObj = pluginMeda.toObject(); QString mstring = metaObj.value("name").toString(); - if (!m_PluginList.contains(mstring)) - m_PluginList.append(mstring); - m_PluginListModel->setStringList(m_PluginList); - m_PluginMap.insert(std::pair<QString, QString>(mstring, filename)); + addPluginnameToLists(mstring, filename); } else { return 2; @@ -288,12 +295,14 @@ QObject* PluginLoader::getPluginInstance() { QJsonObject PluginLoader::getPluginMetaData() const { - return m_MetaData; + if (m_MetaData == nullptr) + qFatal("(getPluginMetaData) No plugin loaded"); + return *m_MetaData; } void PluginLoader::readMetaDataFromPlugin() { - m_MetaData = m_PluginLoader->metaData().value("MetaData").toObject(); + m_MetaData = std::make_shared<QJsonObject>(m_PluginLoader->metaData().value("MetaData").toObject()); } bool PluginLoader::getIsPluginLoaded() { @@ -301,7 +310,9 @@ bool PluginLoader::getIsPluginLoaded() { } QString PluginLoader::getCurrentPluginName() { - return m_currentPluginName; + if (m_MetaData == nullptr) + return "Error name"; + return m_MetaData->value("name").toString(); } const std::map<QString, QString> &PluginLoader::getPluginMap() const { diff --git a/SrcBehaviorLoader/PluginLoader.h b/SrcBehaviorLoader/PluginLoader.h index dc313ce85cbc10ec4f348ad39c8f88056ceed0cd..38c359e57a8bed68e9aa784f287c5a457c41c510 100644 --- a/SrcBehaviorLoader/PluginLoader.h +++ b/SrcBehaviorLoader/PluginLoader.h @@ -68,6 +68,8 @@ public: private: + void addPluginnameToLists(QString name, QString filename); + //a map containing the mapping "plugin name -> filename" std::map<QString, QString> m_PluginMap; @@ -80,7 +82,7 @@ private: // The QT object to actually load the plugins QPluginLoader *m_PluginLoader; - QJsonObject m_MetaData; + std::shared_ptr<QJsonObject> m_MetaData; //nomen est omen bool m_isPluginLoaded; @@ -88,9 +90,6 @@ private: // List of all available plugins QStringList m_PluginList; - //Name of the currently loaded plugin - QString m_currentPluginName; - // Entire ListModel of the metadata (actually containing all metadata, not only name) QStringListModel* m_PluginListModel; };