Update awattar plugin to new api
parent
f18a7e44db
commit
3d50fabe6d
|
|
@ -39,26 +39,51 @@ DevicePluginAwattar::~DevicePluginAwattar()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Device::DeviceSetupStatus DevicePluginAwattar::setupDevice(Device *device)
|
void DevicePluginAwattar::startPairing(DevicePairingInfo *info)
|
||||||
{
|
{
|
||||||
qCDebug(dcAwattar) << "Setup device" << device->name() << device->params();
|
info->finish(Device::DeviceErrorNoError, QT_TR_NOOP("Please enter your token for awattar.com"));
|
||||||
|
}
|
||||||
|
|
||||||
QString userUuid = device->paramValue(awattarDeviceUserUuidParamTypeId).toString();
|
void DevicePluginAwattar::confirmPairing(DevicePairingInfo *info, const QString &username, const QString &secret)
|
||||||
QString token = device->paramValue(awattarDeviceTokenParamTypeId).toString();
|
{
|
||||||
|
Q_UNUSED(username)
|
||||||
|
|
||||||
|
QByteArray data = QString(secret + ":").toUtf8().toBase64();
|
||||||
|
QString header = "Basic " + data;
|
||||||
|
QNetworkRequest request(QUrl("https://api.awattar.com/v1/marketdata"));
|
||||||
|
request.setRawHeader("Authorization", header.toLocal8Bit());
|
||||||
|
request.setSslConfiguration(QSslConfiguration::defaultConfiguration());
|
||||||
|
QNetworkReply *reply = hardwareManager()->networkManager()->get(request);
|
||||||
|
connect(reply, &QNetworkReply::finished, info, [this, reply, info, secret](){
|
||||||
|
reply->deleteLater();
|
||||||
|
|
||||||
|
int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
||||||
|
|
||||||
|
// check HTTP status code
|
||||||
|
if (status != 200) {
|
||||||
|
//: Error setting up device with invalid token
|
||||||
|
info->finish(Device::DeviceErrorAuthenticationFailure, QT_TR_NOOP("This token is not valid."));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
pluginStorage()->beginGroup(info->deviceId().toString());
|
||||||
|
pluginStorage()->setValue("token", secret);
|
||||||
|
pluginStorage()->endGroup();
|
||||||
|
info->finish(Device::DeviceErrorNoError);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void DevicePluginAwattar::setupDevice(DeviceSetupInfo *info)
|
||||||
|
{
|
||||||
|
qCDebug(dcAwattar) << "Setup device" << info->device()->name() << info->device()->params();
|
||||||
|
|
||||||
if (token.isEmpty() || userUuid.isEmpty()) {
|
|
||||||
qCWarning(dcAwattar) << "Missing token oder user uuid.";
|
|
||||||
return Device::DeviceSetupStatusFailure;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!m_pluginTimer) {
|
if (!m_pluginTimer) {
|
||||||
m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(60 * 60);
|
m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(60 * 60);
|
||||||
connect(m_pluginTimer, &PluginTimer::timeout, this, &DevicePluginAwattar::onPluginTimer);
|
connect(m_pluginTimer, &PluginTimer::timeout, this, &DevicePluginAwattar::onPluginTimer);
|
||||||
}
|
}
|
||||||
|
|
||||||
requestPriceData(device, true);
|
requestPriceData(info->device(), info);
|
||||||
|
|
||||||
return Device::DeviceSetupStatusAsync;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DevicePluginAwattar::deviceRemoved(Device *device)
|
void DevicePluginAwattar::deviceRemoved(Device *device)
|
||||||
|
|
@ -76,24 +101,27 @@ void DevicePluginAwattar::onPluginTimer()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DevicePluginAwattar::requestPriceData(Device* device, bool setupInProgress)
|
void DevicePluginAwattar::requestPriceData(Device* device, DeviceSetupInfo *setup)
|
||||||
{
|
{
|
||||||
QString token = device->paramValue(awattarDeviceTokenParamTypeId).toString();
|
pluginStorage()->beginGroup(device->id().toString());
|
||||||
|
QString token = pluginStorage()->value("token").toString();
|
||||||
|
pluginStorage()->endGroup();
|
||||||
|
|
||||||
QByteArray data = QString(token + ":").toUtf8().toBase64();
|
QByteArray data = QString(token + ":").toUtf8().toBase64();
|
||||||
QString header = "Basic " + data;
|
QString header = "Basic " + data;
|
||||||
QNetworkRequest request(QUrl("https://api.awattar.com/v1/marketdata"));
|
QNetworkRequest request(QUrl("https://api.awattar.com/v1/marketdata"));
|
||||||
request.setRawHeader("Authorization", header.toLocal8Bit());
|
request.setRawHeader("Authorization", header.toLocal8Bit());
|
||||||
request.setSslConfiguration(QSslConfiguration::defaultConfiguration());
|
request.setSslConfiguration(QSslConfiguration::defaultConfiguration());
|
||||||
QNetworkReply *reply = hardwareManager()->networkManager()->get(request);
|
QNetworkReply *reply = hardwareManager()->networkManager()->get(request);
|
||||||
connect(reply, &QNetworkReply::finished, device, [this, reply, device, setupInProgress](){
|
connect(reply, &QNetworkReply::finished, device, [this, reply, device, setup](){
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
|
|
||||||
// check HTTP status code
|
// check HTTP status code
|
||||||
int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
||||||
if (status != 200) {
|
if (status != 200) {
|
||||||
qCWarning(dcAwattar) << "Update reply HTTP error:" << status << reply->errorString();
|
qCWarning(dcAwattar) << "Update reply HTTP error:" << status << reply->errorString();
|
||||||
if (setupInProgress) {
|
if (setup) {
|
||||||
emit deviceSetupFinished(device, Device::DeviceSetupStatusFailure);
|
setup->finish(Device::DeviceErrorHardwareFailure, QT_TR_NOOP("Error getting data from server."));
|
||||||
} else {
|
} else {
|
||||||
device->setStateValue(awattarConnectedStateTypeId, false);
|
device->setStateValue(awattarConnectedStateTypeId, false);
|
||||||
}
|
}
|
||||||
|
|
@ -104,15 +132,18 @@ void DevicePluginAwattar::requestPriceData(Device* device, bool setupInProgress)
|
||||||
QJsonDocument jsonDoc = QJsonDocument::fromJson(reply->readAll(), &error);
|
QJsonDocument jsonDoc = QJsonDocument::fromJson(reply->readAll(), &error);
|
||||||
if (error.error != QJsonParseError::NoError) {
|
if (error.error != QJsonParseError::NoError) {
|
||||||
qCWarning(dcAwattar) << "Update reply JSON error:" << error.errorString();
|
qCWarning(dcAwattar) << "Update reply JSON error:" << error.errorString();
|
||||||
if (setupInProgress) {
|
if (setup) {
|
||||||
emit deviceSetupFinished(device, Device::DeviceSetupStatusFailure);
|
setup->finish(Device::DeviceErrorHardwareFailure, QT_TR_NOOP("The server returned unexpected data."));
|
||||||
} else {
|
} else {
|
||||||
device->setStateValue(awattarConnectedStateTypeId, false);
|
device->setStateValue(awattarConnectedStateTypeId, false);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
emit deviceSetupFinished(device, Device::DeviceSetupStatusSuccess);
|
if (setup) {
|
||||||
|
setup->finish(Device::DeviceErrorNoError);
|
||||||
|
}
|
||||||
|
|
||||||
device->setStateValue(awattarConnectedStateTypeId, true);
|
device->setStateValue(awattarConnectedStateTypeId, true);
|
||||||
|
|
||||||
processPriceData(device, jsonDoc.toVariant().toMap());
|
processPriceData(device, jsonDoc.toVariant().toMap());
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,9 @@ public:
|
||||||
explicit DevicePluginAwattar();
|
explicit DevicePluginAwattar();
|
||||||
~DevicePluginAwattar();
|
~DevicePluginAwattar();
|
||||||
|
|
||||||
Device::DeviceSetupStatus setupDevice(Device *device) override;
|
void startPairing(DevicePairingInfo *info) override;
|
||||||
|
void confirmPairing(DevicePairingInfo *info, const QString &username, const QString &secret) override;
|
||||||
|
void setupDevice(DeviceSetupInfo *info) override;
|
||||||
void deviceRemoved(Device *device) override;
|
void deviceRemoved(Device *device) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
@ -52,7 +54,7 @@ private:
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onPluginTimer();
|
void onPluginTimer();
|
||||||
void requestPriceData(Device* device, bool setupInProgress = false);
|
void requestPriceData(Device* device, DeviceSetupInfo *setup = nullptr);
|
||||||
void processPriceData(Device *device, const QVariantMap &data);
|
void processPriceData(Device *device, const QVariantMap &data);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,23 +23,8 @@
|
||||||
"displayName": "aWATTar",
|
"displayName": "aWATTar",
|
||||||
"name": "awattar",
|
"name": "awattar",
|
||||||
"createMethods": ["user"],
|
"createMethods": ["user"],
|
||||||
|
"setupMethod": "displaypin",
|
||||||
"interfaces": ["connectable"],
|
"interfaces": ["connectable"],
|
||||||
"paramTypes": [
|
|
||||||
{
|
|
||||||
"id": "cbbf6f0a-6a91-4844-83f5-60eadb46099b",
|
|
||||||
"name": "userUuid",
|
|
||||||
"displayName": "user uuid",
|
|
||||||
"type": "QString",
|
|
||||||
"inputType": "TextLine"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "7ab323d0-f3b5-4baa-9ff9-4843b4dd9811",
|
|
||||||
"name": "token",
|
|
||||||
"displayName": "token",
|
|
||||||
"type": "QString",
|
|
||||||
"inputType": "Password"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"stateTypes": [
|
"stateTypes": [
|
||||||
{
|
{
|
||||||
"id": "470b9b88-17f3-42e3-9250-cc181984eafe",
|
"id": "470b9b88-17f3-42e3-9250-cc181984eafe",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue