Attached is a proposed patch to fix a couple of bugs and provide access to
some information that was already indexed internally.

Index: libs/solid/control/networkinterface.h
===================================================================
--- libs/solid/control/networkinterface.h    (revision 782822)
+++ libs/solid/control/networkinterface.h    (working copy)
@@ -203,6 +203,14 @@
          */
         NetworkList networks() const;

+        /**
+         * Retrieves the active network on the device
+         *
+         * For wired network interfaces this will always be the same
network,
+         * but for wireless networks this will be the associated AP.
+         */
+        QString activeNetwork() const;
+

This provides data that was stored in activeNetPath under
NetworkManager-networkinterface.




Index: solid/networkmanager-0.6/NetworkManager-networkinterface.cpp
===================================================================
--- solid/networkmanager-0.6/NetworkManager-networkinterface.cpp
(revision 782822)
+++ solid/networkmanager-0.6/NetworkManager-networkinterface.cpp    (working
copy)
@@ -53,27 +53,27 @@
 {
     //kDebug(1441) << /*"deserialize args: " << message.arguments() <<
*/"signature: " << message.signature();
     QList<QVariant> args = message.arguments();
-    device.path.setPath(args.takeFirst().toString());
-    device.interface = args.takeFirst().toString();
-    device.type = args.takeFirst().toUInt();
-    device.udi = args.takeFirst().toString();
-    device.active = args.takeFirst().toBool();
-    device.activationStage = args.takeFirst().toUInt();
-    network.ipv4Address = args.takeFirst().toString();
-    network.subnetMask = args.takeFirst().toString();
-    network.broadcast = args.takeFirst().toString();
-    device.hardwareAddress = args.takeFirst().toString();
-    network.route = args.takeFirst().toString();
-    network.primaryDNS = args.takeFirst().toString();
-    network.secondaryDNS = args.takeFirst().toString();
-    device.mode = args.takeFirst().toInt();
-    device.strength = args.takeFirst().toInt();
-    device.linkActive = args.takeFirst().toBool();
-    device.speed = args.takeFirst().toInt();
-    device.capabilities = args.takeFirst().toUInt();
-    device.capabilitiesType = args.takeFirst().toUInt();
-    device.activeNetPath = args.takeFirst().toString();
-    device.networks = args.takeFirst().toStringList();
+    device.path.setPath((args.size() != 0) ? args.takeFirst().toString() :
QString());
+    device.interface = (args.size() != 0) ? args.takeFirst().toString() :
QString();
+    device.type = (args.size() != 0) ? args.takeFirst().toUInt() : 0;
+    device.udi = (args.size() != 0) ? args.takeFirst().toString() :
QString();
+    device.active = (args.size() != 0) ? args.takeFirst().toBool() : false;
+    device.activationStage = (args.size() != 0) ? args.takeFirst().toUInt()
: 0;
+    network.ipv4Address = (args.size() != 0) ? args.takeFirst().toString()
: QString();
+    network.subnetMask = (args.size() != 0) ? args.takeFirst().toString() :
QString();
+    network.broadcast = (args.size() != 0) ? args.takeFirst().toString() :
QString();
+    device.hardwareAddress = (args.size() != 0) ? args.takeFirst().toString()
: QString();
+    network.route = (args.size() != 0) ? args.takeFirst().toString() :
QString();
+    network.primaryDNS = (args.size() != 0) ? args.takeFirst().toString() :
QString();
+    network.secondaryDNS = (args.size() != 0) ? args.takeFirst().toString()
: QString();
+    device.mode = (args.size() != 0) ? args.takeFirst().toInt() : 0;
+    device.strength = (args.size() != 0) ? args.takeFirst().toInt() : 0;
+    device.linkActive = (args.size() != 0) ? args.takeFirst().toBool() :
false;
+    device.speed = (args.size() != 0) ? args.takeFirst().toInt() : 0;
+    device.capabilities = (args.size() != 0) ? args.takeFirst().toUInt() :
0;
+    device.capabilitiesType = (args.size() != 0) ? args.takeFirst().toUInt()
: 0;
+    device.activeNetPath = (args.size() != 0) ? args.takeFirst().toString()
: QString();
+    device.networks = (args.size() != 0) ? args.takeFirst().toStringList()
: QStringList();


This prevents a crash when trying to create a networkinterface device with
an invalid uni.


@@ -183,7 +183,7 @@
         if (d->type == Solid::Control::NetworkInterface::Ieee8023)
         {
             net = new NMNetwork(uni);
-            net->setActivated(true);
+            //net->setActivated(true);
         }
         else if (d->type == Solid::Control::NetworkInterface::Ieee80211)
         {

this prevents ethernet from becoming the active network which would make
knetworkmanager do a little dance if ethernet was unplugged.

Let me know you thoughts,
Chris
Index: libs/solid/control/ifaces/networkinterface.h
===================================================================
--- libs/solid/control/ifaces/networkinterface.h	(revision 782822)
+++ libs/solid/control/ifaces/networkinterface.h	(working copy)
@@ -137,6 +137,14 @@
          */
         virtual QStringList networks() const = 0;
 
+        /**
+         * Retrieves the active network on the device
+         *
+         * For wired network interfaces this will always be the same network,
+         * but for wireless networks this will be the associated AP.
+         */
+        virtual QString activeNetwork() const = 0;
+
     Q_SIGNALS:
 
         /**
Index: libs/solid/control/networkinterface.h
===================================================================
--- libs/solid/control/networkinterface.h	(revision 782822)
+++ libs/solid/control/networkinterface.h	(working copy)
@@ -203,6 +203,14 @@
          */
         NetworkList networks() const;
 
+        /**
+         * Retrieves the active network on the device
+         *
+         * For wired network interfaces this will always be the same network,
+         * but for wireless networks this will be the associated AP.
+         */
+        QString activeNetwork() const;
+
     Q_SIGNALS:
         /**
          * This signal is emitted when the device's activation status changed.
Index: libs/solid/control/networkinterface.cpp
===================================================================
--- libs/solid/control/networkinterface.cpp	(revision 782822)
+++ libs/solid/control/networkinterface.cpp	(working copy)
@@ -176,6 +176,11 @@
     return list;
 }
 
+QString Solid::Control::NetworkInterface::activeNetwork() const
+{
+    return_SOLID_CALL(Ifaces::NetworkInterface *, d->backendObject(), QString(), activeNetwork());
+}
+
 void Solid::Control::NetworkInterfacePrivate::_k_destroyed(QObject *object)
 {
     if (object == backendObject())
Index: libs/solid/control/backends/fakenet/fakenetworkinterface.cpp
===================================================================
--- libs/solid/control/backends/fakenet/fakenetworkinterface.cpp	(revision 782822)
+++ libs/solid/control/backends/fakenet/fakenetworkinterface.cpp	(working copy)
@@ -128,6 +128,11 @@
 {
     return mNetworks.keys();
 }
+
+QString FakeNetworkInterface::activeNetwork() const
+{
+    return "/org/freedesktop/NetworkManager/Devices/eth0";
+}
 void FakeNetworkInterface::setActive(bool active)
 {
     mPropertyMap.insert("active", QVariant(active));
Index: libs/solid/control/backends/fakenet/fakenetworkinterface.h
===================================================================
--- libs/solid/control/backends/fakenet/fakenetworkinterface.h	(revision 782822)
+++ libs/solid/control/backends/fakenet/fakenetworkinterface.h	(working copy)
@@ -50,6 +50,7 @@
         Solid::Control::NetworkInterface::Capabilities capabilities() const;
         QObject * createNetwork(const QString  & uni);
         QStringList networks() const;
+        QString activeNetwork() const;
     Q_SIGNALS:
         void activeChanged(bool);
         void linkUpChanged(bool);
Index: solid/networkmanager-0.6/NetworkManager-networkinterface.h
===================================================================
--- solid/networkmanager-0.6/NetworkManager-networkinterface.h	(revision 782822)
+++ solid/networkmanager-0.6/NetworkManager-networkinterface.h	(working copy)
@@ -65,6 +65,7 @@
     Solid::Control::NetworkInterface::Capabilities capabilities() const;
     QObject *createNetwork(const QString  & uni);
     QStringList networks() const;
+    QString activeNetwork() const;
     // These setters are used to update the interface by the manager
     // in response to DBus signals
     void setProperties(const NMDBusDeviceProperties  &);
Index: solid/networkmanager-0.6/NetworkManager-networkinterface.cpp
===================================================================
--- solid/networkmanager-0.6/NetworkManager-networkinterface.cpp	(revision 782822)
+++ solid/networkmanager-0.6/NetworkManager-networkinterface.cpp	(working copy)
@@ -53,27 +53,27 @@
 {
     //kDebug(1441) << /*"deserialize args: " << message.arguments() << */"signature: " << message.signature();
     QList<QVariant> args = message.arguments();
-    device.path.setPath(args.takeFirst().toString());
-    device.interface = args.takeFirst().toString();
-    device.type = args.takeFirst().toUInt();
-    device.udi = args.takeFirst().toString();
-    device.active = args.takeFirst().toBool();
-    device.activationStage = args.takeFirst().toUInt();
-    network.ipv4Address = args.takeFirst().toString();
-    network.subnetMask = args.takeFirst().toString();
-    network.broadcast = args.takeFirst().toString();
-    device.hardwareAddress = args.takeFirst().toString();
-    network.route = args.takeFirst().toString();
-    network.primaryDNS = args.takeFirst().toString();
-    network.secondaryDNS = args.takeFirst().toString();
-    device.mode = args.takeFirst().toInt();
-    device.strength = args.takeFirst().toInt();
-    device.linkActive = args.takeFirst().toBool();
-    device.speed = args.takeFirst().toInt();
-    device.capabilities = args.takeFirst().toUInt();
-    device.capabilitiesType = args.takeFirst().toUInt();
-    device.activeNetPath = args.takeFirst().toString();
-    device.networks = args.takeFirst().toStringList();
+    device.path.setPath((args.size() != 0) ? args.takeFirst().toString() : QString());
+    device.interface = (args.size() != 0) ? args.takeFirst().toString() : QString();
+    device.type = (args.size() != 0) ? args.takeFirst().toUInt() : 0;
+    device.udi = (args.size() != 0) ? args.takeFirst().toString() : QString();
+    device.active = (args.size() != 0) ? args.takeFirst().toBool() : false;
+    device.activationStage = (args.size() != 0) ? args.takeFirst().toUInt() : 0;
+    network.ipv4Address = (args.size() != 0) ? args.takeFirst().toString() : QString();
+    network.subnetMask = (args.size() != 0) ? args.takeFirst().toString() : QString();
+    network.broadcast = (args.size() != 0) ? args.takeFirst().toString() : QString();
+    device.hardwareAddress = (args.size() != 0) ? args.takeFirst().toString() : QString();
+    network.route = (args.size() != 0) ? args.takeFirst().toString() : QString();
+    network.primaryDNS = (args.size() != 0) ? args.takeFirst().toString() : QString();
+    network.secondaryDNS = (args.size() != 0) ? args.takeFirst().toString() : QString();
+    device.mode = (args.size() != 0) ? args.takeFirst().toInt() : 0;
+    device.strength = (args.size() != 0) ? args.takeFirst().toInt() : 0;
+    device.linkActive = (args.size() != 0) ? args.takeFirst().toBool() : false;
+    device.speed = (args.size() != 0) ? args.takeFirst().toInt() : 0;
+    device.capabilities = (args.size() != 0) ? args.takeFirst().toUInt() : 0;
+    device.capabilitiesType = (args.size() != 0) ? args.takeFirst().toUInt() : 0;
+    device.activeNetPath = (args.size() != 0) ? args.takeFirst().toString() : QString();
+    device.networks = (args.size() != 0) ? args.takeFirst().toStringList() : QStringList();
 }
 
 class NMNetworkInterfacePrivate
@@ -183,7 +183,7 @@
         if (d->type == Solid::Control::NetworkInterface::Ieee8023)
         {
             net = new NMNetwork(uni);
-            net->setActivated(true);
+            //net->setActivated(true);
         }
         else if (d->type == Solid::Control::NetworkInterface::Ieee80211)
         {
@@ -201,6 +201,11 @@
     return d->networks.keys();
 }
 
+QString NMNetworkInterface::activeNetwork() const
+{
+    return d->activeNetPath;
+}
+
 void NMNetworkInterface::setProperties(const NMDBusDeviceProperties  & props)
 {
     switch (props.type)
_______________________________________________
Kde-hardware-devel mailing list
Kde-hardware-devel@kde.org
https://mail.kde.org/mailman/listinfo/kde-hardware-devel

Reply via email to