status-desktop/ui/app/AppLayouts/Wallet/helpers/ChainsAvailabilityWatchdog.qml

56 lines
1.6 KiB
QML

import QtQuick 2.15
import StatusQ 0.1
import StatusQ.Core.Utils 0.1
// This component receives the networksModel
// and breaks down the online status of each chain
QObject {
id: root
// Required roleNames: chainId, isOnline
required property var networksModel
readonly property bool allOffline: d.allOffline
readonly property bool allOnline: d.allOnline
property bool active: true
signal chainOnlineChanged(int chainId, bool isOnline)
// Network online observer
// `chainOnlineChanged` signal when the online status of a chain changes
Instantiator {
id: networkOnlineObserver
model: root.networksModel
active: root.active
delegate: QtObject {
required property var model
property var /*var intended*/ isOnline: model.isOnline
onIsOnlineChanged: {
root.chainOnlineChanged(model.chainId, isOnline)
}
}
}
// Aggregator to count the number of online chains
SumAggregator{
id: aggregator
model: root.active ? root.networksModel : null
roleName: "isOnline"
}
// Network checker to check if the device is online
NetworkChecker {
id: networkChecker
active: root.active
}
QtObject {
id: d
readonly property bool allOffline: !networkChecker.isOnline || aggregator.value === 0
readonly property bool allOnline: networkChecker.isOnline &&
aggregator.value > 0 &&
aggregator.value === networksModel.ModelCount.count
}
}