diff options
-rw-r--r-- | clients/cli/devices.c | 11 | ||||
-rw-r--r-- | clients/tui/nmt-connect-connection-list.c | 31 | ||||
-rw-r--r-- | libnm-core/nm-utils.c | 60 | ||||
-rw-r--r-- | libnm-core/nm-utils.h | 2 | ||||
-rw-r--r-- | libnm/libnm.ver | 1 |
5 files changed, 65 insertions, 40 deletions
diff --git a/clients/cli/devices.c b/clients/cli/devices.c index cea40b924b..5bf38bb673 100644 --- a/clients/cli/devices.c +++ b/clients/cli/devices.c @@ -489,11 +489,6 @@ fill_output_access_point (gpointer data, gpointer user_data) *bitrate_str, *strength_str, *wpa_flags_str, *rsn_flags_str; GString *security_str; char *ap_name; - const char *sig_level_0 = "____"; - const char *sig_level_1 = "▂___"; - const char *sig_level_2 = "▂▄__"; - const char *sig_level_3 = "▂▄▆_"; - const char *sig_level_4 = "▂▄▆█"; const char *sig_bars; if (info->active_bssid) { @@ -528,11 +523,7 @@ fill_output_access_point (gpointer data, gpointer user_data) strength_str = g_strdup_printf ("%u", strength); wpa_flags_str = ap_wpa_rsn_flags_to_string (wpa_flags); rsn_flags_str = ap_wpa_rsn_flags_to_string (rsn_flags); - sig_bars = strength > 80 ? sig_level_4 : - strength > 55 ? sig_level_3 : - strength > 30 ? sig_level_2 : - strength > 5 ? sig_level_1 : - sig_level_0; + sig_bars = nm_utils_wifi_strength_bars (strength); security_str = g_string_new (NULL); diff --git a/clients/tui/nmt-connect-connection-list.c b/clients/tui/nmt-connect-connection-list.c index 98e46ba14f..a596364533 100644 --- a/clients/tui/nmt-connect-connection-list.c +++ b/clients/tui/nmt-connect-connection-list.c @@ -61,8 +61,6 @@ typedef struct { GSList *nmt_devices; } NmtConnectConnectionListPrivate; -static const char *strength_full, *strength_high, *strength_med, *strength_low, *strength_none; - /** * nmt_connect_connection_list_new: * @@ -527,16 +525,7 @@ nmt_connect_connection_list_rebuild (NmtConnectConnectionList *list) if (nmtconn->ap) { guint8 strength = nm_access_point_get_strength (nmtconn->ap); - if (strength > 80) - strength_col = strength_full; - else if (strength > 55) - strength_col = strength_high; - else if (strength > 30) - strength_col = strength_med; - else if (strength > 5) - strength_col = strength_low; - else - strength_col = strength_none; + strength_col = nm_utils_wifi_strength_bars (strength); } else strength_col = NULL; @@ -608,30 +597,12 @@ static void nmt_connect_connection_list_class_init (NmtConnectConnectionListClass *list_class) { GObjectClass *object_class = G_OBJECT_CLASS (list_class); - char *tmp; g_type_class_add_private (list_class, sizeof (NmtConnectConnectionListPrivate)); /* virtual methods */ object_class->constructed = nmt_connect_connection_list_constructed; object_class->finalize = nmt_connect_connection_list_finalize; - - /* globals */ - tmp = nmt_newt_locale_from_utf8 ("\342\226\202\342\226\204\342\226\206\342\226\210"); - if (*tmp) { - strength_full = /* ▂▄▆█ */ "\342\226\202\342\226\204\342\226\206\342\226\210"; - strength_high = /* ▂▄▆_ */ "\342\226\202\342\226\204\342\226\206_"; - strength_med = /* ▂▄__ */ "\342\226\202\342\226\204__"; - strength_low = /* ▂___ */ "\342\226\202___"; - strength_none = /* ____ */ "____"; - } else { - strength_full = "****"; - strength_high = "*** "; - strength_med = "** "; - strength_low = "* "; - strength_none = " "; - } - g_free (tmp); } /** diff --git a/libnm-core/nm-utils.c b/libnm-core/nm-utils.c index 617b0b4df8..7bc74557a7 100644 --- a/libnm-core/nm-utils.c +++ b/libnm-core/nm-utils.c @@ -2101,6 +2101,66 @@ nm_utils_wifi_is_channel_valid (guint32 channel, const char *band) } /** + * nm_utils_wifi_strength_bars: + * @strength: the access point strength, from 0 to 100 + * + * Converts @strength into a 4-character-wide graphical representation of + * strength suitable for printing to stdout. If the current locale and terminal + * support it, this will use unicode graphics characters to represent + * "bars". Otherwise it will use 0 to 4 asterisks. + * + * Returns: the graphical representation of the access point strength + */ +const char * +nm_utils_wifi_strength_bars (guint8 strength) +{ + static const char *strength_full, *strength_high, *strength_med, *strength_low, *strength_none; + + if (G_UNLIKELY (strength_full == NULL)) { + gboolean can_show_graphics = TRUE; + char *locale_str; + + if (!g_get_charset (NULL)) { + /* Non-UTF-8 locale */ + locale_str = g_locale_from_utf8 ("\342\226\202\342\226\204\342\226\206\342\226\210", -1, NULL, NULL, NULL); + if (locale_str) + g_free (locale_str); + else + can_show_graphics = FALSE; + } + + /* The linux console font doesn't have these characters */ + if (g_strcmp0 (g_getenv ("TERM"), "linux") == 0) + can_show_graphics = FALSE; + + if (can_show_graphics) { + strength_full = /* ▂▄▆█ */ "\342\226\202\342\226\204\342\226\206\342\226\210"; + strength_high = /* ▂▄▆_ */ "\342\226\202\342\226\204\342\226\206_"; + strength_med = /* ▂▄__ */ "\342\226\202\342\226\204__"; + strength_low = /* ▂___ */ "\342\226\202___"; + strength_none = /* ____ */ "____"; + } else { + strength_full = "****"; + strength_high = "*** "; + strength_med = "** "; + strength_low = "* "; + strength_none = " "; + } + } + + if (strength > 80) + return strength_full; + else if (strength > 55) + return strength_high; + else if (strength > 30) + return strength_med; + else if (strength > 5) + return strength_low; + else + return strength_none; +} + +/** * nm_utils_hwaddr_len: * @type: the type of address; either %ARPHRD_ETHER or %ARPHRD_INFINIBAND * diff --git a/libnm-core/nm-utils.h b/libnm-core/nm-utils.h index 3bb4b9ff49..7402cd921d 100644 --- a/libnm-core/nm-utils.h +++ b/libnm-core/nm-utils.h @@ -131,6 +131,8 @@ guint32 nm_utils_wifi_channel_to_freq (guint32 channel, const char *band); guint32 nm_utils_wifi_find_next_channel (guint32 channel, int direction, char *band); gboolean nm_utils_wifi_is_channel_valid (guint32 channel, const char *band); +const char *nm_utils_wifi_strength_bars (guint8 strength); + /** * NM_UTILS_HWADDR_LEN_MAX: * diff --git a/libnm/libnm.ver b/libnm/libnm.ver index c9329cc51a..fa4c491c3f 100644 --- a/libnm/libnm.ver +++ b/libnm/libnm.ver @@ -908,6 +908,7 @@ global: nm_utils_wifi_find_next_channel; nm_utils_wifi_freq_to_channel; nm_utils_wifi_is_channel_valid; + nm_utils_wifi_strength_bars; nm_utils_wpa_psk_valid; nm_vlan_flags_get_type; nm_vlan_priority_map_get_type; |