Implement account interface
This commit is contained in:
parent
a8e0ace17f
commit
3c0a4986f0
@ -67,6 +67,11 @@ void DevicePluginTuya::setupDevice(DeviceSetupInfo *info)
|
|||||||
if (tokenRefreshTimer->isActive()) {
|
if (tokenRefreshTimer->isActive()) {
|
||||||
qCDebug(dcTuya()) << "Device already set up during pairing.";
|
qCDebug(dcTuya()) << "Device already set up during pairing.";
|
||||||
device->setStateValue(tuyaCloudConnectedStateTypeId, true);
|
device->setStateValue(tuyaCloudConnectedStateTypeId, true);
|
||||||
|
device->setStateValue(tuyaCloudLoggedInStateTypeId, true);
|
||||||
|
pluginStorage()->beginGroup(device->id().toString());
|
||||||
|
QString username = pluginStorage()->value("username").toString();
|
||||||
|
pluginStorage()->endGroup();
|
||||||
|
device->setStateValue(tuyaCloudUserDisplayNameStateTypeId, username);
|
||||||
return info->finish(Device::DeviceErrorNoError);
|
return info->finish(Device::DeviceErrorNoError);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -142,7 +147,7 @@ void DevicePluginTuya::confirmPairing(DevicePairingInfo *info, const QString &us
|
|||||||
connect(reply, &QNetworkReply::finished, &QNetworkReply::deleteLater);
|
connect(reply, &QNetworkReply::finished, &QNetworkReply::deleteLater);
|
||||||
|
|
||||||
qCDebug(dcTuya()) << "Pairing Tuya device";
|
qCDebug(dcTuya()) << "Pairing Tuya device";
|
||||||
connect(reply, &QNetworkReply::finished, info, [this, reply, info](){
|
connect(reply, &QNetworkReply::finished, info, [this, reply, info, username](){
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
QByteArray data = reply->readAll();
|
QByteArray data = reply->readAll();
|
||||||
|
|
||||||
@ -174,6 +179,7 @@ void DevicePluginTuya::confirmPairing(DevicePairingInfo *info, const QString &us
|
|||||||
pluginStorage()->beginGroup(info->deviceId().toString());
|
pluginStorage()->beginGroup(info->deviceId().toString());
|
||||||
pluginStorage()->setValue("accessToken", result.value("access_token").toString());
|
pluginStorage()->setValue("accessToken", result.value("access_token").toString());
|
||||||
pluginStorage()->setValue("refreshToken", result.value("refresh_token").toString());
|
pluginStorage()->setValue("refreshToken", result.value("refresh_token").toString());
|
||||||
|
pluginStorage()->setValue("username", username);
|
||||||
pluginStorage()->endGroup();
|
pluginStorage()->endGroup();
|
||||||
|
|
||||||
int timeout = result.value("expires_in").toInt();
|
int timeout = result.value("expires_in").toInt();
|
||||||
@ -239,6 +245,7 @@ void DevicePluginTuya::refreshAccessToken(Device *device)
|
|||||||
if (reply->error() != QNetworkReply::NoError) {
|
if (reply->error() != QNetworkReply::NoError) {
|
||||||
qCWarning(dcTuya()) << "Error refreshing access token";
|
qCWarning(dcTuya()) << "Error refreshing access token";
|
||||||
device->setStateValue(tuyaCloudConnectedStateTypeId, false);
|
device->setStateValue(tuyaCloudConnectedStateTypeId, false);
|
||||||
|
device->setStateValue(tuyaCloudLoggedInStateTypeId, false);
|
||||||
emit tokenRefreshed(device, false);
|
emit tokenRefreshed(device, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -249,6 +256,7 @@ void DevicePluginTuya::refreshAccessToken(Device *device)
|
|||||||
if (error.error != QJsonParseError::NoError) {
|
if (error.error != QJsonParseError::NoError) {
|
||||||
qCWarning(dcTuya()) << "Failed to parse json reply when refreshing access token" << error.errorString();
|
qCWarning(dcTuya()) << "Failed to parse json reply when refreshing access token" << error.errorString();
|
||||||
device->setStateValue(tuyaCloudConnectedStateTypeId, false);
|
device->setStateValue(tuyaCloudConnectedStateTypeId, false);
|
||||||
|
device->setStateValue(tuyaCloudLoggedInStateTypeId, false);
|
||||||
emit tokenRefreshed(device, false);
|
emit tokenRefreshed(device, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -256,6 +264,7 @@ void DevicePluginTuya::refreshAccessToken(Device *device)
|
|||||||
if (jsonDoc.toVariant().toMap().isEmpty()) {
|
if (jsonDoc.toVariant().toMap().isEmpty()) {
|
||||||
qCWarning(dcTuya()) << "Empty response from Tuya server";
|
qCWarning(dcTuya()) << "Empty response from Tuya server";
|
||||||
device->setStateValue(tuyaCloudConnectedStateTypeId, false);
|
device->setStateValue(tuyaCloudConnectedStateTypeId, false);
|
||||||
|
device->setStateValue(tuyaCloudLoggedInStateTypeId, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -271,6 +280,12 @@ void DevicePluginTuya::refreshAccessToken(Device *device)
|
|||||||
QTimer *t = m_tokenExpiryTimers.value(device->id());
|
QTimer *t = m_tokenExpiryTimers.value(device->id());
|
||||||
t->start(tokenExpiry);
|
t->start(tokenExpiry);
|
||||||
device->setStateValue(tuyaCloudConnectedStateTypeId, true);
|
device->setStateValue(tuyaCloudConnectedStateTypeId, true);
|
||||||
|
device->setStateValue(tuyaCloudLoggedInStateTypeId, true);
|
||||||
|
|
||||||
|
pluginStorage()->beginGroup(device->id().toString());
|
||||||
|
QString username = pluginStorage()->value("username").toString();
|
||||||
|
pluginStorage()->endGroup();
|
||||||
|
device->setStateValue(tuyaCloudUserDisplayNameStateTypeId, username);
|
||||||
|
|
||||||
emit tokenRefreshed(device, true);
|
emit tokenRefreshed(device, true);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -14,7 +14,7 @@
|
|||||||
"displayName": "Tuya cloud login",
|
"displayName": "Tuya cloud login",
|
||||||
"createMethods": ["user"],
|
"createMethods": ["user"],
|
||||||
"setupMethod": "userandpassword",
|
"setupMethod": "userandpassword",
|
||||||
"interfaces": [ ],
|
"interfaces": [ "account" ],
|
||||||
"stateTypes": [
|
"stateTypes": [
|
||||||
{
|
{
|
||||||
"id": "c844a23a-301b-4e6c-ba18-2926a38e6bf5",
|
"id": "c844a23a-301b-4e6c-ba18-2926a38e6bf5",
|
||||||
@ -24,6 +24,22 @@
|
|||||||
"type": "bool",
|
"type": "bool",
|
||||||
"defaultValue": false,
|
"defaultValue": false,
|
||||||
"cached": false
|
"cached": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "33e9d30c-c988-4cd4-8d39-ce84bcfa79c5",
|
||||||
|
"name": "loggedIn",
|
||||||
|
"displayName": "Logged in",
|
||||||
|
"displayNameEvent": "Logged in changed",
|
||||||
|
"type": "bool",
|
||||||
|
"defaultValue": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "15bc38a7-0962-4f3b-a0b1-4f164958493b",
|
||||||
|
"name": "userDisplayName",
|
||||||
|
"displayName": "Username",
|
||||||
|
"displayNameEvent": "User changed",
|
||||||
|
"type": "QString",
|
||||||
|
"defaultValue": ""
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user