9#include <QtDBus/QDBusConnection>
10#include <QtDBus/QDBusError>
11#include <QtDBus/QDBusInterface>
12#include <QtDBus/QDBusMessage>
13#include <QtDBus/QDBusReply>
14#include <QtDBus/QDBusPendingCallWatcher>
15#include <QtDBus/QDBusObjectPath>
16#include <QtDBus/QDBusPendingCall>
18#define DBUS_PROPERTIES_INTERFACE "org.freedesktop.DBus.Properties"_L1
20#define NM_DBUS_INTERFACE "org.freedesktop.NetworkManager"
21#define NM_DBUS_SERVICE NM_DBUS_INTERFACE ""_L1
23#define NM_DBUS_PATH "/org/freedesktop/NetworkManager"_L1
24#define NM_CONNECTION_DBUS_INTERFACE NM_DBUS_SERVICE ".Connection.Active"_L1
25#define NM_DEVICE_DBUS_INTERFACE NM_DBUS_SERVICE ".Device"_L1
35 static auto key = u
"State"_s;
40 static auto key = u
"Connectivity"_s;
43const QString &primaryConnectionKey()
45 static auto key = u
"PrimaryConnection"_s;
70 QList<QVariant> argumentList;
72 QDBusPendingReply<QVariantMap> propsReply = managerPropertiesInterface.callWithArgumentList(
74 if (propsReply.isError()) {
75 validDBusConnection =
false;
77 qWarning() <<
"Failed to query NetworkManager properties:" <<
error.message();
80 propertyMap = propsReply.
value();
84 SLOT(setProperties(
QString,QMap<QString,QVariant>,QList<QString>)));
91 SLOT(setProperties(
QString,QMap<QString,QVariant>,QList<QString>)));
97 if (
it != propertyMap.
cend())
104 auto it = propertyMap.
constFind(connectivityKey());
105 if (
it != propertyMap.
cend())
118 if (devicePaths.isEmpty())
122 return std::make_optional<QDBusInterface>(
NM_DBUS_SERVICE, primaryDevicePath.path(),
127std::optional<QDBusObjectPath> QNetworkManagerInterface::primaryConnectionDevicePath()
const
129 auto it = propertyMap.
constFind(primaryConnectionKey());
130 if (
it != propertyMap.
cend())
137 if (
const auto path = primaryConnectionDevicePath())
138 return extractDeviceType(*
path);
144 if (
const auto path = primaryConnectionDevicePath())
145 return extractDeviceMetered(*
path);
149auto QNetworkManagerInterface::extractDeviceType(
const QDBusObjectPath &devicePath)
const
154 return NM_DEVICE_TYPE_UNKNOWN;
155 if (!primaryDevice->isValid())
156 return NM_DEVICE_TYPE_UNKNOWN;
159 return NM_DEVICE_TYPE_UNKNOWN;
160 return static_cast<NMDeviceType
>(
deviceType.toUInt());
163auto QNetworkManagerInterface::extractDeviceMetered(
const QDBusObjectPath &devicePath)
const
168 return NM_METERED_UNKNOWN;
169 if (!primaryDevice->isValid())
170 return NM_METERED_UNKNOWN;
171 const QVariant metered = primaryDevice->property(
"Metered");
172 if (!metered.isValid())
173 return NM_METERED_UNKNOWN;
174 return static_cast<NMMetered
>(metered.toUInt());
179 backend = ourBackend;
183 const QMap<QString, QVariant> &
map,
190 bool valueChanged =
true;
193 if (
it != propertyMap.
end() &&
it.key() ==
i.key()) {
194 valueChanged = (
it.value() !=
i.value());
201 if (
i.key() == stateKey()) {
204 }
else if (
i.key() == connectivityKey()) {
207 }
else if (
i.key() == primaryConnectionKey()) {
211 }
else if (
i.key() ==
"Metered"_L1) {
220#include "moc_qnetworkmanagerservice.cpp"
bool isValid() const
Returns true if this is a valid reference to a remote object.
static QDBusConnection systemBus()
Returns a QDBusConnection object opened with the system bus.
QString path() const
Returns this object path.
iterator insert(const Key &key, const T &value)
T value(const Key &key, const T &defaultValue=T()) const
const_iterator cend() const
const_iterator cbegin() const
const_iterator constFind(const Key &key) const
iterator lowerBound(const Key &key)
QNetworkManagerInterfaceBase(QObject *parent=nullptr)
static bool networkManagerAvailable()
void setBackend(QNetworkManagerNetworkInformationBackend *ourBackend)
NMConnectivityState connectivityState() const
QNetworkManagerInterface(QObject *parent=nullptr)
NMDeviceType deviceType() const
@ NM_CONNECTIVITY_UNKNOWN
~QNetworkManagerInterface()
NMMetered meteredState() const
QVariant property(const char *name) const
Returns the value of the object's name property.
\macro QT_RESTRICTED_CAST_FROM_ASCII
QMap< QString, QString > map
[6]
QSet< QString >::iterator it
Combined button and popup list for selecting options.
DBusConnection const char DBusError * error
DBusConnection * connection
#define NM_DEVICE_DBUS_INTERFACE
#define NM_DBUS_INTERFACE
static std::optional< QDBusInterface > getPrimaryDevice(const QDBusObjectPath &devicePath)
#define DBUS_PROPERTIES_INTERFACE
#define NM_CONNECTION_DBUS_INTERFACE
GLsizei const GLchar *const * path
QAnyStringView interfaceName(const Interface &iface)
static QInputDevice::DeviceType deviceType(const UINT cursorType)