diff --git a/server/jsonrpc/ruleshandler.cpp b/server/jsonrpc/ruleshandler.cpp index 41f3087d..532cea77 100644 --- a/server/jsonrpc/ruleshandler.cpp +++ b/server/jsonrpc/ruleshandler.cpp @@ -28,6 +28,11 @@ RulesHandler::RulesHandler(QObject *parent) : setParams("AddRule", params); setReturns("AddRule", returns); + params.clear(); returns.clear(); + setDescription("RemoveRule", "Remove a rule"); + params.insert("ruleId", "uuid"); + setParams("RemoveRule", params); + setReturns("RemoveRule", returns); } QString RulesHandler::name() const @@ -100,6 +105,28 @@ QVariantMap RulesHandler::AddRule(const QVariantMap ¶ms) returns.insert("success", false); returns.insert("errorMessage", "Device does not have such a trigger type."); break; + default: + returns.insert("success", false); + returns.insert("errorMessage", "Unknown error"); + } + return returns; +} + +QVariantMap RulesHandler::RemoveRule(const QVariantMap ¶ms) +{ + QVariantMap returns; + QUuid ruleId = params.value("ruleId").toUuid(); + switch (HiveCore::instance()->ruleEngine()->removeRule(ruleId)) { + case RuleEngine::RuleErrorNoError: + returns.insert("success", true); + break; + case RuleEngine::RuleErrorRuleNotFound: + returns.insert("success", false); + returns.insert("errorMessage", "No such rule."); + break; + default: + returns.insert("success", false); + returns.insert("errorMessage", "Unknown error"); } return returns; } diff --git a/server/jsonrpc/ruleshandler.h b/server/jsonrpc/ruleshandler.h index 2a440f0c..245c340c 100644 --- a/server/jsonrpc/ruleshandler.h +++ b/server/jsonrpc/ruleshandler.h @@ -14,6 +14,7 @@ public: Q_INVOKABLE QVariantMap GetRules(const QVariantMap ¶ms); Q_INVOKABLE QVariantMap AddRule(const QVariantMap ¶ms); + Q_INVOKABLE QVariantMap RemoveRule(const QVariantMap ¶ms); }; diff --git a/server/rule.cpp b/server/rule.cpp index 7f925ba7..8b21ffa9 100644 --- a/server/rule.cpp +++ b/server/rule.cpp @@ -6,7 +6,8 @@ Rule::Rule(const QUuid &id, const Trigger &trigger, const QList states, c m_id(id), m_trigger(trigger), m_states(states), - m_actions(actions) + m_actions(actions), + m_ruleType(RuleTypeAll) { } @@ -29,3 +30,13 @@ QList Rule::actions() const { return m_actions; } + +Rule::RuleType Rule::ruleType() const +{ + return m_ruleType; +} + +void Rule::setRuleType(Rule::RuleType ruleType) +{ + m_ruleType = ruleType; +} diff --git a/server/rule.h b/server/rule.h index 7a3f2be1..12c4a37e 100644 --- a/server/rule.h +++ b/server/rule.h @@ -10,6 +10,11 @@ class Rule { public: + enum RuleType { + RuleTypeAll, + RuleTypeAny + }; + Rule(const QUuid &id, const Trigger &trigger, const QList states, const QList &actions); QUuid id() const; @@ -17,11 +22,15 @@ public: QList states() const; QList actions() const; + RuleType ruleType() const; + void setRuleType(RuleType ruleType); + private: QUuid m_id; Trigger m_trigger; QList m_states; QList m_actions; + RuleType m_ruleType; }; #endif // RULE_H diff --git a/server/ruleengine.cpp b/server/ruleengine.cpp index 6322844c..9597733e 100644 --- a/server/ruleengine.cpp +++ b/server/ruleengine.cpp @@ -114,6 +114,7 @@ RuleEngine::RuleError RuleEngine::addRule(const Trigger &trigger, const QList RuleEngine::rules() const { return m_rules; } + +RuleEngine::RuleError RuleEngine::removeRule(const QUuid &ruleId) +{ + for (int i = 0; i < m_rules.count(); ++i) { + Rule rule = m_rules.at(i); + if (rule.id() == ruleId) { + + m_rules.takeAt(i); + + QSettings settings(rulesFileName); + settings.beginGroup(rule.id().toString()); + settings.remove(""); + settings.endGroup(); + + emit ruleRemoved(rule.id()); + return RuleErrorNoError; + } + } + return RuleErrorRuleNotFound; +} diff --git a/server/ruleengine.h b/server/ruleengine.h index 4af5d3b0..63e0dd1d 100644 --- a/server/ruleengine.h +++ b/server/ruleengine.h @@ -14,6 +14,7 @@ class RuleEngine : public QObject public: enum RuleError { RuleErrorNoError, + RuleErrorRuleNotFound, RuleErrorDeviceNotFound, RuleErrorTriggerTypeNotFound }; @@ -26,6 +27,12 @@ public: RuleError addRule(const Trigger &trigger, const QList states, const QList &actions); QList rules() const; + RuleError removeRule(const QUuid &ruleId); + +signals: + void ruleAdded(const QUuid &ruleId); + void ruleRemoved(const QUuid &ruleId); + private: QList m_rules;