From b18dcc5b00ad17df150462cd047f35cfaa12f7f6 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Wed, 29 Jan 2020 23:50:16 +0100 Subject: [PATCH] Add setupDisplayMessage --- libnymea-app-core/devices.cpp | 5 ++++- libnymea-app-core/devices.h | 1 + libnymea-app-core/jsonrpc/jsontypes.cpp | 5 +++-- libnymea-common/types/device.cpp | 10 ++++++++-- libnymea-common/types/device.h | 5 ++++- nymea-app/ui/devicepages/DevicePageBase.qml | 2 +- 6 files changed, 21 insertions(+), 7 deletions(-) diff --git a/libnymea-app-core/devices.cpp b/libnymea-app-core/devices.cpp index bf3a9b3e..b474f1eb 100644 --- a/libnymea-app-core/devices.cpp +++ b/libnymea-app-core/devices.cpp @@ -84,6 +84,8 @@ QVariant Devices::data(const QModelIndex &index, int role) const return device->parentDeviceId().toString(); case RoleSetupStatus: return device->setupStatus(); + case RoleSetupDisplayMessage: + return device->setupDisplayMessage(); case RoleInterfaces: return device->deviceClass()->interfaces(); case RoleBaseInterface: @@ -107,7 +109,7 @@ void Devices::addDevice(Device *device) connect(device, &Device::setupStatusChanged, this, [device, this]() { int idx = m_devices.indexOf(device); if (idx < 0) return; - emit dataChanged(index(idx), index(idx), {RoleSetupStatus}); + emit dataChanged(index(idx), index(idx), {RoleSetupStatus, RoleSetupDisplayMessage}); }); connect(device->states(), &States::dataChanged, this, [device, this]() { int idx = m_devices.indexOf(device); @@ -145,6 +147,7 @@ QHash Devices::roleNames() const roles[RoleDeviceClass] = "deviceClassId"; roles[RoleParentDeviceId] = "parentDeviceId"; roles[RoleSetupStatus] = "setupStatus"; + roles[RoleSetupDisplayMessage] = "setupDisplayMessage"; roles[RoleInterfaces] = "interfaces"; roles[RoleBaseInterface] = "baseInterface"; return roles; diff --git a/libnymea-app-core/devices.h b/libnymea-app-core/devices.h index 97893f78..eb003234 100644 --- a/libnymea-app-core/devices.h +++ b/libnymea-app-core/devices.h @@ -47,6 +47,7 @@ public: RoleParentDeviceId, RoleDeviceClass, RoleSetupStatus, + RoleSetupDisplayMessage, RoleInterfaces, RoleBaseInterface }; diff --git a/libnymea-app-core/jsonrpc/jsontypes.cpp b/libnymea-app-core/jsonrpc/jsontypes.cpp index 7978498d..d27b9386 100644 --- a/libnymea-app-core/jsonrpc/jsontypes.cpp +++ b/libnymea-app-core/jsonrpc/jsontypes.cpp @@ -243,9 +243,10 @@ Device* JsonTypes::unpackDevice(const QVariantMap &deviceMap, DeviceClasses *dev // As of JSONRPC 4.2 setupComplete is deprecated and setupStatus is new if (deviceMap.contains("setupStatus")) { QMetaEnum setupStatusEnum = QMetaEnum::fromType(); - device->setSetupStatus(static_cast(setupStatusEnum.keyToValue(deviceMap.value("setupStatus").toByteArray().data()))); + device->setSetupStatus(static_cast(setupStatusEnum.keyToValue(deviceMap.value("setupStatus").toByteArray().data())), + deviceMap.value("setupDisplayMessage").toString()); } else { - device->setSetupStatus(deviceMap.value("setupComplete").toBool() ? Device::DeviceSetupStatusComplete : Device::DeviceSetupStatusNone); + device->setSetupStatus(deviceMap.value("setupComplete").toBool() ? Device::DeviceSetupStatusComplete : Device::DeviceSetupStatusNone, QString()); } Params *params = device->params(); diff --git a/libnymea-common/types/device.cpp b/libnymea-common/types/device.cpp index 5ff7cd3b..c8cd9a4d 100644 --- a/libnymea-common/types/device.cpp +++ b/libnymea-common/types/device.cpp @@ -81,10 +81,16 @@ Device::DeviceSetupStatus Device::setupStatus() const return m_setupStatus; } -void Device::setSetupStatus(Device::DeviceSetupStatus setupStatus) +QString Device::setupDisplayMessage() const { - if (m_setupStatus != setupStatus) { + return m_setupDisplayMessage; +} + +void Device::setSetupStatus(Device::DeviceSetupStatus setupStatus, const QString &displayMessage) +{ + if (m_setupStatus != setupStatus || m_setupDisplayMessage != displayMessage) { m_setupStatus = setupStatus; + m_setupDisplayMessage = displayMessage; emit setupStatusChanged(); } } diff --git a/libnymea-common/types/device.h b/libnymea-common/types/device.h index a69f2969..51cfa23e 100644 --- a/libnymea-common/types/device.h +++ b/libnymea-common/types/device.h @@ -49,6 +49,7 @@ class Device : public QObject Q_PROPERTY(bool isChild READ isChild CONSTANT) Q_PROPERTY(QString name READ name NOTIFY nameChanged) Q_PROPERTY(DeviceSetupStatus setupStatus READ setupStatus NOTIFY setupStatusChanged) + Q_PROPERTY(QString setupDisplayMessage READ setupDisplayMessage NOTIFY setupStatusChanged) Q_PROPERTY(Params *params READ params NOTIFY paramsChanged) Q_PROPERTY(Params *settings READ settings NOTIFY settingsChanged) Q_PROPERTY(States *states READ states NOTIFY statesChanged) @@ -76,7 +77,8 @@ public: bool isChild() const; DeviceSetupStatus setupStatus() const; - void setSetupStatus(DeviceSetupStatus setupStatus); + QString setupDisplayMessage() const; + void setSetupStatus(DeviceSetupStatus setupStatus, const QString &displayMessage); Params *params() const; void setParams(Params *params); @@ -109,6 +111,7 @@ private: QUuid m_id; QUuid m_parentDeviceId; DeviceSetupStatus m_setupStatus; + QString m_setupDisplayMessage; Params *m_params = nullptr; Params *m_settings = nullptr; States *m_states = nullptr; diff --git a/nymea-app/ui/devicepages/DevicePageBase.qml b/nymea-app/ui/devicepages/DevicePageBase.qml index cdeebeb6..e6c60d44 100644 --- a/nymea-app/ui/devicepages/DevicePageBase.qml +++ b/nymea-app/ui/devicepages/DevicePageBase.qml @@ -240,7 +240,7 @@ Page { text: infoPane.setupInProgress ? qsTr("Thing is being set up...") : infoPane.setupFailure ? - qsTr("Thing setup failed!") + (root.device.setupDisplayMessage.length > 0 ? root.device.setupDisplayMessage : qsTr("Thing setup failed!")) : (infoPane.connectedState !== null && infoPane.connectedState.value === false) ? qsTr("Thing is not connected!") : qsTr("Thing runs out of battery!")