mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-09-12 10:22:12 +02:00
Wifi (Linux): improve performance
This commit is contained in:
@@ -36,6 +36,13 @@ typedef enum {
|
||||
NM_802_11_AP_SEC_KEY_MGMT_EAP_SUITE_B_192 = 0x00002000,
|
||||
} NM80211ApSecurityFlags;
|
||||
|
||||
#define FF_DBUS_ITER_CONTINUE(dbus, iterator) \
|
||||
{ \
|
||||
if(!(dbus).lib->ffdbus_message_iter_next(iterator)) \
|
||||
break; \
|
||||
continue; \
|
||||
}
|
||||
|
||||
static const char* detectWifiWithNm(FFWifiResult* item, FFstrbuf* buffer)
|
||||
{
|
||||
FFDBusData dbus;
|
||||
@@ -72,24 +79,67 @@ static const char* detectWifiWithNm(FFWifiResult* item, FFstrbuf* buffer)
|
||||
if (!item->conn.status.length)
|
||||
ffStrbufSetStatic(&item->conn.status, "connected");
|
||||
|
||||
if (!item->conn.ssid.length)
|
||||
ffDBusGetPropertyString(&dbus, "org.freedesktop.NetworkManager", apPath.chars, "org.freedesktop.NetworkManager.AccessPoint", "Ssid", &item->conn.ssid);
|
||||
DBusMessage* reply = ffDBusGetAllProperties(&dbus, "org.freedesktop.NetworkManager", apPath.chars, "org.freedesktop.NetworkManager.AccessPoint");
|
||||
if(reply == NULL)
|
||||
return "Failed to get access point properties";
|
||||
|
||||
if (!item->conn.bssid.length)
|
||||
ffDBusGetPropertyString(&dbus, "org.freedesktop.NetworkManager", apPath.chars, "org.freedesktop.NetworkManager.AccessPoint", "HwAddress", &item->conn.bssid);
|
||||
|
||||
if (item->conn.signalQuality != item->conn.signalQuality)
|
||||
DBusMessageIter rootIterator;
|
||||
if(!dbus.lib->ffdbus_message_iter_init(reply, &rootIterator) &&
|
||||
dbus.lib->ffdbus_message_iter_get_arg_type(&rootIterator) != DBUS_TYPE_ARRAY)
|
||||
{
|
||||
uint32_t strengthPercent;
|
||||
if (ffDBusGetPropertyUint(&dbus, "org.freedesktop.NetworkManager", apPath.chars, "org.freedesktop.NetworkManager.AccessPoint", "Strength", &strengthPercent))
|
||||
item->conn.signalQuality = strengthPercent;
|
||||
dbus.lib->ffdbus_message_unref(reply);
|
||||
return "Invalid type of access point properties";
|
||||
}
|
||||
|
||||
DBusMessageIter arrayIterator;
|
||||
dbus.lib->ffdbus_message_iter_recurse(&rootIterator, &arrayIterator);
|
||||
|
||||
NM80211ApFlags flags;
|
||||
NM80211ApSecurityFlags wpaFlags, rsnFlags;
|
||||
if (ffDBusGetPropertyUint(&dbus, "org.freedesktop.NetworkManager", apPath.chars, "org.freedesktop.NetworkManager.AccessPoint", "Flags", &flags) &&
|
||||
ffDBusGetPropertyUint(&dbus, "org.freedesktop.NetworkManager", apPath.chars, "org.freedesktop.NetworkManager.AccessPoint", "WpaFlags", &wpaFlags) &&
|
||||
ffDBusGetPropertyUint(&dbus, "org.freedesktop.NetworkManager", apPath.chars , "org.freedesktop.NetworkManager.AccessPoint", "RsnFlags", &rsnFlags))
|
||||
int flagCount = 0;
|
||||
|
||||
while(true)
|
||||
{
|
||||
if(dbus.lib->ffdbus_message_iter_get_arg_type(&arrayIterator) != DBUS_TYPE_DICT_ENTRY)
|
||||
FF_DBUS_ITER_CONTINUE(dbus, &arrayIterator)
|
||||
|
||||
DBusMessageIter dictIterator;
|
||||
dbus.lib->ffdbus_message_iter_recurse(&arrayIterator, &dictIterator);
|
||||
|
||||
const char* key;
|
||||
dbus.lib->ffdbus_message_iter_get_basic(&dictIterator, &key);
|
||||
|
||||
dbus.lib->ffdbus_message_iter_next(&dictIterator);
|
||||
|
||||
if (ffStrEquals(key, "Ssid"))
|
||||
{
|
||||
if (!item->conn.ssid.length)
|
||||
ffDBusGetString(&dbus, &dictIterator, &item->conn.ssid);
|
||||
}
|
||||
else if (ffStrEquals(key, "HwAddress"))
|
||||
{
|
||||
if (!item->conn.bssid.length)
|
||||
ffDBusGetString(&dbus, &dictIterator, &item->conn.bssid);
|
||||
}
|
||||
else if (ffStrEquals(key, "Strength"))
|
||||
{
|
||||
if (item->conn.signalQuality != item->conn.signalQuality)
|
||||
{
|
||||
uint32_t strengthPercent;
|
||||
if (ffDBusGetUint(&dbus, &dictIterator, &strengthPercent))
|
||||
item->conn.signalQuality = strengthPercent;
|
||||
}
|
||||
}
|
||||
else if ((ffStrEquals(key, "Flags") && ffDBusGetUint(&dbus, &dictIterator, &flags)) ||
|
||||
(ffStrEquals(key, "WpaFlags") && ffDBusGetUint(&dbus, &dictIterator, &wpaFlags)) ||
|
||||
(ffStrEquals(key, "RsnFlags") && ffDBusGetUint(&dbus, &dictIterator, &rsnFlags))
|
||||
)
|
||||
++flagCount;
|
||||
|
||||
FF_DBUS_ITER_CONTINUE(dbus, &arrayIterator)
|
||||
}
|
||||
|
||||
if (flagCount == 3)
|
||||
{
|
||||
if ((flags & NM_802_11_AP_FLAGS_PRIVACY) && (wpaFlags == NM_802_11_AP_SEC_NONE)
|
||||
&& (rsnFlags == NM_802_11_AP_SEC_NONE))
|
||||
|
||||
Reference in New Issue
Block a user