From ec08e6c7d5088ef0988e49e19051bf364b0c9fd1 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Wed, 6 Feb 2019 13:45:29 +0100 Subject: [PATCH] some cleanup --- libnymea-app-core/connection/awsclient.cpp | 8 ++++---- libnymea-app-core/connection/nymeaconnection.cpp | 2 +- libnymea-app-core/connection/nymeahosts.cpp | 10 +++++++--- libnymea-app-core/connection/nymeahosts.h | 6 ++++-- libnymea-app-core/jsonrpc/jsonrpcclient.cpp | 6 ++++++ nymea-app/ui/RootItem.qml | 11 +++++------ nymea-app/ui/connection/ConnectPage.qml | 10 ++++++---- nymea-app/ui/connection/ConnectingPage.qml | 4 ++-- nymea-app/ui/connection/ManualConnectPage.qml | 8 ++------ nymea-app/ui/mainviews/FavoritesView.qml | 4 ++-- 10 files changed, 39 insertions(+), 30 deletions(-) diff --git a/libnymea-app-core/connection/awsclient.cpp b/libnymea-app-core/connection/awsclient.cpp index b2a0cdd1..2d2ed5fd 100644 --- a/libnymea-app-core/connection/awsclient.cpp +++ b/libnymea-app-core/connection/awsclient.cpp @@ -226,10 +226,10 @@ void AWSClient::login(const QString &username, const QString &password, int atte m_idToken = authenticationResult.value("IdToken").toByteArray(); m_refreshToken = authenticationResult.value("RefreshToken").toByteArray(); - qDebug() << "AWS ID token" << m_idToken; +// qDebug() << "AWS ID token" << m_idToken; QList jwtParts = m_idToken.split('.'); if (jwtParts.count() != 3) { - qWarning() << "JWT token doesn't have 3 parts"; + qWarning() << "Error: JWT token doesn't have 3 parts. Cannot retrieve AWS Cognito ID."; return; } // qDebug() << "decoded header:" << QByteArray::fromBase64(jwtParts.at(0)); @@ -237,7 +237,7 @@ void AWSClient::login(const QString &username, const QString &password, int atte QJsonDocument tokenPayloadJsonDoc = QJsonDocument::fromJson(QByteArray::fromBase64(jwtParts.at(1))); m_userId = tokenPayloadJsonDoc.toVariant().toMap().value("cognito:username").toByteArray(); - qDebug() << "Getting cognito ID"; +// qDebug() << "Getting cognito ID"; getId(); }); } @@ -597,7 +597,7 @@ void AWSClient::getId() } m_identityId = jsonDoc.toVariant().toMap().value("IdentityId").toByteArray(); - qDebug() << "Received cognito identity id" << m_identityId;// << qUtf8Printable(data); +// qDebug() << "Received cognito identity id" << m_identityId;// << qUtf8Printable(data); getCredentialsForIdentity(m_identityId); }); diff --git a/libnymea-app-core/connection/nymeaconnection.cpp b/libnymea-app-core/connection/nymeaconnection.cpp index 2c3502d6..f5a8fe2d 100644 --- a/libnymea-app-core/connection/nymeaconnection.cpp +++ b/libnymea-app-core/connection/nymeaconnection.cpp @@ -393,7 +393,7 @@ bool NymeaConnection::storePem(const QUrl &host, const QByteArray &pem) bool NymeaConnection::loadPem(const QUrl &host, QByteArray &pem) { QDir dir(QStandardPaths::writableLocation(QStandardPaths::DataLocation) + "/sslcerts/"); - qDebug() << "Loading certificates from:" << dir.absoluteFilePath(host.host() + ".pem"); +// qDebug() << "Loading certificates from:" << dir.absoluteFilePath(host.host() + ".pem"); QFile certFile(dir.absoluteFilePath(host.host() + ".pem")); if (!certFile.open(QFile::ReadOnly)) { return false; diff --git a/libnymea-app-core/connection/nymeahosts.cpp b/libnymea-app-core/connection/nymeahosts.cpp index 05b4fc2b..fa6b8e8b 100644 --- a/libnymea-app-core/connection/nymeahosts.cpp +++ b/libnymea-app-core/connection/nymeahosts.cpp @@ -84,12 +84,11 @@ void NymeaHosts::removeHost(NymeaHost *host) emit countChanged(); } -NymeaHost *NymeaHosts::createHost(const QString &name, const QUrl &url) +NymeaHost *NymeaHosts::createHost(const QString &name, const QUrl &url, Connection::BearerType bearerType) { NymeaHost *host = new NymeaHost(this); - host->setUuid(QUuid::createUuid()); host->setName(name); - Connection *connection = new Connection(url, Connection::BearerTypeAll, false, url.toString(), host); + Connection *connection = new Connection(url, bearerType, false, url.toString(), host); host->connections()->addConnection(connection); addHost(host); return host; @@ -195,6 +194,11 @@ void NymeaHostsFilterModel::setShowUnreachableBearers(bool showUnreachableBearer } } +NymeaHost *NymeaHostsFilterModel::get(int index) const +{ + return m_nymeaDiscovery->nymeaHosts()->get(mapToSource(this->index(index, 0)).row()); +} + bool NymeaHostsFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { Q_UNUSED(sourceParent) diff --git a/libnymea-app-core/connection/nymeahosts.h b/libnymea-app-core/connection/nymeahosts.h index 01ae5fcb..f92848c3 100644 --- a/libnymea-app-core/connection/nymeahosts.h +++ b/libnymea-app-core/connection/nymeahosts.h @@ -25,8 +25,8 @@ #include #include #include +#include "nymeahost.h" -class NymeaHost; class NymeaDiscovery; class NymeaConnection; @@ -49,7 +49,7 @@ public: void addHost(NymeaHost *host); void removeHost(NymeaHost *host); - Q_INVOKABLE NymeaHost* createHost(const QString &name, const QUrl &url); + Q_INVOKABLE NymeaHost* createHost(const QString &name, const QUrl &url, Connection::BearerType bearerType); Q_INVOKABLE NymeaHost *get(int index) const; Q_INVOKABLE NymeaHost *find(const QUuid &uuid); @@ -89,6 +89,8 @@ public: bool showUnreachableBearers() const; void setShowUnreachableBearers(bool showUnreachableBearers); + Q_INVOKABLE NymeaHost* get(int index) const; + signals: void countChanged(); void discoveryChanged(); diff --git a/libnymea-app-core/jsonrpc/jsonrpcclient.cpp b/libnymea-app-core/jsonrpc/jsonrpcclient.cpp index e499b1c0..059c455b 100644 --- a/libnymea-app-core/jsonrpc/jsonrpcclient.cpp +++ b/libnymea-app-core/jsonrpc/jsonrpcclient.cpp @@ -363,6 +363,7 @@ void JsonRpcClient::dataReceived(const QByteArray &data) if (!protoVersionString.contains('.')) { protoVersionString.prepend("0."); } + m_jsonRpcVersion = QVersionNumber::fromString(protoVersionString); qDebug() << "Handshake reply:" << "Protocol version:" << protoVersionString << "InitRequired:" << m_initialSetupRequired << "AuthRequired:" << m_authenticationRequired << "PushButtonAvailable:" << m_pushButtonAuthAvailable;; @@ -377,6 +378,11 @@ void JsonRpcClient::dataReceived(const QByteArray &data) emit handshakeReceived(); + if (m_connection->currentHost()->uuid().isNull()) { + qDebug() << "Updating Server UUID in connection:" << m_connection->currentHost()->uuid().toString() << "->" << m_serverUuid; + m_connection->currentHost()->setUuid(m_serverUuid); + } + if (m_initialSetupRequired) { emit initialSetupRequiredChanged(); return; diff --git a/nymea-app/ui/RootItem.qml b/nymea-app/ui/RootItem.qml index 2adae4a4..37bd0539 100644 --- a/nymea-app/ui/RootItem.qml +++ b/nymea-app/ui/RootItem.qml @@ -102,14 +102,13 @@ Item { print("Last connected host was", tabSettings.lastConnectedHost) var cachedHost = discovery.nymeaHosts.find(tabSettings.lastConnectedHost); if (cachedHost) { - engine.connection.currentHost = cachedHost - } else { - print("Warning: There is a last connected host but UUID is unknown to discovery...") + engine.connection.connect(cachedHost) + return; } - } else { - PlatformHelper.hideSplashScreen(); - pageStack.push(Qt.resolvedUrl("connection/ConnectPage.qml"), StackView.Immediate) + print("Warning: There is a last connected host but UUID is unknown to discovery...") } + PlatformHelper.hideSplashScreen(); + pageStack.push(Qt.resolvedUrl("connection/ConnectPage.qml"), StackView.Immediate) } diff --git a/nymea-app/ui/connection/ConnectPage.qml b/nymea-app/ui/connection/ConnectPage.qml index b31c4816..b3b627c9 100644 --- a/nymea-app/ui/connection/ConnectPage.qml +++ b/nymea-app/ui/connection/ConnectPage.qml @@ -60,7 +60,7 @@ Page { } onClicked: { if (index === 2) { - var host = discovery.nymeaHosts.createHost("Demo server", "nymea://nymea.nymea.io:2222") + var host = discovery.nymeaHosts.createHost("Demo server", "nymea://nymea.nymea.io:2222", Connection.BearerTypeCloud) engine.connection.connect(host) } else { pageStack.push(model.get(index).page, {nymeaDiscovery: discovery}); @@ -128,7 +128,7 @@ Page { width: parent.width height: app.delegateHeight objectName: "discoveryDelegate" + index - property var nymeaHost: discovery.nymeaHosts.get(index) + property var nymeaHost: hostsProxy.get(index) property string defaultConnectionIndex: { var usedConfigIndex = 0; for (var i = 1; i < nymeaHost.connections.count; i++) { @@ -209,7 +209,9 @@ Page { onClicked: { if (model.deviceType === NymeaHost.DeviceTypeNetwork) { swipe.close() - var popup = infoDialog.createObject(app,{nymeaHost: discovery.nymeaHosts.get(index)}) + var nymeaHost = hostsProxy.get(index); + print("Getting info for", nymeaHost.name) + var popup = infoDialog.createObject(app,{nymeaHost: nymeaHost}) popup.open() } } @@ -267,7 +269,7 @@ Page { visible: discovery.nymeaHosts.count === 0 text: qsTr("Demo mode (online)") onClicked: { - var host = nymeaHosts.createHost("Demo server", "nymea://nymea.nymea.io:2222") + var host = nymeaHosts.createHost("Demo server", "nymea://nymea.nymea.io:2222", Connection.BearerTypeCloud) engine.connection.connect(host) } } diff --git a/nymea-app/ui/connection/ConnectingPage.qml b/nymea-app/ui/connection/ConnectingPage.qml index dff23c2f..7b3035ec 100644 --- a/nymea-app/ui/connection/ConnectingPage.qml +++ b/nymea-app/ui/connection/ConnectingPage.qml @@ -53,7 +53,7 @@ Page { errorMessage = qsTr("%1:core could not be found on this address. Please make sure you entered the address correctly and that the box is powered on.").arg(app.systemName); break; case NymeaConnection.ConnectionStatusConnectionRefused: - errorMessage = qsTr("The host has rejected our connection. This probably means that %1 stopped running. Did you unplug your %1 box?").arg(app.systemName); + errorMessage = qsTr("The host has rejected our connection. This probably means that %1 is not running on this host. Perhaps it's restarting?").arg(app.systemName); break; case NymeaConnection.ConnectionStatusRemoteHostClosed: errorMessage = qsTr("%1:core has closed the connection. This probably means it has been turned off or restarted.").arg(app.systemName); @@ -70,7 +70,7 @@ Page { break; case NymeaConnection.ConnectionStatusUnknownError: default: - errorMessage = qsTr("An unknown error happened. We're very sorry for that. (Error code: %1)").arg(engine.connection.connectionStatus); + errorMessage = qsTr("An unknown error happened. We're very sorry for that.").arg(engine.connection.connectionStatus); } return errorMessage; } diff --git a/nymea-app/ui/connection/ManualConnectPage.qml b/nymea-app/ui/connection/ManualConnectPage.qml index 1ac9f794..adea028e 100644 --- a/nymea-app/ui/connection/ManualConnectPage.qml +++ b/nymea-app/ui/connection/ManualConnectPage.qml @@ -96,12 +96,8 @@ Page { } print("Try to connect ", rpcUrl) - engine.connection.connect(rpcUrl) - var page = pageStack.push(Qt.resolvedUrl("ConnectingPage.qml")) - page.cancel.connect(function() { - engine.connection.disconnect() - pageStack.pop(root) - }) + var host = discovery.nymeaHosts.createHost("Manual connection", rpcUrl, Connection.BearerTypeCloud); + engine.connection.connect(host) } } } diff --git a/nymea-app/ui/mainviews/FavoritesView.qml b/nymea-app/ui/mainviews/FavoritesView.qml index 4ae51480..eb51c485 100644 --- a/nymea-app/ui/mainviews/FavoritesView.qml +++ b/nymea-app/ui/mainviews/FavoritesView.qml @@ -185,7 +185,7 @@ Item { readonly property var powerState: device.states.getState(powerStateType.id) readonly property var brightnessStateType: deviceClass.stateTypes.findByName("brightness"); - readonly property var brightnessState: device.states.getState(brightnessStateType.id) + readonly property var brightnessState: brightnessStateType ? device.states.getState(brightnessStateType.id) : null ThrottledSlider { Layout.fillWidth: true @@ -195,7 +195,7 @@ Item { enabled: opacity > 0 from: 0 to: 100 - value: brightnessState.value + value: brightnessState ? brightnessState.value : 0 onMoved: { var deviceClass = engine.deviceManager.deviceClasses.getDeviceClass(device.deviceClassId); var actionType = deviceClass.actionTypes.findByName("brightness");