From 8ebeff8a94fd0efdfd35c91c3854e1adc3fb60b0 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Sun, 20 Feb 2022 23:35:07 +0100 Subject: [PATCH] Add a loading spinner while loading zigbee networks --- libnymea-app/zigbee/zigbeemanager.cpp | 13 ++++++++++++- libnymea-app/zigbee/zigbeemanager.h | 5 +++++ nymea-app/ui/system/ZigbeeSettingsPage.qml | 10 +++++++++- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/libnymea-app/zigbee/zigbeemanager.cpp b/libnymea-app/zigbee/zigbeemanager.cpp index 4429ccb1..d08ddc23 100644 --- a/libnymea-app/zigbee/zigbeemanager.cpp +++ b/libnymea-app/zigbee/zigbeemanager.cpp @@ -78,6 +78,11 @@ Engine *ZigbeeManager::engine() const return m_engine; } +bool ZigbeeManager::fetchingData() const +{ + return m_fetchingData; +} + QStringList ZigbeeManager::availableBackends() const { return m_availableBackends; @@ -99,7 +104,6 @@ int ZigbeeManager::addNetwork(const QString &serialPort, uint baudRate, const QS params.insert("serialPort", serialPort); params.insert("baudRate", baudRate); params.insert("backend", backend); - qWarning() << "************ channel mask!" << channels; if (m_engine->jsonRpcClient()->ensureServerVersion("5.8")) { params.insert("channelMask", static_cast(channels)); } @@ -148,6 +152,9 @@ int ZigbeeManager::removeNode(const QUuid &networkUuid, const QString &ieeeAddre void ZigbeeManager::init() { + m_fetchingData = true; + emit fetchingDataChanged(); + m_adapters->clear(); m_networks->clear(); m_availableBackends.clear(); @@ -193,6 +200,10 @@ void ZigbeeManager::getNetworksResponse(int commandId, const QVariantMap ¶ms // Get nodes from this network getNodes(network->networkUuid()); + + // In theory this should only change after nodes have been fetched... but this will do for now... + m_fetchingData = false; + emit fetchingDataChanged(); } } diff --git a/libnymea-app/zigbee/zigbeemanager.h b/libnymea-app/zigbee/zigbeemanager.h index 680049a8..93658c85 100644 --- a/libnymea-app/zigbee/zigbeemanager.h +++ b/libnymea-app/zigbee/zigbeemanager.h @@ -46,6 +46,7 @@ class ZigbeeManager : public QObject { Q_OBJECT Q_PROPERTY(Engine* engine READ engine WRITE setEngine NOTIFY engineChanged) + Q_PROPERTY(bool fetchingData READ fetchingData NOTIFY fetchingDataChanged) Q_PROPERTY(QStringList availableBackends READ availableBackends NOTIFY availableBackendsChanged) Q_PROPERTY(ZigbeeAdapters *adapters READ adapters CONSTANT) @@ -81,6 +82,8 @@ public: void setEngine(Engine *engine); Engine *engine() const; + bool fetchingData() const; + QStringList availableBackends() const; ZigbeeAdapters *adapters() const; ZigbeeNetworks *networks() const; @@ -95,6 +98,7 @@ public: signals: void engineChanged(); + void fetchingDataChanged(); void availableBackendsChanged(); void addNetworkReply(int commandId, const QString &error, const QUuid &networkUuid); void removeNodeReply(int commandId, const QString &error); @@ -118,6 +122,7 @@ private: private: Engine* m_engine = nullptr; + bool m_fetchingData = false; QStringList m_availableBackends; ZigbeeAdapters *m_adapters = nullptr; ZigbeeNetworks *m_networks = nullptr; diff --git a/nymea-app/ui/system/ZigbeeSettingsPage.qml b/nymea-app/ui/system/ZigbeeSettingsPage.qml index 43d7931f..4b55f72b 100644 --- a/nymea-app/ui/system/ZigbeeSettingsPage.qml +++ b/nymea-app/ui/system/ZigbeeSettingsPage.qml @@ -61,12 +61,20 @@ SettingsPageBase { engine: _engine } + Item { Layout.fillWidth: true Layout.preferredHeight: root.height - visible: zigbeeManager.networks.count == 0 + visible: zigbeeManager.fetchingData || zigbeeManager.networks.count == 0 + + BusyIndicator { + anchors.centerIn: parent + visible: zigbeeManager.fetchingData + running: visible + } EmptyViewPlaceholder { + visible: !zigbeeManager.fetchingData && zigbeeManager.networks.count == 0 width: parent.width - app.margins * 2 anchors.centerIn: parent title: qsTr("ZigBee")