diff --git a/libguh/devicemanager.cpp b/libguh/devicemanager.cpp index 9e7b863a..384eddaa 100644 --- a/libguh/devicemanager.cpp +++ b/libguh/devicemanager.cpp @@ -180,6 +180,24 @@ DeviceManager::DeviceError DeviceManager::addConfiguredDevice(const DeviceClassI return DeviceErrorCreationMethodNotSupported; } +DeviceManager::DeviceError DeviceManager::addConfiguredDevice(const DeviceClassId &deviceClassId, const DeviceDescriptorId &deviceDescriptorId) +{ + DeviceClass deviceClass = findDeviceClass(deviceClassId); + if (!deviceClass.isValid()) { + return DeviceErrorDeviceClassNotFound; + } + if (deviceClass.createMethod() != DeviceClass::CreateMethodDiscovery) { + return DeviceErrorCreationMethodNotSupported; + } + + DeviceDescriptor descriptor = m_discoveredDevices.take(deviceClassId).take(deviceDescriptorId); + if (!descriptor.isValid()) { + return DeviceErrorDeviceDescriptorNotFound; + } + + return addConfiguredDeviceInternal(deviceClassId, descriptor.params()); +} + DeviceManager::DeviceError DeviceManager::addConfiguredDeviceInternal(const DeviceClassId &deviceClassId, const QVariantMap ¶ms, const DeviceId id) { DeviceClass deviceClass = findDeviceClass(deviceClassId); @@ -435,7 +453,11 @@ void DeviceManager::createNewAutoDevices() void DeviceManager::slotDevicesDiscovered(const DeviceClassId &deviceClassId, const QList deviceDescriptors) { - m_discoveredDevices[deviceClassId] = deviceDescriptors; + QHash descriptorHash; + foreach (const DeviceDescriptor &descriptor, deviceDescriptors) { + descriptorHash.insert(descriptor.id(), descriptor); + } + m_discoveredDevices[deviceClassId] = descriptorHash; emit devicesDiscovered(deviceClassId, deviceDescriptors); } diff --git a/libguh/devicemanager.h b/libguh/devicemanager.h index ef0970cf..7d40853b 100644 --- a/libguh/devicemanager.h +++ b/libguh/devicemanager.h @@ -57,7 +57,8 @@ public: DeviceErrorDuplicateUuid, DeviceErrorCreationMethodNotSupported, DeviceErrorDeviceParameterError, - DeviceErrorActionParameterError + DeviceErrorActionParameterError, + DeviceErrorDeviceDescriptorNotFound }; explicit DeviceManager(QObject *parent = 0); @@ -72,6 +73,7 @@ public: QList configuredDevices() const; DeviceError addConfiguredDevice(const DeviceClassId &deviceClassId, const QVariantMap ¶ms, const DeviceId id = DeviceId::createDeviceId()); + DeviceError addConfiguredDevice(const DeviceClassId &deviceClassId, const DeviceDescriptorId &deviceDescriptorId); DeviceError removeConfiguredDevice(const DeviceId &deviceId); Device* findConfiguredDevice(const DeviceId &id) const; @@ -108,7 +110,7 @@ private: QHash > m_vendorDeviceMap; QHash m_supportedDevices; QList m_configuredDevices; - QHash > m_discoveredDevices; + QHash > m_discoveredDevices; QHash m_devicePlugins; diff --git a/libguh/plugin/devicedescriptor.cpp b/libguh/plugin/devicedescriptor.cpp index f3f9780e..70523938 100644 --- a/libguh/plugin/devicedescriptor.cpp +++ b/libguh/plugin/devicedescriptor.cpp @@ -1,5 +1,10 @@ #include "devicedescriptor.h" +DeviceDescriptor::DeviceDescriptor() +{ + +} + DeviceDescriptor::DeviceDescriptor(const DeviceDescriptorId &id, const DeviceClassId &deviceClassId, const QString &title, const QString &description) : m_id(id), m_deviceClassId(deviceClassId), @@ -8,6 +13,11 @@ DeviceDescriptor::DeviceDescriptor(const DeviceDescriptorId &id, const DeviceCla { } +bool DeviceDescriptor::isValid() const +{ + return !m_id.isNull() && !m_deviceClassId.isNull(); +} + DeviceDescriptorId DeviceDescriptor::id() const { return m_id; diff --git a/libguh/plugin/devicedescriptor.h b/libguh/plugin/devicedescriptor.h index 71fb9559..08d42e7e 100644 --- a/libguh/plugin/devicedescriptor.h +++ b/libguh/plugin/devicedescriptor.h @@ -8,8 +8,11 @@ class DeviceDescriptor { public: + DeviceDescriptor(); DeviceDescriptor(const DeviceDescriptorId &id, const DeviceClassId &deviceClassId, const QString &title = QString(), const QString &description = QString()); + bool isValid() const; + DeviceDescriptorId id() const; DeviceClassId deviceClassId() const;