mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2025-03-01 10:33:28 +00:00
Added the possibility to set effect arguments over json
Former-commit-id: 4bc2920c04853e549c712ec70492371b14d20877
This commit is contained in:
@@ -14,6 +14,7 @@ SET(EffectEngineQT_HEADERS
|
||||
)
|
||||
|
||||
SET(EffectEngineHEADERS
|
||||
${CURRENT_HEADER_DIR}/EffectDefinition.h
|
||||
)
|
||||
|
||||
SET(EffectEngineSOURCES
|
||||
|
@@ -49,9 +49,9 @@ private:
|
||||
|
||||
const int _timeout;
|
||||
|
||||
const std::string & _script;
|
||||
const std::string _script;
|
||||
|
||||
const Json::Value & _args;
|
||||
const Json::Value _args;
|
||||
|
||||
int64_t _endTime;
|
||||
|
||||
|
@@ -25,7 +25,7 @@ EffectEngine::EffectEngine(Hyperion * hyperion, const Json::Value & jsonEffectCo
|
||||
for (const std::string & name : effectNames)
|
||||
{
|
||||
const Json::Value & info = jsonEffectConfig[name];
|
||||
_availableEffects[name] = {info["script"].asString(), info["args"]};
|
||||
_availableEffects.push_back({name, info["script"].asString(), info["args"]});
|
||||
}
|
||||
|
||||
// initialize the python interpreter
|
||||
@@ -43,22 +43,33 @@ EffectEngine::~EffectEngine()
|
||||
Py_Finalize();
|
||||
}
|
||||
|
||||
std::list<std::string> EffectEngine::getEffects() const
|
||||
const std::list<EffectDefinition> &EffectEngine::getEffects() const
|
||||
{
|
||||
std::list<std::string> effectNames;
|
||||
foreach (auto entry, _availableEffects) {
|
||||
effectNames.push_back(entry.first);
|
||||
}
|
||||
return effectNames;
|
||||
return _availableEffects;
|
||||
}
|
||||
|
||||
int EffectEngine::runEffect(const std::string &effectName, int priority, int timeout)
|
||||
{
|
||||
return runEffect(effectName, Json::Value(Json::nullValue), priority, timeout);
|
||||
}
|
||||
|
||||
int EffectEngine::runEffect(const std::string &effectName, const Json::Value &args, int priority, int timeout)
|
||||
{
|
||||
std::cout << "run effect " << effectName << " on channel " << priority << std::endl;
|
||||
|
||||
if (_availableEffects.find(effectName) == _availableEffects.end())
|
||||
const EffectDefinition * effectDefinition = nullptr;
|
||||
for (const EffectDefinition & e : _availableEffects)
|
||||
{
|
||||
if (e.name == effectName)
|
||||
{
|
||||
effectDefinition = &e;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (effectDefinition == nullptr)
|
||||
{
|
||||
// no such effect
|
||||
std::cerr << "effect " << effectName << " not found" << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -66,8 +77,7 @@ int EffectEngine::runEffect(const std::string &effectName, int priority, int tim
|
||||
channelCleared(priority);
|
||||
|
||||
// create the effect
|
||||
const EffectDefinition & effectDefinition = _availableEffects[effectName];
|
||||
Effect * effect = new Effect(priority, timeout, effectDefinition.script, effectDefinition.args);
|
||||
Effect * effect = new Effect(priority, timeout, effectDefinition->script, args.isNull() ? effectDefinition->args : args);
|
||||
connect(effect, SIGNAL(setColors(int,std::vector<ColorRgb>,int)), _hyperion, SLOT(setColors(int,std::vector<ColorRgb>,int)), Qt::QueuedConnection);
|
||||
connect(effect, SIGNAL(effectFinished(Effect*)), this, SLOT(effectFinished(Effect*)));
|
||||
_activeEffects.push_back(effect);
|
||||
|
@@ -466,7 +466,7 @@ const Hyperion::InputInfo &Hyperion::getPriorityInfo(const int priority) const
|
||||
return _muxer.getInputInfo(priority);
|
||||
}
|
||||
|
||||
std::list<std::string> Hyperion::getEffects() const
|
||||
const std::list<EffectDefinition> & Hyperion::getEffects() const
|
||||
{
|
||||
return _effectEngine->getEffects();
|
||||
}
|
||||
@@ -476,6 +476,11 @@ int Hyperion::setEffect(const std::string &effectName, int priority, int timeout
|
||||
return _effectEngine->runEffect(effectName, priority, timeout);
|
||||
}
|
||||
|
||||
int Hyperion::setEffect(const std::string &effectName, const Json::Value &args, int priority, int timeout)
|
||||
{
|
||||
return _effectEngine->runEffect(effectName, args, priority, timeout);
|
||||
}
|
||||
|
||||
void Hyperion::update()
|
||||
{
|
||||
// Update the muxer, cleaning obsolete priorities
|
||||
|
@@ -162,7 +162,14 @@ void JsonClientConnection::handleEffectCommand(const Json::Value &message)
|
||||
const std::string & effectName = effect["name"].asString();
|
||||
|
||||
// set output
|
||||
_hyperion->setEffect(effectName, priority, duration);
|
||||
if (effect.isMember("args"))
|
||||
{
|
||||
_hyperion->setEffect(effectName, effect["args"], priority, duration);
|
||||
}
|
||||
else
|
||||
{
|
||||
_hyperion->setEffect(effectName, priority, duration);
|
||||
}
|
||||
|
||||
// send reply
|
||||
sendSuccessReply();
|
||||
@@ -212,11 +219,13 @@ void JsonClientConnection::handleServerInfoCommand(const Json::Value &)
|
||||
|
||||
// collect effect info
|
||||
Json::Value & effects = info["effects"] = Json::Value(Json::arrayValue);
|
||||
std::list<std::string> effectNames = _hyperion->getEffects();
|
||||
for (const std::string & name : effectNames)
|
||||
const std::list<EffectDefinition> & effectsDefinitions = _hyperion->getEffects();
|
||||
for (const EffectDefinition & effectDefinition : effectsDefinitions)
|
||||
{
|
||||
Json::Value effect;
|
||||
effect["name"] = name;
|
||||
effect["name"] = effectDefinition.name;
|
||||
effect["script"] = effectDefinition.script;
|
||||
effect["args"] = effectDefinition.args;
|
||||
|
||||
effects.append(effect);
|
||||
}
|
||||
|
@@ -22,6 +22,10 @@
|
||||
"name" : {
|
||||
"type" : "string",
|
||||
"required" : true
|
||||
},
|
||||
"args" : {
|
||||
"type" : "object",
|
||||
"required" : false
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
|
Reference in New Issue
Block a user