added api to remove rules

This commit is contained in:
Michael Zanetti 2014-01-25 02:52:08 +01:00
parent e9a2502e91
commit 52c2b3bfaf
6 changed files with 77 additions and 1 deletions

View File

@ -28,6 +28,11 @@ RulesHandler::RulesHandler(QObject *parent) :
setParams("AddRule", params); setParams("AddRule", params);
setReturns("AddRule", returns); 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 QString RulesHandler::name() const
@ -100,6 +105,28 @@ QVariantMap RulesHandler::AddRule(const QVariantMap &params)
returns.insert("success", false); returns.insert("success", false);
returns.insert("errorMessage", "Device does not have such a trigger type."); returns.insert("errorMessage", "Device does not have such a trigger type.");
break; break;
default:
returns.insert("success", false);
returns.insert("errorMessage", "Unknown error");
}
return returns;
}
QVariantMap RulesHandler::RemoveRule(const QVariantMap &params)
{
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; return returns;
} }

View File

@ -14,6 +14,7 @@ public:
Q_INVOKABLE QVariantMap GetRules(const QVariantMap &params); Q_INVOKABLE QVariantMap GetRules(const QVariantMap &params);
Q_INVOKABLE QVariantMap AddRule(const QVariantMap &params); Q_INVOKABLE QVariantMap AddRule(const QVariantMap &params);
Q_INVOKABLE QVariantMap RemoveRule(const QVariantMap &params);
}; };

View File

@ -6,7 +6,8 @@ Rule::Rule(const QUuid &id, const Trigger &trigger, const QList<State> states, c
m_id(id), m_id(id),
m_trigger(trigger), m_trigger(trigger),
m_states(states), m_states(states),
m_actions(actions) m_actions(actions),
m_ruleType(RuleTypeAll)
{ {
} }
@ -29,3 +30,13 @@ QList<Action> Rule::actions() const
{ {
return m_actions; return m_actions;
} }
Rule::RuleType Rule::ruleType() const
{
return m_ruleType;
}
void Rule::setRuleType(Rule::RuleType ruleType)
{
m_ruleType = ruleType;
}

View File

@ -10,6 +10,11 @@
class Rule class Rule
{ {
public: public:
enum RuleType {
RuleTypeAll,
RuleTypeAny
};
Rule(const QUuid &id, const Trigger &trigger, const QList<State> states, const QList<Action> &actions); Rule(const QUuid &id, const Trigger &trigger, const QList<State> states, const QList<Action> &actions);
QUuid id() const; QUuid id() const;
@ -17,11 +22,15 @@ public:
QList<State> states() const; QList<State> states() const;
QList<Action> actions() const; QList<Action> actions() const;
RuleType ruleType() const;
void setRuleType(RuleType ruleType);
private: private:
QUuid m_id; QUuid m_id;
Trigger m_trigger; Trigger m_trigger;
QList<State> m_states; QList<State> m_states;
QList<Action> m_actions; QList<Action> m_actions;
RuleType m_ruleType;
}; };
#endif // RULE_H #endif // RULE_H

View File

@ -114,6 +114,7 @@ RuleEngine::RuleError RuleEngine::addRule(const Trigger &trigger, const QList<St
Rule rule = Rule(QUuid::createUuid(), trigger, states, actions); Rule rule = Rule(QUuid::createUuid(), trigger, states, actions);
m_rules.append(rule); m_rules.append(rule);
emit ruleAdded(rule.id());
QSettings settings(rulesFileName); QSettings settings(rulesFileName);
settings.beginGroup(rule.id().toString()); settings.beginGroup(rule.id().toString());
@ -151,3 +152,23 @@ QList<Rule> RuleEngine::rules() const
{ {
return m_rules; 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;
}

View File

@ -14,6 +14,7 @@ class RuleEngine : public QObject
public: public:
enum RuleError { enum RuleError {
RuleErrorNoError, RuleErrorNoError,
RuleErrorRuleNotFound,
RuleErrorDeviceNotFound, RuleErrorDeviceNotFound,
RuleErrorTriggerTypeNotFound RuleErrorTriggerTypeNotFound
}; };
@ -26,6 +27,12 @@ public:
RuleError addRule(const Trigger &trigger, const QList<State> states, const QList<Action> &actions); RuleError addRule(const Trigger &trigger, const QList<State> states, const QList<Action> &actions);
QList<Rule> rules() const; QList<Rule> rules() const;
RuleError removeRule(const QUuid &ruleId);
signals:
void ruleAdded(const QUuid &ruleId);
void ruleRemoved(const QUuid &ruleId);
private: private:
QList<Rule> m_rules; QList<Rule> m_rules;