From ad3e12d308eb3536f03e882919d1ee11fd36a438 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Fri, 7 Sep 2018 13:09:11 +0200 Subject: [PATCH] properly clean up AWS devices when they disappear from the cloud --- libnymea-app-core/connection/awsclient.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/libnymea-app-core/connection/awsclient.cpp b/libnymea-app-core/connection/awsclient.cpp index 10e41f95..f6a22169 100644 --- a/libnymea-app-core/connection/awsclient.cpp +++ b/libnymea-app-core/connection/awsclient.cpp @@ -724,6 +724,8 @@ void AWSClient::getCredentialsForIdentity(const QString &identityId) fetchDevices(); } else if (qc.method == "postToMQTT") { postToMQTT(qc.boxId, qc.timestamp, qc.callback); + } else if (qc.method == "deleteAccount") { + deleteAccount(); } } }); @@ -836,6 +838,7 @@ void AWSClient::fetchDevices() qWarning() << "Failed to parse JSON from server" << error.errorString() << qUtf8Printable(data); return; } + QList actualDevices; foreach (const QVariant &entry, jsonDoc.toVariant().toMap().value("devices").toList()) { QString deviceId = entry.toMap().value("deviceId").toString(); QString name = entry.toMap().value("name").toString(); @@ -848,6 +851,18 @@ void AWSClient::fetchDevices() m_devices->insert(d); } d->setOnline(online); + actualDevices.append(d->id()); + } + + // Clean up the model + QStringList devicesToRemove; + for (int i = 0; i < m_devices->rowCount(); i++) { + if (!actualDevices.contains(m_devices->get(i)->id())) { + devicesToRemove.append(m_devices->get(i)->id()); + } + } + while (!devicesToRemove.isEmpty()) { + m_devices->remove(devicesToRemove.takeFirst()); } emit devicesFetched();