fix parsing of rules
This commit is contained in:
parent
72d4780f75
commit
ca956d2405
@ -75,7 +75,7 @@ void RuleManager::removeRule(const QUuid &ruleId)
|
||||
void RuleManager::editRule(Rule *rule)
|
||||
{
|
||||
QVariantMap params = JsonTypes::packRule(rule);
|
||||
qWarning() << "Packed rule:" << params;
|
||||
qWarning() << "Packed rule:" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
||||
m_jsonClient->sendCommand("Rules.EditRule", params, this, "onEditRuleReply");
|
||||
|
||||
}
|
||||
@ -89,10 +89,12 @@ void RuleManager::executeActions(const QString &ruleId)
|
||||
|
||||
void RuleManager::handleRulesNotification(const QVariantMap ¶ms)
|
||||
{
|
||||
qDebug() << "rules notification received" << params;
|
||||
qDebug() << "Rules notification received:" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
||||
if (params.value("notification").toString() == "Rules.RuleAdded") {
|
||||
QVariantMap ruleMap = params.value("params").toMap().value("rule").toMap();
|
||||
m_rules->insert(parseRule(ruleMap));
|
||||
Rule *rule = parseRule(ruleMap);
|
||||
qDebug() << "Rule added:" << rule;
|
||||
m_rules->insert(rule);
|
||||
} else if (params.value("notification").toString() == "Rules.RuleRemoved") {
|
||||
QUuid ruleId = params.value("params").toMap().value("ruleId").toUuid();
|
||||
m_rules->remove(ruleId);
|
||||
@ -105,7 +107,9 @@ void RuleManager::handleRulesNotification(const QVariantMap ¶ms)
|
||||
return;
|
||||
}
|
||||
m_rules->remove(ruleId);
|
||||
m_rules->insert(parseRule(ruleMap));
|
||||
Rule *newRule = parseRule(ruleMap);
|
||||
m_rules->insert(newRule);
|
||||
qDebug() << "Rule changed:" << newRule;
|
||||
} else if (params.value("notification").toString() == "Rules.RuleActiveChanged") {
|
||||
Rule *rule = m_rules->getRule(params.value("params").toMap().value("ruleId").toUuid());
|
||||
if (!rule) {
|
||||
@ -163,7 +167,7 @@ void RuleManager::getRuleDetailsReply(const QVariantMap ¶ms)
|
||||
|
||||
void RuleManager::onAddRuleReply(const QVariantMap ¶ms)
|
||||
{
|
||||
qDebug() << "Add rule reply" << params;
|
||||
qDebug() << "Add rule reply:" << params.value("params").toMap().value("ruleError").toString();
|
||||
emit addRuleReply(params.value("params").toMap().value("ruleError").toString(), params.value("params").toMap().value("ruleId").toString());
|
||||
}
|
||||
|
||||
@ -175,7 +179,7 @@ void RuleManager::removeRuleReply(const QVariantMap ¶ms)
|
||||
|
||||
void RuleManager::onEditRuleReply(const QVariantMap ¶ms)
|
||||
{
|
||||
qDebug() << "Edit rule reply:" << params; //params.value("params").toMap().value("ruleError").toString();
|
||||
qDebug() << "Edit rule reply:" << params.value("params").toMap().value("ruleError").toString();
|
||||
emit editRuleReply(params.value("params").toMap().value("ruleError").toString());
|
||||
}
|
||||
|
||||
@ -228,6 +232,7 @@ void RuleManager::parseEventDescriptors(const QVariantList &eventDescriptorList,
|
||||
|
||||
StateEvaluator *RuleManager::parseStateEvaluator(const QVariantMap &stateEvaluatorMap)
|
||||
{
|
||||
qDebug() << "Parsing state evaluator. Child count:" << stateEvaluatorMap.value("childEvaluators").toList().count();
|
||||
if (!stateEvaluatorMap.contains("stateDescriptor")) {
|
||||
return nullptr;
|
||||
}
|
||||
@ -245,9 +250,9 @@ StateEvaluator *RuleManager::parseStateEvaluator(const QVariantMap &stateEvaluat
|
||||
stateEvaluator->setStateDescriptor(sd);
|
||||
|
||||
foreach (const QVariant &childEvaluatorVariant, stateEvaluatorMap.value("childEvaluators").toList()) {
|
||||
StateEvaluator *stateEvaluator = parseStateEvaluator(childEvaluatorVariant.toMap());
|
||||
if (stateEvaluator) {
|
||||
stateEvaluator->childEvaluators()->addStateEvaluator(stateEvaluator);
|
||||
StateEvaluator *childEvaluator = parseStateEvaluator(childEvaluatorVariant.toMap());
|
||||
if (childEvaluator) {
|
||||
stateEvaluator->childEvaluators()->addStateEvaluator(childEvaluator);
|
||||
}
|
||||
}
|
||||
operatorEnum = QMetaEnum::fromType<StateEvaluator::StateOperator>();
|
||||
|
||||
@ -29,7 +29,6 @@ Rule::Rule(const QUuid &id, QObject *parent) :
|
||||
|
||||
Rule::~Rule()
|
||||
{
|
||||
qDebug() << "### Destroying rule" << this;
|
||||
}
|
||||
|
||||
QUuid Rule::id() const
|
||||
@ -157,3 +156,91 @@ Rule *Rule::clone() const
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
QDebug operator <<(QDebug &dbg, Rule *rule)
|
||||
{
|
||||
dbg << rule->name() << " (Enabled:" << rule->enabled() << "Active:" << rule->active() << ")" << endl;
|
||||
if (rule->eventDescriptors()->rowCount() > 0) {
|
||||
dbg << "Event descriptors:" << endl;
|
||||
}
|
||||
for (int i = 0; i < rule->eventDescriptors()->rowCount(); i++) {
|
||||
EventDescriptor *ed = rule->eventDescriptors()->get(i);
|
||||
dbg << " " << i << ":";
|
||||
if (!ed->deviceId().isNull() && !ed->eventTypeId().isNull()) {
|
||||
dbg << "Device ID:" << ed->deviceId() << "Event Type ID:" << ed->eventTypeId() << endl;;
|
||||
} else {
|
||||
dbg << "Interface Name:" << ed->interfaceName() << "Event Name:" << ed->interfaceEvent() << endl;;
|
||||
}
|
||||
}
|
||||
dbg << "State Evaluator:" << endl;
|
||||
printStateEvaluator(dbg, rule->stateEvaluator());
|
||||
|
||||
if (rule->actions()->rowCount() > 0) {
|
||||
dbg << "Actions:" << endl;
|
||||
}
|
||||
for (int i = 0; i < rule->actions()->rowCount(); i++) {
|
||||
RuleAction *ra = rule->actions()->get(i);
|
||||
dbg << " " << i << ":";
|
||||
if (!ra->deviceId().isNull() && !ra->actionTypeId().isNull()) {
|
||||
dbg << "Device ID:" << ra->deviceId() << "Action Type ID:" << ra->actionTypeId() << endl;;
|
||||
} else {
|
||||
dbg << "Interface Name:" << ra->interfaceName() << "Action Name:" << ra->interfaceAction() << endl;;
|
||||
}
|
||||
}
|
||||
|
||||
if (rule->exitActions()->rowCount() > 0) {
|
||||
dbg << "Exit Actions:" << endl;
|
||||
}
|
||||
for (int i = 0; i < rule->exitActions()->rowCount(); i++) {
|
||||
RuleAction *ra = rule->exitActions()->get(i);
|
||||
dbg << " " << i << ":";
|
||||
if (!ra->deviceId().isNull() && !ra->actionTypeId().isNull()) {
|
||||
dbg << "Device ID:" << ra->deviceId() << "Action Type ID:" << ra->actionTypeId() << endl;;
|
||||
} else {
|
||||
dbg << "Interface Name:" << ra->interfaceName() << "Action Name:" << ra->interfaceAction() << endl;;
|
||||
}
|
||||
}
|
||||
return dbg;
|
||||
}
|
||||
|
||||
QDebug printStateEvaluator(QDebug &dbg, StateEvaluator *stateEvaluator, int indentLevel)
|
||||
{
|
||||
if (stateEvaluator->stateDescriptor()) {
|
||||
for (int i = 0; i < indentLevel; i++) { dbg << " "; }
|
||||
dbg << "State Descriptor:";
|
||||
if (!stateEvaluator->stateDescriptor()->deviceId().isNull() && !stateEvaluator->stateDescriptor()->stateTypeId().isNull()) {
|
||||
dbg << "Device ID:" << stateEvaluator->stateDescriptor()->deviceId().toString() << stateEvaluator->stateDescriptor()->stateTypeId().toString();
|
||||
} else {
|
||||
dbg << "Interface name:" << stateEvaluator->stateDescriptor()->interfaceName() << stateEvaluator->stateDescriptor()->interfaceState();
|
||||
}
|
||||
switch (stateEvaluator->stateDescriptor()->valueOperator()) {
|
||||
case StateDescriptor::ValueOperatorLess:
|
||||
dbg << "<";
|
||||
break;
|
||||
case StateDescriptor::ValueOperatorEquals:
|
||||
dbg << "=";
|
||||
break;
|
||||
case StateDescriptor::ValueOperatorGreater:
|
||||
dbg << ">";
|
||||
break;
|
||||
case StateDescriptor::ValueOperatorNotEquals:
|
||||
dbg << "!=";
|
||||
break;
|
||||
case StateDescriptor::ValueOperatorLessOrEqual:
|
||||
dbg << "<=";
|
||||
break;
|
||||
case StateDescriptor::ValueOperatorGreaterOrEqual:
|
||||
dbg << ">=";
|
||||
break;
|
||||
}
|
||||
dbg << stateEvaluator->stateDescriptor()->value() << endl;
|
||||
}
|
||||
if (stateEvaluator->childEvaluators()->rowCount() > 0) {
|
||||
for (int i = 0; i < indentLevel; i++) { dbg << " "; }
|
||||
dbg << (stateEvaluator->stateOperator() == StateEvaluator::StateOperatorAnd ? "AND" : "OR") << endl;
|
||||
}
|
||||
for (int i = 0; i < stateEvaluator->childEvaluators()->rowCount(); i++) {
|
||||
printStateEvaluator(dbg, stateEvaluator->childEvaluators()->get(i), indentLevel+1);
|
||||
}
|
||||
return dbg;
|
||||
}
|
||||
|
||||
@ -72,4 +72,7 @@ private:
|
||||
TimeDescriptor *m_timeDescriptor = nullptr;
|
||||
};
|
||||
|
||||
QDebug operator<<(QDebug &dbg, Rule *rule);
|
||||
QDebug printStateEvaluator(QDebug &dbg, StateEvaluator *stateEvaluator, int indentLevel = 1);
|
||||
|
||||
#endif // RULE_H
|
||||
|
||||
@ -43,7 +43,7 @@ Page {
|
||||
onAddRuleReply: {
|
||||
d.editRulePage.busy = false;
|
||||
if (ruleError == "RuleErrorNoError") {
|
||||
print("should tag rule now:", d.editRulePage.rule.id, d.editRulePage.ruleIcon, d.editRulePage.ruleColor)
|
||||
// print("should tag rule now:", d.editRulePage.rule.id, d.editRulePage.ruleIcon, d.editRulePage.ruleColor)
|
||||
engine.tagsManager.tagRule(ruleId, "color", d.editRulePage.ruleColor)
|
||||
engine.tagsManager.tagRule(ruleId, "icon", d.editRulePage.ruleIcon)
|
||||
pageStack.pop();
|
||||
@ -56,7 +56,7 @@ Page {
|
||||
onEditRuleReply: {
|
||||
d.editRulePage.busy = false;
|
||||
if (ruleError == "RuleErrorNoError") {
|
||||
print("should tag rule now:", d.editRulePage.ruleIcon, d.editRulePage.ruleColor)
|
||||
// print("should tag rule now:", d.editRulePage.ruleIcon, d.editRulePage.ruleColor)
|
||||
engine.tagsManager.tagRule(d.editRulePage.rule.id, "color", d.editRulePage.ruleColor)
|
||||
engine.tagsManager.tagRule(d.editRulePage.rule.id, "icon", d.editRulePage.ruleIcon)
|
||||
pageStack.pop();
|
||||
|
||||
@ -461,6 +461,7 @@ Page {
|
||||
font.pixelSize: app.mediumFont
|
||||
Layout.fillWidth: true
|
||||
Layout.margins: app.margins
|
||||
wrapMode: Text.WordWrap
|
||||
font.bold: true
|
||||
visible: {
|
||||
if (root.isEventBased) {
|
||||
|
||||
Reference in New Issue
Block a user