diff options
Diffstat (limited to 'src/plugins/networkinformation/networkmanager/qnetworkmanagernetworkinformationbackend.cpp')
-rw-r--r-- | src/plugins/networkinformation/networkmanager/qnetworkmanagernetworkinformationbackend.cpp | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/plugins/networkinformation/networkmanager/qnetworkmanagernetworkinformationbackend.cpp b/src/plugins/networkinformation/networkmanager/qnetworkmanagernetworkinformationbackend.cpp index 5e2f4b61e6..ac16ad4b8d 100644 --- a/src/plugins/networkinformation/networkmanager/qnetworkmanagernetworkinformationbackend.cpp +++ b/src/plugins/networkinformation/networkmanager/qnetworkmanagernetworkinformationbackend.cpp @@ -118,7 +118,22 @@ transportMediumFromDeviceType(QNetworkManagerInterface::NMDeviceType type) // entries added in NetworkManager that isn't listed here return QNetworkInformation::TransportMedium::Unknown; } + +bool isMeteredFromNMMetered(QNetworkManagerInterface::NMMetered metered) +{ + switch (metered) { + case QNetworkManagerInterface::NM_METERED_YES: + case QNetworkManagerInterface::NM_METERED_GUESS_YES: + return true; + case QNetworkManagerInterface::NM_METERED_NO: + case QNetworkManagerInterface::NM_METERED_GUESS_NO: + case QNetworkManagerInterface::NM_METERED_UNKNOWN: + return false; + } + Q_UNREACHABLE(); + return false; } +} // unnamed namespace static QString backendName() { @@ -145,7 +160,7 @@ public: { using Feature = QNetworkInformation::Feature; return QNetworkInformation::Features(Feature::Reachability | Feature::CaptivePortal - | Feature::TransportMedium); + | Feature::TransportMedium | Feature::Metered); } bool isValid() const { return iface.isValid(); } @@ -215,6 +230,12 @@ QNetworkManagerNetworkInformationBackend::QNetworkManagerNetworkInformationBacke [this](NMDeviceType newDevice) { setTransportMedium(transportMediumFromDeviceType(newDevice)); }); + + auto updateMetered = [this](QNetworkManagerInterface::NMMetered metered) { + setMetered(isMeteredFromNMMetered(metered)); + }; + updateMetered(iface.meteredState()); + connect(&iface, &QNetworkManagerInterface::meteredChanged, this, std::move(updateMetered)); } QT_END_NAMESPACE |