Verify events coming from plugins

pull/197/head
Michael Zanetti 2019-08-23 11:39:38 +02:00
parent 98bdda1ef2
commit da0b7a04f8
3 changed files with 23 additions and 1 deletions

View File

@ -1042,7 +1042,7 @@ void DeviceManagerImplementation::loadPlugin(DevicePlugin *pluginIface, const Pl
m_devicePlugins.insert(pluginIface->pluginId(), pluginIface);
connect(pluginIface, &DevicePlugin::emitEvent, this, &DeviceManagerImplementation::eventTriggered);
connect(pluginIface, &DevicePlugin::emitEvent, this, &DeviceManagerImplementation::onEventTriggered);
connect(pluginIface, &DevicePlugin::devicesDiscovered, this, &DeviceManagerImplementation::slotDevicesDiscovered, Qt::QueuedConnection);
connect(pluginIface, &DevicePlugin::deviceSetupFinished, this, &DeviceManagerImplementation::slotDeviceSetupFinished);
connect(pluginIface, &DevicePlugin::actionExecutionFinished, this, &DeviceManagerImplementation::actionExecutionFinished);
@ -1521,6 +1521,23 @@ void DeviceManagerImplementation::cleanupDeviceStateCache()
}
}
void DeviceManagerImplementation::onEventTriggered(const Event &event)
{
// Doing some sanity checks here...
Device *device = m_configuredDevices.value(event.deviceId());
if (!device) {
qCWarning(dcDeviceManager()) << "Invalid device id in emitted event. Not forwarding event.";
return;
}
EventType eventType = device->deviceClass().eventTypes().findById(event.eventTypeId());
if (!eventType.isValid()) {
qCWarning(dcDeviceManager()) << "The given device does not have an event type of id " + event.eventTypeId().toString() + ". Not forwarding event.";
return;
}
// All good, forward the event
emit eventTriggered(event);
}
void DeviceManagerImplementation::slotDeviceStateValueChanged(const StateTypeId &stateTypeId, const QVariant &value)
{
Device *device = qobject_cast<Device*>(sender());

View File

@ -125,6 +125,7 @@ private slots:
void onAutoDeviceDisappeared(const DeviceId &deviceId);
void onLoaded();
void cleanupDeviceStateCache();
void onEventTriggered(const Event &event);
// Only connect this to Devices. It will query the sender()
void slotDeviceStateValueChanged(const StateTypeId &stateTypeId, const QVariant &value);

View File

@ -142,6 +142,10 @@ RuleEngine::~RuleEngine()
QList<Rule> RuleEngine::evaluateEvent(const Event &event)
{
Device *device = NymeaCore::instance()->deviceManager()->findConfiguredDevice(event.deviceId());
if (!device) {
qCWarning(dcRuleEngine()) << "Invalid event. DeviceID does not reference a valid device";
return QList<Rule>();
}
DeviceClass deviceClass = NymeaCore::instance()->deviceManager()->findDeviceClass(device->deviceClassId());
EventType eventType = deviceClass.eventTypes().findById(event.eventTypeId());