|
|
|
@ -77,13 +77,33 @@ void WifiManager::refreshNetworks() { |
|
|
|
|
seen_networks.clear(); |
|
|
|
|
seen_ssids.clear(); |
|
|
|
|
ipv4_address = get_ipv4_address(); |
|
|
|
|
for (Network &network : get_networks()) { |
|
|
|
|
if (seen_ssids.count(network.ssid)) { |
|
|
|
|
|
|
|
|
|
QDBusInterface nm(NM_DBUS_SERVICE, adapter, NM_DBUS_INTERFACE_DEVICE_WIRELESS, bus); |
|
|
|
|
nm.setTimeout(DBUS_TIMEOUT); |
|
|
|
|
|
|
|
|
|
const QDBusReply<QList<QDBusObjectPath>> &response = nm.call("GetAllAccessPoints"); |
|
|
|
|
for (const QDBusObjectPath &path : response.value()) { |
|
|
|
|
QByteArray ssid = get_property(path.path(), "Ssid"); |
|
|
|
|
if (ssid.isEmpty() || seen_ssids.contains(ssid)) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
seen_ssids.push_back(network.ssid); |
|
|
|
|
unsigned int strength = get_ap_strength(path.path()); |
|
|
|
|
SecurityType security = getSecurityType(path.path()); |
|
|
|
|
ConnectedType ctype; |
|
|
|
|
if (path.path() != activeAp) { |
|
|
|
|
ctype = ConnectedType::DISCONNECTED; |
|
|
|
|
} else { |
|
|
|
|
if (ssid == connecting_to_network) { |
|
|
|
|
ctype = ConnectedType::CONNECTING; |
|
|
|
|
} else { |
|
|
|
|
ctype = ConnectedType::CONNECTED; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
Network network = {path.path(), ssid, strength, ctype, security}; |
|
|
|
|
seen_ssids.push_back(ssid); |
|
|
|
|
seen_networks.push_back(network); |
|
|
|
|
} |
|
|
|
|
std::sort(seen_networks.begin(), seen_networks.end(), compare_by_strength); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
QString WifiManager::get_ipv4_address() { |
|
|
|
@ -120,45 +140,6 @@ QString WifiManager::get_ipv4_address() { |
|
|
|
|
return ""; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
QList<Network> WifiManager::get_networks() { |
|
|
|
|
QList<Network> r; |
|
|
|
|
QDBusInterface nm(NM_DBUS_SERVICE, adapter, NM_DBUS_INTERFACE_DEVICE_WIRELESS, bus); |
|
|
|
|
nm.setTimeout(DBUS_TIMEOUT); |
|
|
|
|
|
|
|
|
|
QDBusMessage response = nm.call("GetAllAccessPoints"); |
|
|
|
|
QVariant first = response.arguments().at(0); |
|
|
|
|
|
|
|
|
|
const QDBusArgument &args = first.value<QDBusArgument>(); |
|
|
|
|
args.beginArray(); |
|
|
|
|
while (!args.atEnd()) { |
|
|
|
|
QDBusObjectPath path; |
|
|
|
|
args >> path; |
|
|
|
|
|
|
|
|
|
QByteArray ssid = get_property(path.path(), "Ssid"); |
|
|
|
|
if (ssid.isEmpty()) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
unsigned int strength = get_ap_strength(path.path()); |
|
|
|
|
SecurityType security = getSecurityType(path.path()); |
|
|
|
|
ConnectedType ctype; |
|
|
|
|
if (path.path() != activeAp) { |
|
|
|
|
ctype = ConnectedType::DISCONNECTED; |
|
|
|
|
} else { |
|
|
|
|
if (ssid == connecting_to_network) { |
|
|
|
|
ctype = ConnectedType::CONNECTING; |
|
|
|
|
} else { |
|
|
|
|
ctype = ConnectedType::CONNECTED; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
Network network = {path.path(), ssid, strength, ctype, security}; |
|
|
|
|
r.push_back(network); |
|
|
|
|
} |
|
|
|
|
args.endArray(); |
|
|
|
|
|
|
|
|
|
std::sort(r.begin(), r.end(), compare_by_strength); |
|
|
|
|
return r; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
SecurityType WifiManager::getSecurityType(const QString &path) { |
|
|
|
|
int sflag = get_property(path, "Flags").toInt(); |
|
|
|
|
int wpaflag = get_property(path, "WpaFlags").toInt(); |
|
|
|
|