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