[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    playground/base/plasma/engines/networkmanager
From:       Christopher Blauvelt <cblauvelt () gmail ! com>
Date:       2008-09-22 1:55:36
Message-ID: 1222048536.039746.12198.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 863404 by cblauvelt:

Improve status icon detection to include changing signal strength.



 M  +26 -18    networkmanagerengine.cpp  
 M  +21 -7     networkmanagerengine.h  
 M  +5 -5      plasma-dataengine-networkmanager.desktop  


--- trunk/playground/base/plasma/engines/networkmanager/networkmanagerengine.cpp \
#863403:863404 @@ -35,7 +35,8 @@
 NetworkManagerEngine::NetworkManagerEngine(QObject* parent, const QVariantList& \
args)  : Plasma::DataEngine(parent),
       m_activeIface(0),
-      m_connectingIface(0)
+      m_connectingIface(0),
+      m_lastSignalStrength(0)
 {
     Q_UNUSED(args)
 
@@ -50,16 +51,12 @@
 NetworkManagerEngine::~NetworkManagerEngine()
 {
     delete signalmanager;
-
-    disconnect(Solid::Control::NetworkManager::notifier(), \
SIGNAL(statusChanged(Solid::Networking::Status)), this, \
                SLOT(onStatusChanged(Solid::Networking::Status)));
-    disconnect(Solid::Control::NetworkManager::notifier(), \
SIGNAL(networkInterfaceAdded(const QString&)), this, \
                SLOT(onNetworkInterfaceAdded(const QString&)));
-    disconnect(Solid::Control::NetworkManager::notifier(), \
SIGNAL(networkInterfaceRemoved(const QString&)), this, \
SLOT(onNetworkInterfaceRemoved(const QString&)));  }
 
 bool NetworkManagerEngine::sourceRequestEvent(const QString &name)
 {
     if (name == "Network Management") {
-        return updateNetworkManagement();
+        return initNetworkManagement();
     }
 
     if (ifaceMap.contains(name) ) {
@@ -79,7 +76,7 @@
     return false;
 }
 
-bool NetworkManagerEngine::updateNetworkManagement()
+bool NetworkManagerEngine::initNetworkManagement()
 {
     QString name("Network Management");
     m_status = Solid::Control::NetworkManager::status();
@@ -121,7 +118,7 @@
             setData(name, I18N_NOOP("Device Type"), "UnknownType");
             break;
     }
-    
+
     //setData(name, I18N_NOOP("Active Connection"), iface->activeConnection());
     setData(name, I18N_NOOP("Interface Name"), iface->interfaceName());
     setData(name, I18N_NOOP("Driver"), iface->driver());
@@ -159,13 +156,22 @@
 bool NetworkManagerEngine::updateWirelessData(Solid::Control::WirelessNetworkInterface \
*iface)  {
     QString name = iface->uni();
-    
+
     foreach (const QString &ap, iface->accessPoints()) {
         accessPointMap[ap] = iface->findAccessPoint(ap);
     }
 
     setData(name, I18N_NOOP("Available Access Points"), iface->accessPoints());
+
+    //if the active AP has changed stop receiving signals from the old AP
+    QString oldAp = query(name)[I18N_NOOP("Active Access Point")].toString();
+    if (oldAp != iface->activeAccessPoint()) {
+        signalmanager->unmapNetwork(accessPointMap[oldAp]);
+    }
+    kDebug() << "Activating: " << iface->activeAccessPoint();
+    signalmanager->mapNetwork(accessPointMap[iface->activeAccessPoint()], \
                iface->uni());
     setData(name, I18N_NOOP("Active Access Point"), iface->activeAccessPoint());
+
     setData(name, I18N_NOOP("Hardware Address"), iface->hardwareAddress());
     setData(name, I18N_NOOP("Mode"), \
Plasma::NetworkManager::wirelessModeToString(iface->mode()));  setData(name, \
I18N_NOOP("Bit Rate"), iface->bitRate()); @@ -211,15 +217,15 @@
         availableNetworks.removeAll(value.toString());
         setData(uni, I18N_NOOP("Available Networks"), availableNetworks);
         removeSource(value.toString());
-    } /*else if (property == "IP Details Changed") {
-        Solid::Control::NetworkInterfaceList iflist = \
                Solid::Control::NetworkManager::networkInterfaces();
-        foreach (Solid::Control::NetworkInterface *iface, iflist) {
-            Solid::Control::Network* network = iface->findNetwork(uni);
-            if (network->isValid()) {
-                updateNetworkData(network);
+    } else if (property == I18N_NOOP("Signal Strength")) {
+            kDebug() << "Signal strength changed.  Determining new icon.";
+            determineIcon();
+            //this signal is used to determine the status icon even when the source \
has not been requested +            //so don't create the source if it doesn't \
already exist +            if (sources().contains(uni)) {
+                setData(uni, property, value);
             }
-        }
-    }*/ else {
+    } else {
         setData(uni, property, value);
     }
     return;
@@ -295,7 +301,7 @@
 {
     kDebug() << "Determining new icon.";
     kDebug() << "Connection status: " << \
                Plasma::NetworkManager::statusToString(m_status);
-    
+
     if (m_status == Solid::Networking::Connected) {
         //connection status is changed to Connected before the device is declared \
active  if (m_activeIface == 0) {
@@ -312,6 +318,7 @@
             } else { //determine signal strength
                 QString activeAP = wirelessInterface->activeAccessPoint();
                 if (activeAP.isEmpty()) {
+                    kDebug() << "Could not find active access point.";
                     setData("Network Management", I18N_NOOP("icon"), \
"action-nm_unknown_connection");  return;
                 }
@@ -358,6 +365,7 @@
 {
     if(strength > m_lastSignalStrength-signalStrengthResolution-hysteresis
        && strength <= m_lastSignalStrength+signalStrengthResolution+hysteresis) {
+        kDebug() << "Last signal strength was: " << m_lastSignalStrength;
         return QString("action-nm_signal_%1").arg(m_lastSignalStrength, 2, 10, \
QLatin1Char('0'));  } else {
         //HACK: this was hardcoded to a resolution of 25 due to the inefficiencies \
                of a variable resolution
--- trunk/playground/base/plasma/engines/networkmanager/networkmanagerengine.h \
#863403:863404 @@ -49,9 +49,9 @@
 
 private Q_SLOTS:
     void determineIcon();
-    
+
 private:
-    bool updateNetworkManagement();
+    bool initNetworkManagement();
     bool updateInterfaceData(Solid::Control::NetworkInterface *iface);
     bool updateWiredData(Solid::Control::WiredNetworkInterface *iface);
     bool updateWirelessData(Solid::Control::WirelessNetworkInterface *iface);
@@ -81,14 +81,28 @@
         return;
     }
     if (m_activeIface != 0) {
-        disconnect(m_activeIface, SIGNAL(signalStrengthChanged(int)), this, \
                SLOT(determineIcon()));
-        disconnect(m_activeIface, SIGNAL(linkUpChanged(bool)), this, \
SLOT(determineIcon())); +        //disconnect(m_activeIface, \
SIGNAL(signalStrengthChanged(int)), this, SLOT(determineIcon())); +        \
//disconnect(m_activeIface, SIGNAL(linkUpChanged(bool)), this, \
SLOT(determineIcon())); +        if (m_activeIface->type() == \
Solid::Control::NetworkInterface::Ieee80211) { +            \
Solid::Control::WirelessNetworkInterface *wifiIface = \
(Solid::Control::WirelessNetworkInterface*)m_activeIface; +            \
Solid::Control::AccessPoint *activeAP = \
wifiIface->findAccessPoint(m_activeAccessPoint); +            if (activeAP) {
+                signalmanager->unmapNetwork(activeAP);
+            }
+        }
     }
 
     m_activeIface = iface;
     if (m_activeIface != 0) {
-        connect(m_activeIface, SIGNAL(signalStrengthChanged(int)), this, \
                SLOT(determineIcon()));
-        connect(m_activeIface, SIGNAL(linkUpChanged(bool)), this, \
SLOT(determineIcon())); +        //connect(m_activeIface, \
SIGNAL(signalStrengthChanged(int)), this, SLOT(determineIcon())); +        \
//connect(m_activeIface, SIGNAL(linkUpChanged(bool)), this, SLOT(determineIcon())); + \
if (m_activeIface->type() == Solid::Control::NetworkInterface::Ieee80211) { +         \
Solid::Control::WirelessNetworkInterface *wifiIface = \
(Solid::Control::WirelessNetworkInterface*)m_activeIface; +            \
Solid::Control::AccessPoint *activeAP = \
wifiIface->findAccessPoint(m_activeAccessPoint); +            if (activeAP) {
+                signalmanager->mapNetwork(activeAP, m_activeIface->uni());
+            }
+        }
     }
 }
 
@@ -100,7 +114,7 @@
     if (m_connectingIface != 0) {
         disconnect(m_connectingIface, SIGNAL(connectionStateChanged(int)), this, \
SLOT(determineIcon()));  }
-    
+
     m_connectingIface = iface;
     if(m_connectingIface != 0) {
         connect(m_connectingIface, SIGNAL(connectionStateChanged(int)), this, \
                SLOT(determineIcon()));
--- trunk/playground/base/plasma/engines/networkmanager/plasma-dataengine-networkmanager.desktop \
#863403:863404 @@ -31,9 +31,9 @@
 Icon=network-workgroup
 X-KDE-Library=plasma_engine_networkmanager
 
-X-KDE-PluginInfo-Author=
-X-KDE-PluginInfo-Email=
+X-KDE-PluginInfo-Author=Christopher Blauvelt
+X-KDE-PluginInfo-Email=cblauvelt@gmail.com
 X-KDE-PluginInfo-Name=networkmanager
-X-KDE-PluginInfo-Version=
-X-KDE-PluginInfo-Website=
-X-KDE-PluginInfo-Category=
+X-KDE-PluginInfo-Version=0.1
+X-KDE-PluginInfo-Website=http://plasma.kde.org/
+X-KDE-PluginInfo-Category=Utility


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic