properly store username in device parameters
This commit is contained in:
parent
70b6cffda7
commit
861f5704ef
@ -111,6 +111,18 @@ QVariant Device::paramValue(const QString ¶mName) const
|
|||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Device::setParamValue(const QString ¶mName, const QVariant &value)
|
||||||
|
{
|
||||||
|
QList<Param> params;
|
||||||
|
foreach (Param param, m_params) {
|
||||||
|
if (param.name() == paramName) {
|
||||||
|
param.setValue(value);
|
||||||
|
}
|
||||||
|
params.append(param);
|
||||||
|
}
|
||||||
|
m_params = params;
|
||||||
|
}
|
||||||
|
|
||||||
/*! Returns the states of this Device. It must match the \l{StateType} description in the associated \l{DeviceClass}. */
|
/*! Returns the states of this Device. It must match the \l{StateType} description in the associated \l{DeviceClass}. */
|
||||||
QList<State> Device::states() const
|
QList<State> Device::states() const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -49,6 +49,7 @@ public:
|
|||||||
void setParams(const QList<Param> ¶ms);
|
void setParams(const QList<Param> ¶ms);
|
||||||
|
|
||||||
QVariant paramValue(const QString ¶mName) const;
|
QVariant paramValue(const QString ¶mName) const;
|
||||||
|
void setParamValue(const QString ¶mName, const QVariant &value);
|
||||||
|
|
||||||
QList<State> states() const;
|
QList<State> states() const;
|
||||||
bool hasState(const StateTypeId &stateTypeId) const;
|
bool hasState(const StateTypeId &stateTypeId) const;
|
||||||
|
|||||||
@ -69,6 +69,8 @@ QList<DeviceClass> DevicePluginPhilipsHue::supportedDevices() const
|
|||||||
QList<ParamType> paramTypes;
|
QList<ParamType> paramTypes;
|
||||||
ParamType ipParam("ip", QVariant::String);
|
ParamType ipParam("ip", QVariant::String);
|
||||||
paramTypes.append(ipParam);
|
paramTypes.append(ipParam);
|
||||||
|
ParamType usernameParam("username", QVariant::String);
|
||||||
|
paramTypes.append(usernameParam);
|
||||||
deviceClassHue.setParamTypes(paramTypes);
|
deviceClassHue.setParamTypes(paramTypes);
|
||||||
|
|
||||||
QList<StateType> hueStates;
|
QList<StateType> hueStates;
|
||||||
@ -146,6 +148,12 @@ DeviceManager::DeviceError DevicePluginPhilipsHue::discoverDevices(const DeviceC
|
|||||||
return DeviceManager::DeviceErrorAsync;
|
return DeviceManager::DeviceErrorAsync;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QPair<DeviceManager::DeviceSetupStatus, QString> DevicePluginPhilipsHue::setupDevice(Device *device)
|
||||||
|
{
|
||||||
|
qDebug() << "setupDevice" << device->params();
|
||||||
|
return reportDeviceSetup();
|
||||||
|
}
|
||||||
|
|
||||||
QPair<DeviceManager::DeviceSetupStatus, QString> DevicePluginPhilipsHue::confirmPairing(const QUuid &pairingTransactionId, const DeviceClassId &deviceClassId, const QList<Param> ¶ms)
|
QPair<DeviceManager::DeviceSetupStatus, QString> DevicePluginPhilipsHue::confirmPairing(const QUuid &pairingTransactionId, const DeviceClassId &deviceClassId, const QList<Param> ¶ms)
|
||||||
{
|
{
|
||||||
Param ipParam;
|
Param ipParam;
|
||||||
@ -157,12 +165,19 @@ QPair<DeviceManager::DeviceSetupStatus, QString> DevicePluginPhilipsHue::confirm
|
|||||||
if (!ipParam.isValid()) {
|
if (!ipParam.isValid()) {
|
||||||
return reportDeviceSetup(DeviceManager::DeviceSetupStatusFailure, "Missing parameter: ip");
|
return reportDeviceSetup(DeviceManager::DeviceSetupStatusFailure, "Missing parameter: ip");
|
||||||
}
|
}
|
||||||
|
Param usernameParam;
|
||||||
QString username = "guh-" + QUuid::createUuid().toString().remove(QRegExp("[\\{\\}]*")).remove(QRegExp("\\-[0-9a-f\\-]*"));
|
foreach (const Param ¶m, params) {
|
||||||
|
if (param.name() == "username") {
|
||||||
|
usernameParam = param;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!usernameParam.isValid()) {
|
||||||
|
return reportDeviceSetup(DeviceManager::DeviceSetupStatusFailure, "Missing parameter: username");
|
||||||
|
}
|
||||||
|
|
||||||
QVariantMap createUserParams;
|
QVariantMap createUserParams;
|
||||||
createUserParams.insert("devicetype", "guh");
|
createUserParams.insert("devicetype", "guh");
|
||||||
createUserParams.insert("username", username);
|
createUserParams.insert("username", usernameParam.value().toString());
|
||||||
|
|
||||||
QJsonDocument jsonDoc = QJsonDocument::fromVariant(createUserParams);
|
QJsonDocument jsonDoc = QJsonDocument::fromVariant(createUserParams);
|
||||||
QByteArray data = jsonDoc.toJson();
|
QByteArray data = jsonDoc.toJson();
|
||||||
@ -171,8 +186,7 @@ QPair<DeviceManager::DeviceSetupStatus, QString> DevicePluginPhilipsHue::confirm
|
|||||||
QNetworkReply *reply = m_nam->post(request, data);
|
QNetworkReply *reply = m_nam->post(request, data);
|
||||||
connect(reply, &QNetworkReply::finished, this, &DevicePluginPhilipsHue::createUserFinished);
|
connect(reply, &QNetworkReply::finished, this, &DevicePluginPhilipsHue::createUserFinished);
|
||||||
|
|
||||||
HueBridgeConnection *bridge = new HueBridgeConnection(QHostAddress(ipParam.value().toString()), username);
|
m_pairings.insert(reply, pairingTransactionId);
|
||||||
m_pairings.insert(reply, qMakePair<QUuid, HueBridgeConnection*>(pairingTransactionId, bridge));
|
|
||||||
return reportDeviceSetup(DeviceManager::DeviceSetupStatusAsync);
|
return reportDeviceSetup(DeviceManager::DeviceSetupStatusAsync);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -202,6 +216,8 @@ void DevicePluginPhilipsHue::discoveryDone(const QList<QHostAddress> &bridges)
|
|||||||
QList<Param> params;
|
QList<Param> params;
|
||||||
Param param("ip", bridge.toString());
|
Param param("ip", bridge.toString());
|
||||||
params.append(param);
|
params.append(param);
|
||||||
|
Param userParam("username", "guh-" + QUuid::createUuid().toString().remove(QRegExp("[\\{\\}]*")).remove(QRegExp("\\-[0-9a-f\\-]*")));
|
||||||
|
params.append(userParam);
|
||||||
descriptor.setParams(params);
|
descriptor.setParams(params);
|
||||||
deviceDescriptors.append(descriptor);
|
deviceDescriptors.append(descriptor);
|
||||||
}
|
}
|
||||||
@ -214,15 +230,12 @@ void DevicePluginPhilipsHue::createUserFinished()
|
|||||||
QNetworkReply *reply = static_cast<QNetworkReply*>(sender());
|
QNetworkReply *reply = static_cast<QNetworkReply*>(sender());
|
||||||
QByteArray data = reply->readAll();
|
QByteArray data = reply->readAll();
|
||||||
|
|
||||||
QPair<QUuid, HueBridgeConnection*> pair = m_pairings.take(reply);
|
QUuid pairingTransactionId = m_pairings.take(reply);
|
||||||
QUuid pairingTransactionId = pair.first;
|
|
||||||
HueBridgeConnection *bridge = pair.second;
|
|
||||||
|
|
||||||
QJsonParseError error;
|
QJsonParseError error;
|
||||||
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
|
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
|
||||||
if (error.error != QJsonParseError::NoError) {
|
if (error.error != QJsonParseError::NoError) {
|
||||||
emit pairingFinished(pairingTransactionId, DeviceManager::DeviceSetupStatusFailure, "Pairing failed. Failed to parse response from Hue Bridge.");
|
emit pairingFinished(pairingTransactionId, DeviceManager::DeviceSetupStatusFailure, "Pairing failed. Failed to parse response from Hue Bridge.");
|
||||||
delete bridge;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -231,12 +244,9 @@ void DevicePluginPhilipsHue::createUserFinished()
|
|||||||
if (response.contains("error")) {
|
if (response.contains("error")) {
|
||||||
qDebug() << "Failed to pair Hue bridge:" << response.value("error").toMap().value("description");
|
qDebug() << "Failed to pair Hue bridge:" << response.value("error").toMap().value("description");
|
||||||
emit pairingFinished(pairingTransactionId, DeviceManager::DeviceSetupStatusFailure, "Pairing failed:" + response.value("error").toMap().value("description").toString());
|
emit pairingFinished(pairingTransactionId, DeviceManager::DeviceSetupStatusFailure, "Pairing failed:" + response.value("error").toMap().value("description").toString());
|
||||||
delete bridge;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
emit pairingFinished(pairingTransactionId, DeviceManager::DeviceSetupStatusSuccess, QString());
|
emit pairingFinished(pairingTransactionId, DeviceManager::DeviceSetupStatusSuccess, QString());
|
||||||
|
|
||||||
m_bridges.append(bridge);
|
|
||||||
qDebug() << "response" << response << data;
|
qDebug() << "response" << response << data;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -48,6 +48,8 @@ public:
|
|||||||
QList<ParamType> configurationDescription() const override;
|
QList<ParamType> configurationDescription() const override;
|
||||||
DeviceManager::DeviceError discoverDevices(const DeviceClassId &deviceClassId, const QVariantMap ¶ms) const override;
|
DeviceManager::DeviceError discoverDevices(const DeviceClassId &deviceClassId, const QVariantMap ¶ms) const override;
|
||||||
|
|
||||||
|
QPair<DeviceManager::DeviceSetupStatus, QString> setupDevice(Device *device) override;
|
||||||
|
|
||||||
QPair<DeviceManager::DeviceSetupStatus, QString> confirmPairing(const QUuid &pairingTransactionId, const DeviceClassId &deviceClassId, const QList<Param> ¶ms) override;
|
QPair<DeviceManager::DeviceSetupStatus, QString> confirmPairing(const QUuid &pairingTransactionId, const DeviceClassId &deviceClassId, const QList<Param> ¶ms) override;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
@ -63,9 +65,7 @@ private:
|
|||||||
Discovery *m_discovery;
|
Discovery *m_discovery;
|
||||||
QNetworkAccessManager *m_nam;
|
QNetworkAccessManager *m_nam;
|
||||||
|
|
||||||
QHash<QNetworkReply*, QPair<QUuid, HueBridgeConnection*> > m_pairings;
|
QHash<QNetworkReply*, QUuid> m_pairings;
|
||||||
|
|
||||||
QList<HueBridgeConnection*> m_bridges;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DEVICEPLUGINBOBLIGHT_H
|
#endif // DEVICEPLUGINBOBLIGHT_H
|
||||||
|
|||||||
Reference in New Issue
Block a user