Make the cloud discovery a bit easier to work with

This commit is contained in:
Michael Zanetti 2021-03-31 17:47:04 +02:00
parent 608c02799c
commit 91ef2dc656
2 changed files with 24 additions and 13 deletions

View File

@ -930,16 +930,16 @@ bool AWSClient::postToMQTT(const QString &coreId, const QString &nonce, QObject*
// Workaround MQTT broker url weirdness as described above
request.setUrl("https://" + m_configs.value(m_usedConfig).mqttEndpoint + path1);
qCDebug(dcCloud()) << "Posting to MQTT:" << request.url().toString();
// qDebug() << "HEADERS:";
qCInfo(dcCloud) << "Posting to MQTT:" << request.url().toString();
// qCDebug(dcCloud) << "HEADERS:";
// foreach (const QByteArray &headerName, request.rawHeaderList()) {
// qDebug() << headerName << ":" << request.rawHeader(headerName);
// qCDebug(dcCloud) << headerName << ":" << request.rawHeader(headerName);
// }
// qDebug() << "Payload:" << payload;
qCDebug(dcCloud) << "Payload:" << payload;
QNetworkReply *reply = m_nam->post(request, payload);
QTimer::singleShot(5000, reply, [reply, senderWatcher, callback](){
reply->deleteLater();
qWarning() << "Timeout posting to MQTT";
qCWarning(dcCloud) << "Timeout posting to MQTT";
if (senderWatcher) {
callback(false);
}
@ -953,14 +953,14 @@ bool AWSClient::postToMQTT(const QString &coreId, const QString &nonce, QObject*
return;
}
if (reply->error() != QNetworkReply::NoError) {
qCWarning(dcCloud()) << "MQTT Network reply error" << reply->error() << reply->errorString();
qCWarning(dcCloud()) << "MQTT Network reply error" << reply->error() << reply->errorString() << qUtf8Printable(data);
callback(false);
return;
}
QJsonParseError error;
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
if (error.error != QJsonParseError::NoError) {
qCWarning(dcCloud()) << "Failed to parse MQTT reply" << error.error << error.errorString() << data;
qCWarning(dcCloud()) << "Failed to parse MQTT reply" << error.error << error.errorString() << qUtf8Printable(data);
callback(false);
return;
}
@ -1005,6 +1005,11 @@ void AWSClient::fetchDevices()
QByteArray data = reply->readAll();
if (reply->error() != QNetworkReply::NoError) {
qCWarning(dcCloud()) << "Error fetching cloud devices:" << reply->error() << reply->errorString() << qUtf8Printable(data);
if (reply->error() == QNetworkReply::AuthenticationRequiredError) {
qCInfo(dcCloud()) << "Trying to refresh access token";
refreshAccessToken();
QueuedCall::enqueue(m_callQueue, QueuedCall("fetchDevices"));
}
return;
}
QJsonParseError error;

View File

@ -42,6 +42,9 @@
#include <QNetworkConfigurationManager>
#include <QNetworkSession>
#include "logging.h"
NYMEA_LOGGING_CATEGORY(dcDiscovery, "Discovery")
NymeaDiscovery::NymeaDiscovery(QObject *parent) : QObject(parent)
{
m_nymeaHosts = new NymeaHosts(this);
@ -231,11 +234,10 @@ void NymeaDiscovery::syncCloudDevices()
for (int i = 0; i < m_awsClient->awsDevices()->rowCount(); i++) {
AWSDevice *d = m_awsClient->awsDevices()->get(i);
NymeaHost *host = m_nymeaHosts->find(d->id());
if (!host) {
bool alreayAdded = host != nullptr;
if (!alreayAdded) {
host = new NymeaHost();
host->setUuid(d->id());
qDebug() << "CloudDiscovery: Adding new host:" << host->name() << host->uuid().toString();
m_nymeaHosts->addHost(host);
}
host->setName(d->name());
QUrl url;
@ -244,10 +246,14 @@ void NymeaDiscovery::syncCloudDevices()
Connection *conn = host->connections()->find(url);
if (!conn) {
conn = new Connection(url, Connection::BearerTypeCloud, true, d->id());
qDebug() << "CloudDiscovery: Adding new connection to host:" << host->name() << conn->url().toString();
qCDebug(dcDiscovery) << "Adding new connection to host:" << host->name() << conn->url().toString();
host->connections()->addConnection(conn);
}
conn->setOnline(d->online());
if (!alreayAdded) {
qCDebug(dcDiscovery) << "Adding new host:" << d->name() << d->id();
m_nymeaHosts->addHost(host);
}
}
QList<NymeaHost*> hostsToRemove;
@ -283,7 +289,7 @@ void NymeaDiscovery::loadFromDisk()
host->setUuid(QUuid(serverUuid));
m_nymeaHosts->addHost(host);
}
qDebug() << "Loaded Host from cache" << host->name() << host->uuid();
qCDebug(dcDiscovery()) << "Loaded Host from cache" << host->name() << host->uuid();
foreach (const QString &group, settings.childGroups()) {
settings.beginGroup(group);
QString url = settings.value("url").toString();
@ -294,7 +300,7 @@ void NymeaDiscovery::loadFromDisk()
QString displayName = settings.value("displayName").toString();
connection = new Connection(url, bearerType, secure, displayName, host);
host->connections()->addConnection(connection);
qDebug() << "|- Connection:" << group << connection->url() << connection->bearerType() << "secure:" << connection->secure();
qCDebug(dcDiscovery()) << "|- Connection:" << group << connection->url() << connection->bearerType() << "secure:" << connection->secure();
}
settings.endGroup();
}