I wrote an applet that makes an API call every 10 minutes, but I want it to show a message if the computer is offline. This means I need to get the network status within QML. I thought a DataEngine might be available, but there isn’t.
I read the code for plasma-nm and found this solution hack:
import org.kde.plasma.networkmanagement 0.2 as PlasmaNM
PlasmaNM.NetworkStatus {
id: networkStatus
}
PlasmaComponents3.Label {
visible: networkStatus.networkStatus != "Connected"
text: i18n("Network disconnected")
}
But I think comparing strings is a terrible way because I don’t know what will happen in other locales.
Is there a better way?
What about checking via dbus?
that would be ideal! but I can’t seem to find a way to do it natively without some C++ library like this one?
Did you try:
import org.kde.plasma.networkmanagement 0.2 as PlasmaNM PlasmaNM.NetworkStatus { id: networkStatus } PlasmaComponents3.Label { visible: networkStatus.connectivity !== PlasmaNM.NetworkManager.Full text: i18n("Network disconnected") }
This use an enum and should be a lot more robust
It seems
networkStatus
doesn’t provide aconnectivity
attribute andPlasmaNM.NetworkManager
doesn’t have aFull
either:console.log(Object.keys(networkStatus)) qml: [objectName,activeConnections,networkStatus,objectNameChanged,activeConnectionsChanged,networkStatusChanged]
networkStatus.connectivity !== PlasmaNM.NetworkManager.Full .../contents/ui/main.qml:150: TypeError: Cannot read property 'Full' of undefined
You should list the properties of the object you are dealing with. Perhaps there are some unknown functions/properties that may do what you want