Merge PR #774: Update ZigbeeNodesProxy filter when a device changes reachable state
This commit is contained in:
commit
0d0625a36a
@ -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<uint>(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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -65,6 +65,12 @@ void ZigbeeNodesProxy::setZigbeeNodes(ZigbeeNodes *zigbeeNodes)
|
||||
m_newNodes.insert(m_zigbeeNodes->get(i), QDateTime::currentDateTime());
|
||||
}
|
||||
});
|
||||
connect(m_zigbeeNodes, &ZigbeeNodes::dataChanged, this, [this](const QModelIndex &/*topLeft*/, const QModelIndex &/*bottomRight*/, const QVector<int> &roles = QVector<int>()){
|
||||
if (roles.contains(ZigbeeNodes::RoleReachable) && (!m_showOffline || !m_showOnline)) {
|
||||
invalidateFilter();
|
||||
emit countChanged();
|
||||
}
|
||||
});
|
||||
|
||||
setSourceModel(m_zigbeeNodes);
|
||||
|
||||
|
||||
@ -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")
|
||||
@ -173,8 +181,8 @@ SettingsPageBase {
|
||||
Label {
|
||||
Layout.fillWidth: true
|
||||
text: offlineNodes.count == 0
|
||||
? qsTr("%n device(s)", "", networkDelegate.network.nodes.count)
|
||||
: qsTr("%n device(s) (%1 disconnected)", "", networkDelegate.network.nodes.count).arg(offlineNodes.count)
|
||||
? qsTr("%n device(s)", "", Math.max(0, networkDelegate.network.nodes.count - 1)) // -1 for coordinator node
|
||||
: qsTr("%n device(s) (%1 disconnected)", "", Math.max(networkDelegate.network.nodes.count - 1)).arg(offlineNodes.count)
|
||||
|
||||
ZigbeeNodesProxy {
|
||||
id: offlineNodes
|
||||
@ -183,7 +191,6 @@ SettingsPageBase {
|
||||
showOnline: false
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user