[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