From 0615808ee490cfc16c8fa63544ad552286179113 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Wed, 29 Jun 2022 10:13:32 +0200 Subject: [PATCH] Provide access to the experience manager and offer possiblity for loading own plugin instance --- libnymea-core/experiences/experiencemanager.cpp | 13 +++++++++++++ libnymea-core/experiences/experiencemanager.h | 12 +++++------- libnymea-core/nymeacore.cpp | 5 +++++ libnymea-core/nymeacore.h | 1 + 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/libnymea-core/experiences/experiencemanager.cpp b/libnymea-core/experiences/experiencemanager.cpp index 21577018..5b48a090 100644 --- a/libnymea-core/experiences/experiencemanager.cpp +++ b/libnymea-core/experiences/experiencemanager.cpp @@ -48,6 +48,11 @@ ExperienceManager::ExperienceManager(ThingManager *thingManager, JsonRPCServer * staticMetaObject.invokeMethod(this, "loadPlugins", Qt::QueuedConnection); } +QList ExperienceManager::plugins() const +{ + return m_plugins; +} + void ExperienceManager::loadPlugins() { foreach (const QString &path, pluginSearchDirs()) { @@ -107,4 +112,12 @@ void ExperienceManager::loadExperiencePlugin(const QString &file) } +void ExperienceManager::loadExperiencePlugin(ExperiencePlugin *experiencePlugin) +{ + qCDebug(dcExperiences()) << "Adding experience plugin:" << experiencePlugin; + m_plugins.append(experiencePlugin); + experiencePlugin->setParent(this); + experiencePlugin->initPlugin(m_thingManager, m_jsonRpcServer); +} + } diff --git a/libnymea-core/experiences/experiencemanager.h b/libnymea-core/experiences/experiencemanager.h index 9fbf3583..6bda9d32 100644 --- a/libnymea-core/experiences/experiencemanager.h +++ b/libnymea-core/experiences/experiencemanager.h @@ -45,24 +45,22 @@ class ExperienceManager : public QObject public: explicit ExperienceManager(ThingManager *thingManager, JsonRPCServer *jsonRpcServer, QObject *parent = nullptr); -signals: + QList plugins() const; -public slots: + // This method is used for testing + void loadExperiencePlugin(ExperiencePlugin *experiencePlugin); private slots: void loadPlugins(); -private: - QStringList pluginSearchDirs() const; - private: ThingManager *m_thingManager = nullptr; JsonRPCServer *m_jsonRpcServer = nullptr; + QList m_plugins; + QStringList pluginSearchDirs() const; void loadExperiencePlugin(const QString &file); -private: - QList m_plugins; }; } diff --git a/libnymea-core/nymeacore.cpp b/libnymea-core/nymeacore.cpp index 8c5649d0..7eb8131f 100644 --- a/libnymea-core/nymeacore.cpp +++ b/libnymea-core/nymeacore.cpp @@ -665,6 +665,11 @@ ModbusRtuManager *NymeaCore::modbusRtuManager() const return m_modbusRtuManager; } +ExperienceManager *NymeaCore::experienceManager() const +{ + return m_experienceManager; +} + void NymeaCore::onEventTriggered(const Event &event) { emit eventTriggered(event); diff --git a/libnymea-core/nymeacore.h b/libnymea-core/nymeacore.h index db373ef0..c9370f4c 100644 --- a/libnymea-core/nymeacore.h +++ b/libnymea-core/nymeacore.h @@ -110,6 +110,7 @@ public: Platform *platform() const; ZigbeeManager *zigbeeManager() const; ModbusRtuManager *modbusRtuManager() const; + ExperienceManager *experienceManager() const; static QStringList getAvailableLanguages(); static QStringList loggingFilters();