/* Copyright 2008-2010 Sebastian Kügler This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License or (at your option) version 3 or any later version accepted by the membership of KDE e.V. (or its successor approved by the membership of KDE e.V.), which shall act as a proxy defined in Section 14 of version 3 of the license. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ // Own #include "uiutils.h" // KDE #include #include #include #include #include #include #include #include #include #include #if WITH_MODEMMANAGER_SUPPORT #include #include #include #include #include #endif // Qt #include #include #include using namespace NetworkManager; QString UiUtils::interfaceTypeLabel(const NetworkManager::Device::Type type, const NetworkManager::Device::Ptr iface) { QString deviceText; switch (type) { case NetworkManager::Device::Ethernet: deviceText = i18nc("title of the interface widget in nm's popup", "Wired Ethernet"); break; case NetworkManager::Device::Wifi: deviceText = i18nc("title of the interface widget in nm's popup", "Wireless 802.11"); break; case NetworkManager::Device::Bluetooth: deviceText = i18nc("title of the interface widget in nm's popup", "Bluetooth"); break; case NetworkManager::Device::Wimax: deviceText = i18nc("title of the interface widget in nm's popup", "WiMAX"); break; case NetworkManager::Device::InfiniBand: deviceText = i18nc("title of the interface widget in nm's popup", "Infiniband"); break; case NetworkManager::Device::Adsl: deviceText = i18nc("title of the interface widget in nm's popup", "ADSL"); break; case NetworkManager::Device::Bond: deviceText = i18nc("title of the interface widget in nm's popup", "Virtual (bond)"); break; case NetworkManager::Device::Bridge: deviceText = i18nc("title of the interface widget in nm's popup", "Virtual (bridge)"); break; case NetworkManager::Device::Vlan: deviceText = i18nc("title of the interface widget in nm's popup", "Virtual (vlan)"); break; case NetworkManager::Device::Modem: { const NetworkManager::ModemDevice::Ptr nmModemIface = iface.objectCast(); if (nmModemIface) { switch(modemSubType(nmModemIface->currentCapabilities())) { case NetworkManager::ModemDevice::Pots: deviceText = i18nc("title of the interface widget in nm's popup", "Serial Modem"); break; case NetworkManager::ModemDevice::GsmUmts: case NetworkManager::ModemDevice::CdmaEvdo: case NetworkManager::ModemDevice::Lte: deviceText = i18nc("title of the interface widget in nm's popup", "Mobile Broadband"); break; case NetworkManager::ModemDevice::NoCapability: kWarning() << "Unhandled modem sub type: NetworkManager::ModemDevice::NoCapability"; break; } } } break; default: deviceText = i18nc("title of the interface widget in nm's popup", "Wired Ethernet"); break; } return deviceText; } QString UiUtils::iconAndTitleForConnectionSettingsType(NetworkManager::ConnectionSettings::ConnectionType type, QString &title) { QString text; QString icon = "network-wired"; switch (type) { case ConnectionSettings::Adsl: text = i18n("ADSL"); icon = "modem"; break; case ConnectionSettings::Pppoe: text = i18n("DSL"); icon = "modem"; break; case ConnectionSettings::Bluetooth: text = i18n("Bluetooth"); icon = "preferences-system-bluetooth"; break; case ConnectionSettings::Bond: text = i18n("Bond"); break; case ConnectionSettings::Bridge: text = i18n("Bridge"); break; case ConnectionSettings::Gsm: case ConnectionSettings::Cdma: text = i18n("Mobile broadband"); icon = "phone"; break; case ConnectionSettings::Infiniband: text = i18n("Infiniband"); break; case ConnectionSettings::OLPCMesh: text = i18n("Olpc mesh"); break; case ConnectionSettings::Vlan: text = i18n("VLAN"); break; case ConnectionSettings::Vpn: text = i18n("VPN"); icon = "secure-card"; break; case ConnectionSettings::Wimax: text = i18n("WiMAX"); icon = "network-wireless"; break; case ConnectionSettings::Wired: text = i18n("Wired"); icon = "network-wired"; break; case ConnectionSettings::Wireless: text = i18n("Wireless"); icon = "network-wireless"; break; default: text = i18n("Unknown connection type"); break; } title = text; return icon; } QString UiUtils::prettyInterfaceName(NetworkManager::Device::Type type, const QString &interfaceName) { QString ret; switch (type) { case NetworkManager::Device::Wifi: ret = i18n("Wireless Interface (%1)", interfaceName); break; case NetworkManager::Device::Ethernet: ret = i18n("Wired Interface (%1)", interfaceName); break; case NetworkManager::Device::Bluetooth: ret = i18n("Bluetooth (%1)", interfaceName); break; case NetworkManager::Device::Modem: ret = i18n("Modem (%1)", interfaceName); break; case NetworkManager::Device::Adsl: ret = i18n("ADSL (%1)", interfaceName); break; case NetworkManager::Device::Vlan: ret = i18n("VLan (%1)", interfaceName); break; case NetworkManager::Device::Bridge: ret = i18n("Bridge (%1)", interfaceName); break; default: ret = interfaceName; } return ret; } QString UiUtils::connectionStateToString(NetworkManager::Device::State state, const QString &connectionName) { QString stateString; switch (state) { case NetworkManager::Device::UnknownState: stateString = i18nc("description of unknown network interface state", "Unknown"); break; case NetworkManager::Device::Unmanaged: stateString = i18nc("description of unmanaged network interface state", "Unmanaged"); break; case NetworkManager::Device::Unavailable: stateString = i18nc("description of unavailable network interface state", "Unavailable"); break; case NetworkManager::Device::Disconnected: stateString = i18nc("description of unconnected network interface state", "Not connected"); break; case NetworkManager::Device::Preparing: stateString = i18nc("description of preparing to connect network interface state", "Preparing to connect"); break; case NetworkManager::Device::ConfiguringHardware: stateString = i18nc("description of configuring hardware network interface state", "Configuring interface"); break; case NetworkManager::Device::NeedAuth: stateString = i18nc("description of waiting for authentication network interface state", "Waiting for authorization"); break; case NetworkManager::Device::ConfiguringIp: stateString = i18nc("network interface doing dhcp request in most cases", "Setting network address"); break; case NetworkManager::Device::CheckingIp: stateString = i18nc("is other action required to fully connect? captive portals, etc.", "Checking further connectivity"); break; case NetworkManager::Device::WaitingForSecondaries: stateString = i18nc("a secondary connection (e.g. VPN) has to be activated first to continue", "Waiting for a secondary connection"); break; case NetworkManager::Device::Activated: if (connectionName.isEmpty()) { stateString = i18nc("network interface connected state label", "Connected"); } else { stateString = i18nc("network interface connected state label", "Connected to %1", connectionName); } break; case NetworkManager::Device::Deactivating: stateString = i18nc("network interface disconnecting state label", "Deactivating connection"); break; case NetworkManager::Device::Failed: stateString = i18nc("network interface connection failed state label", "Connection Failed"); break; default: stateString = i18nc("interface state", "Error: Invalid state"); } return stateString; } QString UiUtils::vpnConnectionStateToString(VpnConnection::State state) { QString stateString; switch (state) { case VpnConnection::Unknown: stateString = i18nc("The state of the VPN connection is unknown", "Unknown"); break; case VpnConnection::Prepare: stateString = i18nc("The VPN connection is preparing to connect", "Preparing to connect"); break; case VpnConnection::NeedAuth: stateString = i18nc("The VPN connection needs authorization credentials", "Needs authorization"); break; case VpnConnection::Connecting: stateString = i18nc("The VPN connection is being established", "Connecting"); break; case VpnConnection::GettingIpConfig: stateString = i18nc("The VPN connection is getting an IP address", "Setting network address"); break; case VpnConnection::Activated: stateString = i18nc("The VPN connection is active", "Activated"); break; case VpnConnection::Failed: stateString = i18nc("The VPN connection failed", "Failed"); break; case VpnConnection::Disconnected: stateString = i18nc("The VPN connection is disconnected", "Failed"); break; default: stateString = i18nc("interface state", "Error: Invalid state"); } return stateString; } QString UiUtils::operationModeToString(NetworkManager::WirelessDevice::OperationMode mode) { QString modeString; switch (mode) { case NetworkManager::WirelessDevice::WirelessDevice::Unknown: modeString = i18nc("wireless network operation mode", "Unknown"); break; case NetworkManager::WirelessDevice::Adhoc: modeString = i18nc("wireless network operation mode", "Adhoc"); break; case NetworkManager::WirelessDevice::WirelessDevice::Infra: modeString = i18nc("wireless network operation mode", "Infrastructure"); break; case NetworkManager::WirelessDevice::WirelessDevice::ApMode: modeString = i18nc("wireless network operation mode", "Access point"); break; default: modeString = I18N_NOOP("INCORRECT MODE FIX ME"); } return modeString; } QStringList UiUtils::wpaFlagsToStringList(NetworkManager::AccessPoint::WpaFlags flags) { /* for testing purposes flags = NetworkManager::AccessPoint::PairWep40 | NetworkManager::AccessPoint::PairWep104 | NetworkManager::AccessPoint::PairTkip | NetworkManager::AccessPoint::PairCcmp | NetworkManager::AccessPoint::GroupWep40 | NetworkManager::AccessPoint::GroupWep104 | NetworkManager::AccessPoint::GroupTkip | NetworkManager::AccessPoint::GroupCcmp | NetworkManager::AccessPoint::KeyMgmtPsk | NetworkManager::AccessPoint::KeyMgmt8021x; */ QStringList flagList; if (flags.testFlag(NetworkManager::AccessPoint::PairWep40)) flagList.append(i18nc("wireless network cipher", "Pairwise WEP40")); if (flags.testFlag(NetworkManager::AccessPoint::PairWep104)) flagList.append(i18nc("wireless network cipher", "Pairwise WEP104")); if (flags.testFlag(NetworkManager::AccessPoint::PairTkip)) flagList.append(i18nc("wireless network cipher", "Pairwise TKIP")); if (flags.testFlag(NetworkManager::AccessPoint::PairCcmp)) flagList.append(i18nc("wireless network cipher", "Pairwise CCMP")); if (flags.testFlag(NetworkManager::AccessPoint::GroupWep40)) flagList.append(i18nc("wireless network cipher", "Group WEP40")); if (flags.testFlag(NetworkManager::AccessPoint::GroupWep104)) flagList.append(i18nc("wireless network cipher", "Group WEP104")); if (flags.testFlag(NetworkManager::AccessPoint::GroupTkip)) flagList.append(i18nc("wireless network cipher", "Group TKIP")); if (flags.testFlag(NetworkManager::AccessPoint::GroupCcmp)) flagList.append(i18nc("wireless network cipher", "Group CCMP")); if (flags.testFlag(NetworkManager::AccessPoint::KeyMgmtPsk)) flagList.append(i18nc("wireless network cipher", "PSK")); if (flags.testFlag(NetworkManager::AccessPoint::KeyMgmt8021x)) flagList.append(i18nc("wireless network cipher", "802.1x")); return flagList; } QString UiUtils::connectionSpeed(double bitrate) { QString out; if (bitrate < 1000) { out = i18nc("connection speed", "%1 Bit/s", bitrate); } else if (bitrate < 1000000) { out = i18nc("connection speed", "%1 MBit/s", bitrate/1000); } else { out = i18nc("connection speed", "%1 GBit/s", bitrate/1000000); } return out; } QString UiUtils::wirelessBandToString(NetworkManager::WirelessSetting::FrequencyBand band) { switch (band) { case NetworkManager::WirelessSetting::Automatic: return QLatin1String("automatic"); break; case NetworkManager::WirelessSetting::A: return QLatin1String("a"); break; case NetworkManager::WirelessSetting::Bg: return QLatin1String("b/g"); break; } return QString(); } #if WITH_MODEMMANAGER_SUPPORT QString UiUtils::convertAllowedModeToString(ModemManager::Modem::ModemModes modes) { if (modes.testFlag(MM_MODEM_MODE_4G)) { return i18nc("Gsm modes (2G/3G/any)","LTE"); } else if (modes.testFlag(MM_MODEM_MODE_3G)) { return i18nc("Gsm modes (2G/3G/any)","UMTS/HSxPA"); } else if (modes.testFlag(MM_MODEM_MODE_2G)) { return i18nc("Gsm modes (2G/3G/any)","GPRS/EDGE"); } else if (modes.testFlag(MM_MODEM_MODE_CS)) { return i18nc("Gsm modes (2G/3G/any)","GSM"); } else if (modes.testFlag(MM_MODEM_MODE_ANY)) { return i18nc("Gsm modes (2G/3G/any)","Any"); } return i18nc("Gsm modes (2G/3G/any)","Any"); } QString UiUtils::convertAccessTechnologyToString(ModemManager::Modem::AccessTechnologies tech) { if (tech.testFlag(MM_MODEM_ACCESS_TECHNOLOGY_LTE)) { return i18nc("Cellular access technology","LTE"); } else if (tech.testFlag(MM_MODEM_ACCESS_TECHNOLOGY_EVDOB)) { return i18nc("Cellular access technology","CDMA2000 EVDO revision B"); } else if (tech.testFlag(MM_MODEM_ACCESS_TECHNOLOGY_EVDOA)) { return i18nc("Cellular access technology","CDMA2000 EVDO revision A"); } else if (tech.testFlag(MM_MODEM_ACCESS_TECHNOLOGY_EVDO0)) { return i18nc("Cellular access technology","CDMA2000 EVDO revision 0"); } else if (tech.testFlag(MM_MODEM_ACCESS_TECHNOLOGY_1XRTT)) { return i18nc("Cellular access technology","CDMA2000 1xRTT"); } else if (tech.testFlag(MM_MODEM_ACCESS_TECHNOLOGY_HSPA_PLUS)) { return i18nc("Cellular access technology","HSPA+"); } else if (tech.testFlag(MM_MODEM_ACCESS_TECHNOLOGY_HSPA)) { return i18nc("Cellular access technology","HSPA"); } else if (tech.testFlag(MM_MODEM_ACCESS_TECHNOLOGY_HSUPA)) { return i18nc("Cellular access technology","HSUPA"); } else if (tech.testFlag(MM_MODEM_ACCESS_TECHNOLOGY_HSDPA)) { return i18nc("Cellular access technology","HSDPA"); } else if (tech.testFlag(MM_MODEM_ACCESS_TECHNOLOGY_UMTS)) { return i18nc("Cellular access technology","UMTS"); } else if (tech.testFlag(MM_MODEM_ACCESS_TECHNOLOGY_EDGE)) { return i18nc("Cellular access technology","EDGE"); } else if (tech.testFlag(MM_MODEM_ACCESS_TECHNOLOGY_GPRS)) { return i18nc("Cellular access technology","GPRS"); } else if (tech.testFlag(MM_MODEM_ACCESS_TECHNOLOGY_GSM_COMPACT)) { return i18nc("Cellular access technology","Compact GSM"); } else if (tech.testFlag(MM_MODEM_ACCESS_TECHNOLOGY_GSM)) { return i18nc("Cellular access technology","GSM"); } else if (tech.testFlag(MM_MODEM_ACCESS_TECHNOLOGY_POTS)) { return i18nc("Analog wireline modem","Analog"); } else if (tech.testFlag(MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN)) { return i18nc("Unknown cellular access technology","Unknown"); } else if (tech.testFlag(MM_MODEM_ACCESS_TECHNOLOGY_ANY)) { return i18nc("Any cellular access technology","Any"); } return i18nc("Unknown cellular access technology","Unknown"); } QString UiUtils::convertLockReasonToString(MMModemLock reason) { switch (reason) { case MM_MODEM_LOCK_NONE: return i18nc("possible SIM lock reason", "Modem is unlocked."); case MM_MODEM_LOCK_SIM_PIN: return i18nc("possible SIM lock reason", "SIM requires the PIN code."); case MM_MODEM_LOCK_SIM_PIN2: return i18nc("possible SIM lock reason", "SIM requires the PIN2 code."); case MM_MODEM_LOCK_SIM_PUK: return i18nc("possible SIM lock reason", "SIM requires the PUK code."); case MM_MODEM_LOCK_SIM_PUK2: return i18nc("possible SIM lock reason", "SIM requires the PUK2 code."); case MM_MODEM_LOCK_PH_SP_PIN: return i18nc("possible SIM lock reason", "Modem requires the service provider PIN code."); case MM_MODEM_LOCK_PH_SP_PUK: return i18nc("possible SIM lock reason", "Modem requires the service provider PUK code."); case MM_MODEM_LOCK_PH_NET_PIN: return i18nc("possible SIM lock reason", "Modem requires the network PIN code."); case MM_MODEM_LOCK_PH_NET_PUK: return i18nc("possible SIM lock reason", "Modem requires the network PUK code."); case MM_MODEM_LOCK_PH_SIM_PIN: return i18nc("possible SIM lock reason", "Modem requires the PIN code."); case MM_MODEM_LOCK_PH_CORP_PIN: return i18nc("possible SIM lock reason", "Modem requires the corporate PIN code."); case MM_MODEM_LOCK_PH_CORP_PUK: return i18nc("possible SIM lock reason", "Modem requires the corporate PUK code."); case MM_MODEM_LOCK_PH_FSIM_PIN: return i18nc("possible SIM lock reason", "Modem requires the PH-FSIM PIN code."); case MM_MODEM_LOCK_PH_FSIM_PUK: return i18nc("possible SIM lock reason", "Modem requires the PH-FSIM PUK code."); case MM_MODEM_LOCK_PH_NETSUB_PIN: return i18nc("possible SIM lock reason", "Modem requires the network subset PIN code."); case MM_MODEM_LOCK_PH_NETSUB_PUK: return i18nc("possible SIM lock reason", "Modem requires the network subset PUK code."); case MM_MODEM_LOCK_UNKNOWN: default: return i18nc("possible SIM lock reason", "Lock reason unknown."); } } #endif QString UiUtils::convertNspTypeToString(WimaxNsp::NetworkType type) { switch (type) { case WimaxNsp::Unknown: return i18nc("Unknown", "Unknown Wimax NSP type"); case WimaxNsp::Home: return i18n("Home"); case WimaxNsp::Partner: return i18n("Partner"); case WimaxNsp::RoamingPartner: return i18n("Roaming partner"); } return i18nc("Unknown", "Unknown Wimax NSP type"); } NetworkManager::ModemDevice::Capability UiUtils::modemSubType(NetworkManager::ModemDevice::Capabilities modemCaps) { if (modemCaps & NetworkManager::ModemDevice::Lte) { return NetworkManager::ModemDevice::Lte; } else if (modemCaps & NetworkManager::ModemDevice::CdmaEvdo) { return NetworkManager::ModemDevice::CdmaEvdo; } else if (modemCaps & NetworkManager::ModemDevice::GsmUmts) { return NetworkManager::ModemDevice::GsmUmts; } else if (modemCaps & NetworkManager::ModemDevice::Pots) { return NetworkManager::ModemDevice::Pots; } return NetworkManager::ModemDevice::NoCapability; } QString UiUtils::labelFromWirelessSecurity(NetworkManager::Utils::WirelessSecurityType type) { QString tip; switch (type) { case NetworkManager::Utils::None: tip = i18nc("@label no security", "Insecure"); break; case NetworkManager::Utils::StaticWep: tip = i18nc("@label WEP security", "WEP"); break; case NetworkManager::Utils::Leap: tip = i18nc("@label LEAP security", "LEAP"); break; case NetworkManager::Utils::DynamicWep: tip = i18nc("@label Dynamic WEP security", "Dynamic WEP"); break; case NetworkManager::Utils::WpaPsk: tip = i18nc("@label WPA-PSK security", "WPA-PSK"); break; case NetworkManager::Utils::WpaEap: tip = i18nc("@label WPA-EAP security", "WPA-EAP"); break; case NetworkManager::Utils::Wpa2Psk: tip = i18nc("@label WPA2-PSK security", "WPA2-PSK"); break; case NetworkManager::Utils::Wpa2Eap: tip = i18nc("@label WPA2-EAP security", "WPA2-EAP"); break; default: tip = i18nc("@label unknown security", "Unknown security type"); break; } return tip; } QString UiUtils::shortToolTipFromWirelessSecurity(NetworkManager::Utils::WirelessSecurityType type) { QString tip; switch (type) { case NetworkManager::Utils::None: tip = i18nc("@info:tooltip no security", "Insecure"); break; case NetworkManager::Utils::StaticWep: tip = i18nc("@info:tooltip WEP security", "WEP"); break; case NetworkManager::Utils::Leap: tip = i18nc("@info:tooltip LEAP security", "LEAP"); break; case NetworkManager::Utils::DynamicWep: tip = i18nc("@info:tooltip Dynamic WEP security", "Dynamic WEP"); break; case NetworkManager::Utils::WpaPsk: tip = i18nc("@info:tooltip WPA-PSK security", "WPA-PSK"); break; case NetworkManager::Utils::WpaEap: tip = i18nc("@info:tooltip WPA-EAP security", "WPA-EAP"); break; case NetworkManager::Utils::Wpa2Psk: tip = i18nc("@info:tooltip WPA2-PSK security", "WPA2-PSK"); break; case NetworkManager::Utils::Wpa2Eap: tip = i18nc("@info:tooltip WPA2-EAP security", "WPA2-EAP"); break; default: tip = i18nc("@info:tooltip unknown security", "Unknown security type"); break; } return tip; } QString UiUtils::connectionDetails(const Device::Ptr& device, const Connection::Ptr& connection, const QStringList& keys) { const QString format = "%1 %2"; QString details; const bool connected = device && connection && device->activeConnection() && device->activeConnection()->connection() == connection && device->activeConnection()->state() == ActiveConnection::Activated; foreach (const QString& key, keys) { if (key == "interface:name") { if (device) { QString name; if (device->ipInterfaceName().isEmpty()) { name = device->interfaceName(); } else { name = device->ipInterfaceName(); } details += QString(format).arg(i18n("System name:"), name); } } else if (key == "ipv4:address") { if (device && device->ipV4Config().isValid() && connected) { if (device->ipV4Config().addresses().isEmpty()) { continue; } QHostAddress addr = device->ipV4Config().addresses().first().ip(); if (!addr.isNull()) { details += QString(format).arg(i18n("IPv4 Address:"), addr.toString()); } } } else if (key == "ipv4:gateway") { if (device && device->ipV4Config().isValid() && connected) { if (device->ipV4Config().addresses().isEmpty()) { continue; } QHostAddress addr = device->ipV4Config().addresses().first().gateway(); if (!addr.isNull()) { details += QString(format).arg(i18n("IPv4 Gateway:"), addr.toString()); } } } else if (key == "ipv6:address") { if (device && device->ipV6Config().isValid() && connected) { if (device->ipV6Config().addresses().isEmpty()) { continue; } QHostAddress addr = device->ipV6Config().addresses().first().ip(); if (!addr.isNull()) { details += QString(format).arg(i18n("IPv6 Address:"), addr.toString()); } } } else if (key == "ipv6:gateway") { if (device && device->ipV6Config().isValid() && connected) { if (device->ipV6Config().addresses().isEmpty()) { continue; } QHostAddress addr = device->ipV6Config().addresses().first().gateway(); if (!addr.isNull() && addr.toString() != "::") { details += QString(format).arg(i18n("IPv6 Gateway:"), addr.toString()); } } } else if (key == "interface:driver") { if (device) { details += QString(format).arg(i18n("Driver:"), device->driver()); } } } return details; } QString UiUtils::bluetoothDetails(const BluetoothDevice::Ptr& btDevice, const QStringList& keys) { const QString format = "%1 %2"; QString details; foreach (const QString& key, keys) { if (key == "bluetooth:name") { if (btDevice) { details += QString(format).arg(i18nc("Name", "Bluetooth name"), btDevice->name()); } } else if (key == "interface:hardwareAddress") { if (btDevice) { details += QString(format).arg(i18n("MAC Address:"), btDevice->hardwareAddress()); } } } return details; } QString UiUtils::modemDetails(const ModemDevice::Ptr& modemDevice, const QStringList& keys) { #if WITH_MODEMMANAGER_SUPPORT const QString format = "%1 %2"; QString details; ModemManager::Modem::Ptr modemNetwork; ModemManager::Modem3gpp::Ptr gsmNet; ModemManager::ModemCdma::Ptr cdmaNet; ModemManager::ModemDevice::Ptr modem = ModemManager::findModemDevice(modemDevice->udi()); if (modem) { modemNetwork = modem->interface(ModemManager::ModemDevice::ModemInterface).objectCast(); gsmNet = modem->interface(ModemManager::ModemDevice::GsmInterface).objectCast(); cdmaNet = modem->interface(ModemManager::ModemDevice::CdmaInterface).objectCast(); } foreach (const QString& key, keys) { if (key == "mobile:operator") { if (gsmNet) { details += QString(format).arg(i18n("Operator:"), gsmNet->operatorName()); } else if (cdmaNet) { details += QString(format).arg(i18n("Network ID:"), cdmaNet->nid()); } } else if (key == "mobile:quality") { if (modemNetwork) { details += QString(format).arg(i18n("Signal Quality:"), QString("%1%").arg(modemNetwork->signalQuality().signal)); } } else if (key == "mobile:technology") { if (modemNetwork) { details += QString(format).arg(i18n("Access Technology:"), UiUtils::convertAccessTechnologyToString(modemNetwork->accessTechnologies())); } } else if (key == "mobile:mode") { if (modemNetwork) { details += QString(format).arg(i18n("Allowed Mode:"), UiUtils::convertAllowedModeToString(modemNetwork->currentModes().allowed)); } } else if (key == "mobile:unlock") { if (modemNetwork) { details += QString(format).arg(i18n("Unlock Required:"), UiUtils::convertLockReasonToString(modemNetwork->unlockRequired())); } } else if (key == "mobile:imei") { if (modemNetwork) { details += QString(format).arg(i18n("IMEI:"), modemNetwork->equipmentIdentifier()); } } else if (key == "mobile:imsi") { if (modemDevice) { ModemManager::Sim::Ptr simCard; simCard = modemDevice->getModemCardIface(); if (simCard) { details += QString(format).arg(i18n("IMSI:"), simCard->imsi()); } } } } return details; #else Q_UNUSED(modemDevice) Q_UNUSED(keys) return QString(); #endif } QString UiUtils::vpnDetails(const VpnConnection::Ptr& vpnConnection, const VpnSetting::Ptr& vpnSetting, const QStringList& keys) { const QString format = "%1 %2"; QString details; foreach (const QString& key, keys) { if (key == "vpn:plugin") { if (vpnSetting) { details += QString(format).arg(i18n("VPN plugin:"), vpnSetting->serviceType().section('.', -1)); } } else if (key == "vpn:banner") { if (vpnConnection && !vpnConnection->banner().isEmpty()) { details += QString(format).arg(i18n("Banner:"), vpnConnection->banner().simplified()); } } } return details; } QString UiUtils::wimaxDetails(const NetworkManager::WimaxDevice::Ptr& wimaxDevice, const WimaxNsp::Ptr& wimaxNsp, const NetworkManager::Connection::Ptr& connection, const QStringList& keys) { const QString format = "%1 %2"; QString details; const bool connected = wimaxDevice && connection && wimaxDevice->activeConnection() && wimaxDevice->activeConnection()->connection() == connection && wimaxDevice->activeConnection()->state() == ActiveConnection::Activated; foreach (const QString& key, keys) { if (key == "wimax:bsid") { if (connected && wimaxDevice) { details += QString(format).arg(i18n("Bsid:"), wimaxDevice->bsid()); } } else if (key == "wimax:nsp") { if (wimaxNsp) { details += QString(format).arg(i18n("NSP Name:"), wimaxNsp->name()); } } else if (key == "wimax:signal") { if (wimaxNsp) { details += QString(format).arg(i18n("Signal Quality:"), i18n("%1%", wimaxNsp->signalQuality())); } } else if (key == "wimax:type") { if (wimaxNsp) { details += QString(format).arg(i18n("Network Type:"), UiUtils::convertNspTypeToString(wimaxNsp->networkType())); } } } return details; } QString UiUtils::wiredDetails(const WiredDevice::Ptr& wiredDevice, const NetworkManager::Connection::Ptr& connection, const QStringList& keys) { const QString format = "%1 %2"; QString details; const bool connected = wiredDevice && connection && wiredDevice->activeConnection() && wiredDevice->activeConnection()->connection() == connection && wiredDevice->activeConnection()->state() == ActiveConnection::Activated; foreach (const QString& key, keys) { if (key == "interface:bitrate") { if (wiredDevice && connected) { details += QString(format).arg(i18n("Connection speed:"), UiUtils::connectionSpeed(wiredDevice->bitRate())); } } else if (key == "interface:hardwareaddress") { if (wiredDevice) { details += QString(format).arg(i18n("MAC Address:"), wiredDevice->permanentHardwareAddress()); } } } return details; } QString UiUtils::wirelessDetails(const WirelessDevice::Ptr& wirelessDevice, const AccessPoint::Ptr& ap, const NetworkManager::Connection::Ptr& connection, const QStringList& keys) { const QString format = "%1 %2"; QString details; const bool connected = wirelessDevice && connection && wirelessDevice->activeConnection() && wirelessDevice->activeConnection()->connection() == connection && wirelessDevice->activeConnection()->state() == ActiveConnection::Activated; foreach (const QString& key, keys) { if (key == "interface:bitrate") { if (wirelessDevice && connected) { details += QString(format).arg(i18n("Connection speed:"), UiUtils::connectionSpeed(wirelessDevice->bitRate())); } } else if (key == "interface:hardwareaddress") { if (wirelessDevice) { details += QString(format).arg(i18n("MAC Address:"), wirelessDevice->permanentHardwareAddress()); } } else if (key == "wireless:mode") { if (wirelessDevice) { details += QString(format).arg(i18n("Mode:"), UiUtils::operationModeToString(wirelessDevice->mode())); } } else if (key == "wireless:signal") { if (ap) { details += QString(format).arg(i18n("Signal strength:"), i18n("%1%", ap->signalStrength())); } } else if (key == "wireless:ssid") { if (ap) { details += QString(format).arg(i18n("Access point (SSID):"), ap->ssid()); } } else if (key == "wireless:accesspoint") { if (ap) { details += QString(format).arg(i18n("Access point (BSSID):"), ap->hardwareAddress()); } } else if (key == "wireless:channel") { if (ap) { details += QString(format).arg(i18nc("Wifi AP channel and frequency", "Channel:"), i18n("%1 (%2 MHz)", NetworkManager::Utils::findChannel(ap->frequency()), ap->frequency())); } } else if (key == "wireless:security") { NetworkManager::Utils::WirelessSecurityType security = Utils::Unknown; if (ap) { security = NetworkManager::Utils::findBestWirelessSecurity(wirelessDevice->wirelessCapabilities(), true, (wirelessDevice->mode() == NetworkManager::WirelessDevice::Adhoc), ap->capabilities(), ap->wpaFlags(), ap->rsnFlags()); if (security != Utils::Unknown) { details += QString(format).arg(i18n("Security:"), UiUtils::labelFromWirelessSecurity(security)); } } else if (connection) { // Necessary for example for AdHoc connections security = Utils::securityTypeFromConnectionSetting(connection->settings()); if (security != Utils::Unknown) { details += QString(format).arg(i18n("Security:"), UiUtils::labelFromWirelessSecurity(security)); } } } else if (key == "wireless:band") { if (ap) { details += QString(format).arg(i18n("Frequency band:"), UiUtils::wirelessBandToString(NetworkManager::Utils::findFrequencyBand(ap->frequency()))); } } } return details; } QString UiUtils::formatDateRelative(const QDateTime & lastUsed) { QString lastUsedText; if (lastUsed.isValid()) { const QDateTime now = QDateTime::currentDateTime(); if (lastUsed.daysTo(now) == 0 ) { int secondsAgo = lastUsed.secsTo(now); if (secondsAgo < (60 * 60 )) { int minutesAgo = secondsAgo / 60; lastUsedText = i18ncp( "Label for last used time for a network connection used in the last hour, as the number of minutes since usage", "One minute ago", "%1 minutes ago", minutesAgo); } else { int hoursAgo = secondsAgo / (60 * 60); lastUsedText = i18ncp( "Label for last used time for a network connection used in the last day, as the number of hours since usage", "One hour ago", "%1 hours ago", hoursAgo); } } else if (lastUsed.daysTo(now) == 1) { lastUsedText = i18nc("Label for last used time for a network connection used the previous day", "Yesterday"); } else { lastUsedText = KGlobal::locale()->formatDate(lastUsed.date(), KLocale::ShortDate); } } else { lastUsedText = i18nc("Label for last used time for a " "network connection that has never been used", "Never"); } return lastUsedText; } QString UiUtils::formatLastUsedDateRelative(const QDateTime & lastUsed) { QString lastUsedText; if (lastUsed.isValid()) { const QDateTime now = QDateTime::currentDateTime(); if (lastUsed.daysTo(now) == 0 ) { const int secondsAgo = lastUsed.secsTo(now); if (secondsAgo < (60 * 60 )) { const int minutesAgo = secondsAgo / 60; lastUsedText = i18ncp( "Label for last used time for a network connection used in the last hour, as the number of minutes since usage", "Last used one minute ago", "Last used %1 minutes ago", minutesAgo); } else { const int hoursAgo = secondsAgo / (60 * 60); lastUsedText = i18ncp( "Label for last used time for a network connection used in the last day, as the number of hours since usage", "Last used one hour ago", "Last used %1 hours ago", hoursAgo); } } else if (lastUsed.daysTo(now) == 1) { lastUsedText = i18nc("Label for last used time for a network connection used the previous day", "Last used yesterday"); } else { lastUsedText = i18n("Last used on %1", KGlobal::locale()->formatDate(lastUsed.date(), KLocale::ShortDate)); } } else { lastUsedText = i18nc("Label for last used time for a " "network connection that has never been used", "Never used"); } return lastUsedText; }