From f82fc9056d135c3c284cacf093a8c171df344973 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Wed, 24 Feb 2021 13:23:05 +0100 Subject: [PATCH] Update min/max required nymea core version --- libnymea-app/jsonrpc/jsonrpcclient.cpp | 12 +++++++++--- libnymea-app/jsonrpc/jsonrpcclient.h | 3 ++- nymea-app/ui/RootItem.qml | 20 +++++++++++++++----- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/libnymea-app/jsonrpc/jsonrpcclient.cpp b/libnymea-app/jsonrpc/jsonrpcclient.cpp index 6e654785..537c86c6 100644 --- a/libnymea-app/jsonrpc/jsonrpcclient.cpp +++ b/libnymea-app/jsonrpc/jsonrpcclient.cpp @@ -644,13 +644,19 @@ void JsonRpcClient::helloReply(int /*commandId*/, const QVariantMap ¶ms) qDebug() << "Handshake reply:" << "Protocol version:" << protoVersionString << "InitRequired:" << m_initialSetupRequired << "AuthRequired:" << m_authenticationRequired << "PushButtonAvailable:" << m_pushButtonAuthAvailable;; - QVersionNumber minimumRequiredVersion = QVersionNumber(1, 10); + QVersionNumber minimumRequiredVersion = QVersionNumber(5, 0); + QVersionNumber maximumMajorVersion = QVersionNumber(5); if (m_jsonRpcVersion < minimumRequiredVersion) { qWarning() << "Nymea core doesn't support minimum required version. Required:" << minimumRequiredVersion << "Found:" << m_jsonRpcVersion; - m_connection->disconnect(); - emit invalidProtocolVersion(m_jsonRpcVersion.toString(), minimumRequiredVersion.toString()); + emit invalidMinimumVersion(m_jsonRpcVersion.toString(), minimumRequiredVersion.toString()); return; } + if (m_jsonRpcVersion.majorVersion() > maximumMajorVersion.majorVersion()) { + qWarning() << "Nymea core has breaking API changes not supported by this app version. Core major version:" << m_jsonRpcVersion.majorVersion() << "Maximum supported major version:" << maximumMajorVersion.majorVersion(); + emit invalidMaximumVersion(m_jsonRpcVersion.toString(), QString("%1.x").arg(maximumMajorVersion.majorVersion())); + return; + } + // Verify SSL certificate if (m_connection->isEncrypted()) { diff --git a/libnymea-app/jsonrpc/jsonrpcclient.h b/libnymea-app/jsonrpc/jsonrpcclient.h index 60726577..59a7c0e0 100644 --- a/libnymea-app/jsonrpc/jsonrpcclient.h +++ b/libnymea-app/jsonrpc/jsonrpcclient.h @@ -129,7 +129,8 @@ signals: void pushButtonAuthAvailableChanged(); void authenticatedChanged(); void tokenChanged(); - void invalidProtocolVersion(const QString &actualVersion, const QString &minimumVersion); + void invalidMinimumVersion(const QString &actualVersion, const QString &minVersion); + void invalidMaximumVersion(const QString &actualVersion, const QString &maxVersion); void authenticationFailed(); void pushButtonAuthFailed(); void createUserSucceeded(); diff --git a/nymea-app/ui/RootItem.qml b/nymea-app/ui/RootItem.qml index f57d2a2d..1c6c2522 100644 --- a/nymea-app/ui/RootItem.qml +++ b/nymea-app/ui/RootItem.qml @@ -366,10 +366,17 @@ Item { init(); } - onInvalidProtocolVersion: { + onInvalidMinimumVersion: { var popup = invalidVersionComponent.createObject(app.contentItem); popup.actualVersion = actualVersion; - popup.minimumVersion = minimumVersion + popup.minVersion = minVersion; + popup.open() + tabSettings.lastConnectedHost = "" + } + onInvalidMaximumVersion: { + var popup = invalidVersionComponent.createObject(app.contentItem); + popup.actualVersion = actualVersion; + popup.maxVersion = maxVersion; popup.open() tabSettings.lastConnectedHost = "" } @@ -421,8 +428,9 @@ Item { Popup { id: popup - property string actualVersion: "0.0" - property string minimumVersion: "1.10" + property string actualVersion: "" + property string minVersion: "" + property string maxVersion: "" width: app.width * .8 height: col.childrenRect.height + app.margins * 2 @@ -439,7 +447,9 @@ Item { font.pixelSize: app.largeFont } Label { - text: qsTr("Sorry, the version of the %1:core you are trying to connect to is too old. This app requires at least version %2 but this %1:core only supports %3").arg(app.systemName).arg(popup.minimumVersion).arg(popup.actualVersion) + text: popup.minVersion != "" + ? qsTr("The version of the %1:core you are trying to connect to is too old. This app requires at least version %2 but this %1:core only supports %3. Please update your %1:core system.").arg(app.systemName).arg(popup.minVersion).arg(popup.actualVersion) + : qsTr("The version of the %1:core you are trying to connect to is too new. This app supports only up to version %2 but this %1:core provides %3. Please update %1:app.").arg(app.systemName).arg(popup.maxVersion).arg(popup.actualVersion) wrapMode: Text.WordWrap Layout.fillWidth: true }