diff --git a/libguh/devicemanager.cpp b/libguh/devicemanager.cpp index 891380bc..4ce1d5ec 100644 --- a/libguh/devicemanager.cpp +++ b/libguh/devicemanager.cpp @@ -199,7 +199,12 @@ QPair DeviceManager::discoverDevices(const if (!plugin) { return qMakePair(DeviceManager::DeviceErrorPluginNotFound, deviceClass.pluginId().toString()); } - return plugin->discoverDevices(deviceClassId, effectiveParams); + m_discoveringPlugins.append(plugin); + QPair ret = plugin->discoverDevices(deviceClassId, effectiveParams); + if (ret.first != DeviceErrorAsync) { + m_discoveringPlugins.removeOne(plugin); + } + return ret; } /*! Add a new configured device for the given \l{DeviceClass} and the given parameters. @@ -622,6 +627,9 @@ void DeviceManager::startMonitoringAutoDevices() void DeviceManager::slotDevicesDiscovered(const DeviceClassId &deviceClassId, const QList deviceDescriptors) { + DevicePlugin *plugin = static_cast(sender()); + m_discoveringPlugins.removeOne(plugin); + foreach (const DeviceDescriptor &descriptor, deviceDescriptors) { m_discoveredDevices.insert(descriptor.id(), descriptor); } @@ -812,13 +820,24 @@ void DeviceManager::slotDeviceStateValueChanged(const QUuid &stateTypeId, const void DeviceManager::radio433SignalReceived(QList rawData) { + QList targetPlugins; + foreach (Device *device, m_configuredDevices) { DeviceClass deviceClass = m_supportedDevices.value(device->deviceClassId()); DevicePlugin *plugin = m_devicePlugins.value(deviceClass.pluginId()); - if (plugin->requiredHardware().testFlag(HardwareResourceRadio433)) { - plugin->radioData(rawData); + if (plugin->requiredHardware().testFlag(HardwareResourceRadio433) && !targetPlugins.contains(plugin)) { + targetPlugins.append(plugin); } } + foreach (DevicePlugin *plugin, m_discoveringPlugins) { + if (plugin->requiredHardware().testFlag(HardwareResourceRadio433) && !targetPlugins.contains(plugin)) { + targetPlugins.append(plugin); + } + } + + foreach (DevicePlugin *plugin, targetPlugins) { + plugin->radioData(rawData); + } } void DeviceManager::timerEvent() diff --git a/libguh/devicemanager.h b/libguh/devicemanager.h index 2d134594..376e4f9a 100644 --- a/libguh/devicemanager.h +++ b/libguh/devicemanager.h @@ -151,6 +151,8 @@ private: QHash > m_pairingsJustAdd; QHash > m_pairingsDiscovery; + QList m_discoveringPlugins; + friend class DevicePlugin; }; Q_DECLARE_OPERATORS_FOR_FLAGS(DeviceManager::HardwareResources)