Merge PR #579: Make the cloud discovery a bit easier to work with
This commit is contained in:
commit
eeb78a495c
@ -930,16 +930,16 @@ bool AWSClient::postToMQTT(const QString &coreId, const QString &nonce, QObject*
|
|||||||
// Workaround MQTT broker url weirdness as described above
|
// Workaround MQTT broker url weirdness as described above
|
||||||
request.setUrl("https://" + m_configs.value(m_usedConfig).mqttEndpoint + path1);
|
request.setUrl("https://" + m_configs.value(m_usedConfig).mqttEndpoint + path1);
|
||||||
|
|
||||||
qCDebug(dcCloud()) << "Posting to MQTT:" << request.url().toString();
|
qCInfo(dcCloud) << "Posting to MQTT:" << request.url().toString();
|
||||||
// qDebug() << "HEADERS:";
|
// qCDebug(dcCloud) << "HEADERS:";
|
||||||
// foreach (const QByteArray &headerName, request.rawHeaderList()) {
|
// 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);
|
QNetworkReply *reply = m_nam->post(request, payload);
|
||||||
QTimer::singleShot(5000, reply, [reply, senderWatcher, callback](){
|
QTimer::singleShot(5000, reply, [reply, senderWatcher, callback](){
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
qWarning() << "Timeout posting to MQTT";
|
qCWarning(dcCloud) << "Timeout posting to MQTT";
|
||||||
if (senderWatcher) {
|
if (senderWatcher) {
|
||||||
callback(false);
|
callback(false);
|
||||||
}
|
}
|
||||||
@ -953,14 +953,14 @@ bool AWSClient::postToMQTT(const QString &coreId, const QString &nonce, QObject*
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (reply->error() != QNetworkReply::NoError) {
|
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);
|
callback(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
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) {
|
||||||
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);
|
callback(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1005,6 +1005,11 @@ void AWSClient::fetchDevices()
|
|||||||
QByteArray data = reply->readAll();
|
QByteArray data = reply->readAll();
|
||||||
if (reply->error() != QNetworkReply::NoError) {
|
if (reply->error() != QNetworkReply::NoError) {
|
||||||
qCWarning(dcCloud()) << "Error fetching cloud devices:" << reply->error() << reply->errorString() << qUtf8Printable(data);
|
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;
|
return;
|
||||||
}
|
}
|
||||||
QJsonParseError error;
|
QJsonParseError error;
|
||||||
|
|||||||
@ -42,6 +42,9 @@
|
|||||||
#include <QNetworkConfigurationManager>
|
#include <QNetworkConfigurationManager>
|
||||||
#include <QNetworkSession>
|
#include <QNetworkSession>
|
||||||
|
|
||||||
|
#include "logging.h"
|
||||||
|
NYMEA_LOGGING_CATEGORY(dcDiscovery, "Discovery")
|
||||||
|
|
||||||
NymeaDiscovery::NymeaDiscovery(QObject *parent) : QObject(parent)
|
NymeaDiscovery::NymeaDiscovery(QObject *parent) : QObject(parent)
|
||||||
{
|
{
|
||||||
m_nymeaHosts = new NymeaHosts(this);
|
m_nymeaHosts = new NymeaHosts(this);
|
||||||
@ -231,11 +234,10 @@ void NymeaDiscovery::syncCloudDevices()
|
|||||||
for (int i = 0; i < m_awsClient->awsDevices()->rowCount(); i++) {
|
for (int i = 0; i < m_awsClient->awsDevices()->rowCount(); i++) {
|
||||||
AWSDevice *d = m_awsClient->awsDevices()->get(i);
|
AWSDevice *d = m_awsClient->awsDevices()->get(i);
|
||||||
NymeaHost *host = m_nymeaHosts->find(d->id());
|
NymeaHost *host = m_nymeaHosts->find(d->id());
|
||||||
if (!host) {
|
bool alreayAdded = host != nullptr;
|
||||||
|
if (!alreayAdded) {
|
||||||
host = new NymeaHost();
|
host = new NymeaHost();
|
||||||
host->setUuid(d->id());
|
host->setUuid(d->id());
|
||||||
qDebug() << "CloudDiscovery: Adding new host:" << host->name() << host->uuid().toString();
|
|
||||||
m_nymeaHosts->addHost(host);
|
|
||||||
}
|
}
|
||||||
host->setName(d->name());
|
host->setName(d->name());
|
||||||
QUrl url;
|
QUrl url;
|
||||||
@ -244,10 +246,14 @@ void NymeaDiscovery::syncCloudDevices()
|
|||||||
Connection *conn = host->connections()->find(url);
|
Connection *conn = host->connections()->find(url);
|
||||||
if (!conn) {
|
if (!conn) {
|
||||||
conn = new Connection(url, Connection::BearerTypeCloud, true, d->id());
|
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);
|
host->connections()->addConnection(conn);
|
||||||
}
|
}
|
||||||
conn->setOnline(d->online());
|
conn->setOnline(d->online());
|
||||||
|
if (!alreayAdded) {
|
||||||
|
qCDebug(dcDiscovery) << "Adding new host:" << d->name() << d->id();
|
||||||
|
m_nymeaHosts->addHost(host);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<NymeaHost*> hostsToRemove;
|
QList<NymeaHost*> hostsToRemove;
|
||||||
@ -283,7 +289,7 @@ void NymeaDiscovery::loadFromDisk()
|
|||||||
host->setUuid(QUuid(serverUuid));
|
host->setUuid(QUuid(serverUuid));
|
||||||
m_nymeaHosts->addHost(host);
|
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()) {
|
foreach (const QString &group, settings.childGroups()) {
|
||||||
settings.beginGroup(group);
|
settings.beginGroup(group);
|
||||||
QString url = settings.value("url").toString();
|
QString url = settings.value("url").toString();
|
||||||
@ -294,7 +300,7 @@ void NymeaDiscovery::loadFromDisk()
|
|||||||
QString displayName = settings.value("displayName").toString();
|
QString displayName = settings.value("displayName").toString();
|
||||||
connection = new Connection(url, bearerType, secure, displayName, host);
|
connection = new Connection(url, bearerType, secure, displayName, host);
|
||||||
host->connections()->addConnection(connection);
|
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();
|
settings.endGroup();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user