diff --git a/libnymea-core/experiences/experiencemanager.cpp b/libnymea-core/experiences/experiencemanager.cpp index ec481007..4b11eabc 100644 --- a/libnymea-core/experiences/experiencemanager.cpp +++ b/libnymea-core/experiences/experiencemanager.cpp @@ -11,10 +11,14 @@ namespace nymeaserver { -ExperienceManager::ExperienceManager(JsonRPCServer *jsonRpcServer, QObject *parent) : QObject(parent) +ExperienceManager::ExperienceManager(JsonRPCServer *jsonRpcServer, QObject *parent) : QObject(parent), + m_jsonRpcServer(jsonRpcServer) { -// jsonRpcServer->registerHandler(); + staticMetaObject.invokeMethod(this, "loadPlugins", Qt::QueuedConnection); +} +void ExperienceManager::loadPlugins() +{ foreach (const QString &path, pluginSearchDirs()) { QDir dir(path); qCDebug(dcExperiences) << "Loading experience plugins from:" << dir.absolutePath(); @@ -69,6 +73,10 @@ void ExperienceManager::loadExperiencePlugin(const QString &file) plugin->setParent(this); m_plugins.append(plugin); + + foreach (JsonHandler *handler, plugin->jsonHandlers()) { + m_jsonRpcServer->registerHandler(handler); + } } } diff --git a/libnymea-core/experiences/experiencemanager.h b/libnymea-core/experiences/experiencemanager.h index 62218095..cfb0a3aa 100644 --- a/libnymea-core/experiences/experiencemanager.h +++ b/libnymea-core/experiences/experiencemanager.h @@ -19,9 +19,15 @@ signals: public slots: +private slots: + void loadPlugins(); + private: QStringList pluginSearchDirs() const; +private: + JsonRPCServer *m_jsonRpcServer = nullptr; + void loadExperiencePlugin(const QString &file); private: diff --git a/libnymea/experiences/experienceplugin.cpp b/libnymea/experiences/experienceplugin.cpp index 7714259a..c589c12b 100644 --- a/libnymea/experiences/experienceplugin.cpp +++ b/libnymea/experiences/experienceplugin.cpp @@ -4,3 +4,13 @@ ExperiencePlugin::ExperiencePlugin(QObject *parent) : QObject(parent) { } + +QList ExperiencePlugin::jsonHandlers() const +{ + return m_jsonHandlers; +} + +void ExperiencePlugin::registerJsonHandler(JsonHandler *handler) +{ + m_jsonHandlers.append(handler); +} diff --git a/libnymea/experiences/experienceplugin.h b/libnymea/experiences/experienceplugin.h index 54614fab..845f34cd 100644 --- a/libnymea/experiences/experienceplugin.h +++ b/libnymea/experiences/experienceplugin.h @@ -3,15 +3,21 @@ #include -class ExperiencePlugin : public JsonHandler +class JsonHandler; + +class ExperiencePlugin : public QObject { Q_OBJECT public: explicit ExperiencePlugin(QObject *parent = nullptr); -signals: + QList jsonHandlers() const; -public slots: +protected: + void registerJsonHandler(JsonHandler *handler); + +private: + QList m_jsonHandlers; }; Q_DECLARE_INTERFACE(ExperiencePlugin, "io.nymea.ExperiencePlugin")