From e049c3b2f5d78cf8e763222142fd1bdba8b39d2d Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Thu, 17 Oct 2019 00:02:44 +0200 Subject: [PATCH] Don't execute actions on devices that didn't complete the setup --- libnymea-core/devices/devicemanagerimplementation.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/libnymea-core/devices/devicemanagerimplementation.cpp b/libnymea-core/devices/devicemanagerimplementation.cpp index eabbaaec..2c17cf59 100644 --- a/libnymea-core/devices/devicemanagerimplementation.cpp +++ b/libnymea-core/devices/devicemanagerimplementation.cpp @@ -912,15 +912,24 @@ DeviceActionInfo *DeviceManagerImplementation::executeAction(const Action &actio Action finalAction = action; Device *device = m_configuredDevices.value(action.deviceId()); if (!device) { + qCWarning(dcDeviceManager()) << "Cannot execute action. No such device:" << action.deviceId(); DeviceActionInfo *info = new DeviceActionInfo(nullptr, action, this); info->finish(Device::DeviceErrorDeviceNotFound); return info; } + if (!device->setupComplete()) { + qCWarning(dcDeviceManager()) << "Cannot execute action. Device" << device->name() << "hasn't completed setup."; + DeviceActionInfo *info = new DeviceActionInfo(nullptr, action, this); + info->finish(Device::DeviceErrorSetupFailed); + return info; + } + // Make sure this device has an action type with this id DeviceClass deviceClass = findDeviceClass(device->deviceClassId()); ActionType actionType = deviceClass.actionTypes().findById(action.actionTypeId()); if (actionType.id().isNull()) { + qCWarning(dcDeviceManager()) << "Cannot execute action. No such action type" << action.actionTypeId(); DeviceActionInfo *info = new DeviceActionInfo(device, action, this); info->finish(Device::DeviceErrorActionTypeNotFound); return info; @@ -929,6 +938,7 @@ DeviceActionInfo *DeviceManagerImplementation::executeAction(const Action &actio ParamList finalParams = action.params(); Device::DeviceError paramCheck = DeviceUtils::verifyParams(actionType.paramTypes(), finalParams); if (paramCheck != Device::DeviceErrorNoError) { + qCWarning(dcDeviceManager()) << "Cannot execute action. Parameter verification failed."; DeviceActionInfo *info = new DeviceActionInfo(device, action, this); info->finish(paramCheck); return info; @@ -939,6 +949,7 @@ DeviceActionInfo *DeviceManagerImplementation::executeAction(const Action &actio DevicePlugin *plugin = m_devicePlugins.value(device->pluginId()); if (!plugin) { + qCWarning(dcDeviceManager()) << "Cannot execute action. Plugin not found for device" << device->name(); info->finish(Device::DeviceErrorPluginNotFound); return info; }