diff --git a/libguh/devicemanager.cpp b/libguh/devicemanager.cpp index 81dacc55..d216c9f2 100644 --- a/libguh/devicemanager.cpp +++ b/libguh/devicemanager.cpp @@ -173,7 +173,7 @@ QList DeviceManager::supportedDevices(const VendorId &vendorId) con return ret; } -DeviceManager::DeviceError DeviceManager::discoverDevices(const DeviceClassId &deviceClassId, const QVariantMap ¶ms) const +DeviceManager::DeviceError DeviceManager::discoverDevices(const DeviceClassId &deviceClassId, const QList ¶ms) const { DeviceClass deviceClass = findDeviceClass(deviceClassId); if (!deviceClass.isValid()) { diff --git a/libguh/devicemanager.h b/libguh/devicemanager.h index ced75d46..e09a7ef5 100644 --- a/libguh/devicemanager.h +++ b/libguh/devicemanager.h @@ -78,7 +78,7 @@ public: QList supportedVendors() const; QList supportedDevices(const VendorId &vendorId = VendorId()) const; - DeviceError discoverDevices(const DeviceClassId &deviceClassId, const QVariantMap ¶ms) const; + DeviceError discoverDevices(const DeviceClassId &deviceClassId, const QList ¶ms) const; QList configuredDevices() const; QPair addConfiguredDevice(const DeviceClassId &deviceClassId, const QList ¶ms, const DeviceId id = DeviceId::createDeviceId()); diff --git a/libguh/plugin/deviceplugin.cpp b/libguh/plugin/deviceplugin.cpp index 9d625e82..8e1aa195 100644 --- a/libguh/plugin/deviceplugin.cpp +++ b/libguh/plugin/deviceplugin.cpp @@ -152,7 +152,7 @@ bool DevicePlugin::configureAutoDevice(QList loadedDevices, Device *dev be an async operation. Return DeviceErrorAsync or DeviceErrorNoError if the discovery has been started successfully. Return an appropriate error otherwise. Once devices are discovered, emit devicesDiscovered() once. */ -DeviceManager::DeviceError DevicePlugin::discoverDevices(const DeviceClassId &deviceClassId, const QVariantMap ¶ms) const +DeviceManager::DeviceError DevicePlugin::discoverDevices(const DeviceClassId &deviceClassId, const QList ¶ms) const { Q_UNUSED(deviceClassId) Q_UNUSED(params) diff --git a/libguh/plugin/deviceplugin.h b/libguh/plugin/deviceplugin.h index ad8f697b..1d2367a9 100644 --- a/libguh/plugin/deviceplugin.h +++ b/libguh/plugin/deviceplugin.h @@ -50,7 +50,7 @@ public: virtual DeviceManager::HardwareResources requiredHardware() const = 0; virtual bool configureAutoDevice(QList loadedDevices, Device *device) const; - virtual DeviceManager::DeviceError discoverDevices(const DeviceClassId &deviceClassId, const QVariantMap ¶ms) const; + virtual DeviceManager::DeviceError discoverDevices(const DeviceClassId &deviceClassId, const QList ¶ms) const; virtual QPair setupDevice(Device *device); virtual void deviceRemoved(Device *device); diff --git a/plugins/deviceplugins/openweathermap/devicepluginopenweathermap.cpp b/plugins/deviceplugins/openweathermap/devicepluginopenweathermap.cpp index 37946f0d..c009b38f 100644 --- a/plugins/deviceplugins/openweathermap/devicepluginopenweathermap.cpp +++ b/plugins/deviceplugins/openweathermap/devicepluginopenweathermap.cpp @@ -423,14 +423,20 @@ QList DevicePluginOpenweathermap::supportedDevices() const return ret; } -DeviceManager::DeviceError DevicePluginOpenweathermap::discoverDevices(const DeviceClassId &deviceClassId, const QVariantMap ¶ms) const +DeviceManager::DeviceError DevicePluginOpenweathermap::discoverDevices(const DeviceClassId &deviceClassId, const QList ¶ms) const { - qDebug() << "should discover divces for" << deviceClassId << params.value("location").toString(); - if(params.value("location").toString() == ""){ + QString location; + foreach (const Param ¶m, params) { + if (param.name() == "location") { + location = param.value().toString(); + } + } + + if (location.isEmpty()){ m_openweaher->searchAutodetect(); return DeviceManager::DeviceErrorAsync; } - m_openweaher->search(params.value("location").toString()); + m_openweaher->search(location); return DeviceManager::DeviceErrorAsync; } diff --git a/plugins/deviceplugins/openweathermap/devicepluginopenweathermap.h b/plugins/deviceplugins/openweathermap/devicepluginopenweathermap.h index cbfd7361..771f58ea 100644 --- a/plugins/deviceplugins/openweathermap/devicepluginopenweathermap.h +++ b/plugins/deviceplugins/openweathermap/devicepluginopenweathermap.h @@ -38,7 +38,7 @@ public: QList supportedVendors() const override; QList supportedDevices() const override; - DeviceManager::DeviceError discoverDevices(const DeviceClassId &deviceClassId, const QVariantMap ¶ms) const override; + DeviceManager::DeviceError discoverDevices(const DeviceClassId &deviceClassId, const QList ¶ms) const override; QPair setupDevice(Device *device) override; DeviceManager::HardwareResources requiredHardware() const override; QPair executeAction(Device *device, const Action &action) override; diff --git a/plugins/deviceplugins/philipshue/devicepluginphilipshue.cpp b/plugins/deviceplugins/philipshue/devicepluginphilipshue.cpp index 04d6c9d5..ce071454 100644 --- a/plugins/deviceplugins/philipshue/devicepluginphilipshue.cpp +++ b/plugins/deviceplugins/philipshue/devicepluginphilipshue.cpp @@ -157,7 +157,7 @@ QList DevicePluginPhilipsHue::configurationDescription() const return params; } -DeviceManager::DeviceError DevicePluginPhilipsHue::discoverDevices(const DeviceClassId &deviceClassId, const QVariantMap ¶ms) const +DeviceManager::DeviceError DevicePluginPhilipsHue::discoverDevices(const DeviceClassId &deviceClassId, const QList ¶ms) const { m_discovery->findBridges(4000); return DeviceManager::DeviceErrorAsync; diff --git a/plugins/deviceplugins/philipshue/devicepluginphilipshue.h b/plugins/deviceplugins/philipshue/devicepluginphilipshue.h index 06d8ae53..dc0dcb43 100644 --- a/plugins/deviceplugins/philipshue/devicepluginphilipshue.h +++ b/plugins/deviceplugins/philipshue/devicepluginphilipshue.h @@ -46,7 +46,7 @@ public: PluginId pluginId() const override; QList configurationDescription() const override; - DeviceManager::DeviceError discoverDevices(const DeviceClassId &deviceClassId, const QVariantMap ¶ms) const override; + DeviceManager::DeviceError discoverDevices(const DeviceClassId &deviceClassId, const QList ¶ms) const override; QPair setupDevice(Device *device) override; diff --git a/server/jsonrpc/devicehandler.cpp b/server/jsonrpc/devicehandler.cpp index c3f05b72..7f5cf901 100644 --- a/server/jsonrpc/devicehandler.cpp +++ b/server/jsonrpc/devicehandler.cpp @@ -243,7 +243,13 @@ JsonReply *DeviceHandler::GetDiscoveredDevices(const QVariantMap ¶ms) const DeviceClassId deviceClassId = DeviceClassId(params.value("deviceClassId").toString()); - DeviceManager::DeviceError status = GuhCore::instance()->deviceManager()->discoverDevices(deviceClassId, params.value("discoveryParams").toMap()); + QList discoveryParams; + foreach (const QVariant &discoveryParam, params.value("discoveryParams").toList()) { + Param dp(discoveryParam.toMap().keys().first(), discoveryParam.toMap().values().first()); + discoveryParams.append(dp); + } + + DeviceManager::DeviceError status = GuhCore::instance()->deviceManager()->discoverDevices(deviceClassId, discoveryParams); switch (status) { case DeviceManager::DeviceErrorAsync: case DeviceManager::DeviceErrorNoError: { @@ -621,5 +627,14 @@ void DeviceHandler::pairingFinished(const QUuid &pairingTransactionId, DeviceMan return; } + if (status != DeviceManager::DeviceErrorNoError) { + QVariantMap returns; + returns.insert("success", false); + returns.insert("errorMessage", errorMessage); + reply->setData(returns); + reply->finished(); + return; + } + m_asynDeviceAdditions.insert(deviceId, reply); }