added rules notifications

This commit is contained in:
Simon Stürz 2015-05-01 22:52:08 +02:00 committed by Michael Zanetti
parent bb03280583
commit a39a38f993
8 changed files with 77 additions and 7 deletions

View File

@ -358,11 +358,13 @@ GuhCore::GuhCore(QObject *parent) :
connect(m_deviceManager, &DeviceManager::deviceAdded, this, &GuhCore::deviceAdded); connect(m_deviceManager, &DeviceManager::deviceAdded, this, &GuhCore::deviceAdded);
connect(m_deviceManager, &DeviceManager::deviceRemoved, this, &GuhCore::deviceRemoved); connect(m_deviceManager, &DeviceManager::deviceRemoved, this, &GuhCore::deviceRemoved);
connect(m_deviceManager, &DeviceManager::actionExecutionFinished, this, &GuhCore::actionExecutionFinished); connect(m_deviceManager, &DeviceManager::actionExecutionFinished, this, &GuhCore::actionExecutionFinished);
connect(m_deviceManager, &DeviceManager::devicesDiscovered, this, &GuhCore::devicesDiscovered); connect(m_deviceManager, &DeviceManager::devicesDiscovered, this, &GuhCore::devicesDiscovered);
connect(m_deviceManager, &DeviceManager::deviceSetupFinished, this, &GuhCore::deviceSetupFinished); connect(m_deviceManager, &DeviceManager::deviceSetupFinished, this, &GuhCore::deviceSetupFinished);
connect(m_deviceManager, &DeviceManager::pairingFinished, this, &GuhCore::pairingFinished); connect(m_deviceManager, &DeviceManager::pairingFinished, this, &GuhCore::pairingFinished);
connect(m_ruleEngine, &RuleEngine::ruleAdded, this, &GuhCore::ruleAdded);
connect(m_ruleEngine, &RuleEngine::ruleRemoved, this, &GuhCore::ruleRemoved);
m_logger->logSystemEvent(true); m_logger->logSystemEvent(true);
} }

View File

@ -86,15 +86,18 @@ public:
signals: signals:
void eventTriggered(const Event &event); void eventTriggered(const Event &event);
void deviceStateChanged(Device *device, const QUuid &stateTypeId, const QVariant &value); void deviceStateChanged(Device *device, const QUuid &stateTypeId, const QVariant &value);
void actionExecuted(const ActionId &id, DeviceManager::DeviceError status);
void deviceRemoved(const DeviceId &deviceId); void deviceRemoved(const DeviceId &deviceId);
void deviceAdded(Device *device); void deviceAdded(Device *device);
void actionExecuted(const ActionId &id, DeviceManager::DeviceError status);
void devicesDiscovered(const DeviceClassId &deviceClassId, const QList<DeviceDescriptor> deviceDescriptors); void devicesDiscovered(const DeviceClassId &deviceClassId, const QList<DeviceDescriptor> deviceDescriptors);
void deviceSetupFinished(Device *device, DeviceManager::DeviceError status); void deviceSetupFinished(Device *device, DeviceManager::DeviceError status);
void pairingFinished(const PairingTransactionId &pairingTransactionId, DeviceManager::DeviceError status, const DeviceId &deviceId); void pairingFinished(const PairingTransactionId &pairingTransactionId, DeviceManager::DeviceError status, const DeviceId &deviceId);
void ruleRemoved(const RuleId &ruleId);
void ruleAdded(const Rule &rule);
private: private:
RuleEngine *ruleEngine() const; RuleEngine *ruleEngine() const;
DeviceManager* deviceManager() const; DeviceManager* deviceManager() const;

View File

@ -44,7 +44,7 @@
#include <QJsonDocument> #include <QJsonDocument>
#include <QStringList> #include <QStringList>
#define JSON_PROTOCOL_VERSION 19 #define JSON_PROTOCOL_VERSION 20
JsonRPCServer::JsonRPCServer(QObject *parent): JsonRPCServer::JsonRPCServer(QObject *parent):
JsonHandler(parent), JsonHandler(parent),

View File

