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);
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 &params)
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 &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;
}

View File

@ -14,6 +14,7 @@ public:
Q_INVOKABLE QVariantMap GetRules(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_trigger(trigger),
m_states(states),
m_actions(actions)
m_actions(actions),
m_ruleType(RuleTypeAll)
{
}
@ -29,3 +30,13 @@ QList<Action> Rule::actions() const
{
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
{
public:
enum RuleType {
RuleTypeAll,
RuleTypeAny
};
Rule(const QUuid &id, const Trigger &trigger, const QList<State> states, const QList<Action> &actions);
QUuid id() const;
@ -17,11 +22,15 @@ public:
QList<State> states() const;
QList<Action> actions() const;
RuleType ruleType() const;
void setRuleType(RuleType ruleType);
private:
QUuid m_id;
Trigger m_trigger;
QList<State> m_states;
QList<Action> m_actions;
RuleType m_ruleType;
};
#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);
m_rules.append(rule);
emit ruleAdded(rule.id());
QSettings settings(rulesFileName);
settings.beginGroup(rule.id().toString());
@ -151,3 +152,23 @@ QList<Rule> 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;
}

View File

@ -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<State> states, const QList<Action> &actions);
QList<Rule> rules() const;
RuleError removeRule(const QUuid &ruleId);
signals:
void ruleAdded(const QUuid &ruleId);
void ruleRemoved(const QUuid &ruleId);
private:
QList<Rule> m_rules;