From 4c3cc8d3189dcd13a00852a03cd420709e166ed9 Mon Sep 17 00:00:00 2001 From: Nico Peter Date: Sat, 15 Dec 2018 20:38:32 +0100 Subject: [PATCH] added name property in Effect class to make it possible to get the name of the active effect in the 'serverinfo' JSON command results --- include/effectengine/ActiveEffectDefinition.h | 1 + include/effectengine/EffectEngine.h | 2 +- libsrc/effectengine/Effect.cpp | 3 ++- libsrc/effectengine/Effect.h | 6 +++++- libsrc/effectengine/EffectEngine.cpp | 7 ++++--- libsrc/jsonserver/JsonClientConnection.cpp | 1 + 6 files changed, 14 insertions(+), 6 deletions(-) diff --git a/include/effectengine/ActiveEffectDefinition.h b/include/effectengine/ActiveEffectDefinition.h index 345b226..fdcd942 100644 --- a/include/effectengine/ActiveEffectDefinition.h +++ b/include/effectengine/ActiveEffectDefinition.h @@ -8,6 +8,7 @@ struct ActiveEffectDefinition { + std::string name; std::string script; int priority; int timeout; diff --git a/include/effectengine/EffectEngine.h b/include/effectengine/EffectEngine.h index 7acb1ee..6399c2f 100644 --- a/include/effectengine/EffectEngine.h +++ b/include/effectengine/EffectEngine.h @@ -49,7 +49,7 @@ private slots: private: /// Run the specified effect on the given priority channel and optionally specify a timeout - int runEffectScript(const std::string &script, const Json::Value & args, int priority, int timeout = -1); + int runEffectScript(const std::string & name, const std::string &script, const Json::Value & args, int priority, int timeout = -1); private: Hyperion * _hyperion; diff --git a/libsrc/effectengine/Effect.cpp b/libsrc/effectengine/Effect.cpp index 7f5d353..b89a36c 100644 --- a/libsrc/effectengine/Effect.cpp +++ b/libsrc/effectengine/Effect.cpp @@ -49,9 +49,10 @@ void Effect::registerHyperionExtensionModule() PyImport_AppendInittab("hyperion", &PyInit_hyperion); } -Effect::Effect(PyThreadState * mainThreadState, int priority, int timeout, const std::string & script, const Json::Value & args) : +Effect::Effect(PyThreadState * mainThreadState, const std::string & name, int priority, int timeout, const std::string & script, const Json::Value & args) : QThread(), _mainThreadState(mainThreadState), + _name(name), _priority(priority), _timeout(timeout), _script(script), diff --git a/libsrc/effectengine/Effect.h b/libsrc/effectengine/Effect.h index 0ef4931..4cdcb50 100644 --- a/libsrc/effectengine/Effect.h +++ b/libsrc/effectengine/Effect.h @@ -14,10 +14,12 @@ class Effect : public QThread Q_OBJECT public: - Effect(PyThreadState * mainThreadState, int priority, int timeout, const std::string & script, const Json::Value & args = Json::Value()); + Effect(PyThreadState * mainThreadState, const std::string & name, int priority, int timeout, const std::string & script, const Json::Value & args = Json::Value()); virtual ~Effect(); virtual void run(); + + std::string getName() const { return _name; } int getPriority() const; @@ -63,6 +65,8 @@ private: private: PyThreadState * _mainThreadState; + const std::string _name; + const int _priority; const int _timeout; diff --git a/libsrc/effectengine/EffectEngine.cpp b/libsrc/effectengine/EffectEngine.cpp index 7e1ca68..6c44743 100644 --- a/libsrc/effectengine/EffectEngine.cpp +++ b/libsrc/effectengine/EffectEngine.cpp @@ -86,6 +86,7 @@ const std::list &EffectEngine::getActiveEffects() for (Effect * effect : _activeEffects) { ActiveEffectDefinition activeEffectDefinition; + activeEffectDefinition.name = effect->getName(); activeEffectDefinition.script = effect->getScript(); activeEffectDefinition.priority = effect->getPriority(); activeEffectDefinition.timeout = effect->getTimeout(); @@ -174,16 +175,16 @@ int EffectEngine::runEffect(const std::string &effectName, const Json::Value &ar return -1; } - return runEffectScript(effectDefinition->script, args.isNull() ? effectDefinition->args : args, priority, timeout); + return runEffectScript(effectName, effectDefinition->script, args.isNull() ? effectDefinition->args : args, priority, timeout); } -int EffectEngine::runEffectScript(const std::string &script, const Json::Value &args, int priority, int timeout) +int EffectEngine::runEffectScript(const std::string & name, const std::string &script, const Json::Value &args, int priority, int timeout) { // clear current effect on the channel channelCleared(priority); // create the effect - Effect * effect = new Effect(_mainThreadState, priority, timeout, script, args); + Effect * effect = new Effect(_mainThreadState, name, priority, timeout, script, args); connect(effect, SIGNAL(setColors(int,std::vector,int,bool)), _hyperion, SLOT(setColors(int,std::vector,int,bool)), Qt::QueuedConnection); connect(effect, SIGNAL(effectFinished(Effect*)), this, SLOT(effectFinished(Effect*))); _activeEffects.push_back(effect); diff --git a/libsrc/jsonserver/JsonClientConnection.cpp b/libsrc/jsonserver/JsonClientConnection.cpp index 400b3ea..e4f76cc 100644 --- a/libsrc/jsonserver/JsonClientConnection.cpp +++ b/libsrc/jsonserver/JsonClientConnection.cpp @@ -524,6 +524,7 @@ void JsonClientConnection::handleServerInfoCommand(const Json::Value &) for (const ActiveEffectDefinition & activeEffectDefinition : activeEffectsDefinitions) { Json::Value activeEffect; + activeEffect["name"] = activeEffectDefinition.name; activeEffect["script"] = activeEffectDefinition.script; activeEffect["priority"] = activeEffectDefinition.priority; activeEffect["timeout"] = activeEffectDefinition.timeout;