@ -88,6 +88,21 @@ RulesHandler::RulesHandler(QObject *parent) :
setParams("DisableRule", params); setParams("DisableRule", params);
returns.insert("ruleError", JsonTypes::ruleErrorRef()); returns.insert("ruleError", JsonTypes::ruleErrorRef());
setReturns("DisableRule", returns); setReturns("DisableRule", returns);
// Notifications
params.clear(); returns.clear();
setDescription("RuleRemoved", "Emitted whenever a Rule was removed.");
params.insert("ruleId", JsonTypes::basicTypeToString(JsonTypes::Uuid));
setParams("RuleRemoved", params);
params.clear(); returns.clear();
setDescription("RuleAdded", "Emitted whenever a Rule was added.");
params.insert("rule", JsonTypes::ruleRef());
setParams("RuleAdded", params);
connect(GuhCore::instance(), &GuhCore::ruleAdded, this, &RulesHandler::ruleAddedNotification);
connect(GuhCore::instance(), &GuhCore::ruleRemoved, this, &RulesHandler::ruleRemovedNotification);
} }
QString RulesHandler::name() const QString RulesHandler::name() const
@ -331,3 +346,19 @@ bool RulesHandler::checkEventDescriptors(const QList<EventDescriptor> eventDescr
} }
return false; return false;
} }
void RulesHandler::ruleRemovedNotification(const RuleId &ruleId)
{
QVariantMap params;
params.insert("ruleId", ruleId);
emit RuleRemoved(params);
}
void RulesHandler::ruleAddedNotification(const Rule &rule)
{
QVariantMap params;
params.insert("rule", JsonTypes::packRule(rule));
emit RuleRemoved(params);
}

View File

@ -39,10 +39,20 @@ public:
Q_INVOKABLE JsonReply* EnableRule(const QVariantMap &params); Q_INVOKABLE JsonReply* EnableRule(const QVariantMap &params);
Q_INVOKABLE JsonReply* DisableRule(const QVariantMap &params); Q_INVOKABLE JsonReply* DisableRule(const QVariantMap &params);
signals:
void RuleRemoved(const QVariantMap &params);
void RuleAdded(const QVariantMap &params);
private: private:
QVariant::Type getActionParamType(const ActionTypeId &actionTypeId, const QString &paramName); QVariant::Type getActionParamType(const ActionTypeId &actionTypeId, const QString &paramName);
QVariant::Type getEventParamType(const EventTypeId &eventTypeId, const QString &paramName); QVariant::Type getEventParamType(const EventTypeId &eventTypeId, const QString &paramName);
bool checkEventDescriptors(const QList<EventDescriptor> eventDescriptors, const EventTypeId &eventTypeId); bool checkEventDescriptors(const QList<EventDescriptor> eventDescriptors, const EventTypeId &eventTypeId);
private slots:
void ruleRemovedNotification(const RuleId &ruleId);
void ruleAddedNotification(const Rule &rule);
}; };
#endif // RULESHANDLER_H #endif // RULESHANDLER_H

View File

@ -324,7 +324,7 @@ RuleEngine::RuleError RuleEngine::addRule(const RuleId &ruleId, const QString &n
Rule rule = Rule(ruleId, name, eventDescriptorList, stateEvaluator, actions, exitActions); Rule rule = Rule(ruleId, name, eventDescriptorList, stateEvaluator, actions, exitActions);
rule.setEnabled(enabled); rule.setEnabled(enabled);
appendRule(rule); appendRule(rule);
emit ruleAdded(rule.id()); emit ruleAdded(rule);
// Save Events / EventDescriptors // Save Events / EventDescriptors
QSettings settings(m_settingsFile); QSettings settings(m_settingsFile);

View File

@ -72,7 +72,7 @@ public:
void removeDeviceFromRule(const RuleId &id, const DeviceId &deviceId); void removeDeviceFromRule(const RuleId &id, const DeviceId &deviceId);
signals: signals:
void ruleAdded(const RuleId &ruleId); void ruleAdded(const Rule &rule);
void ruleRemoved(const RuleId &ruleId); void ruleRemoved(const RuleId &ruleId);
void ruleChanged(const RuleId &ruleId); void ruleChanged(const RuleId &ruleId);

View File

@ -1,4 +1,4 @@
19 20
{ {
"methods": { "methods": {
"Actions.ExecuteAction": { "Actions.ExecuteAction": {
@ -365,6 +365,18 @@
} }
}, },
"notifications": { "notifications": {
"Devices.DeviceAdded": {
"description": "Emitted whenever a Device was added.",
"params": {
"device": "$ref:Device"
}
},
"Devices.DeviceRemoved": {
"description": "Emitted whenever a Device was removed.",
"params": {
"deviceId": "Uuid"
}
},
"Devices.StateChanged": { "Devices.StateChanged": {
"description": "Emitted whenever a State of a device changes.", "description": "Emitted whenever a State of a device changes.",
"params": { "params": {
@ -384,6 +396,18 @@
"params": { "params": {
"logEntry": "$ref:LogEntry" "logEntry": "$ref:LogEntry"
} }
},
"Rules.RuleAdded": {
"description": "Emitted whenever a Rule was added.",
"params": {
"rule": "$ref:Rule"
}
},
"Rules.RuleRemoved": {
"description": "Emitted whenever a Rule was removed.",
"params": {
"ruleId": "Uuid"
}
} }
}, },
"types": { "types": {