From 14d6d01e3b4624977c3df9e0364c094cf13e0c24 Mon Sep 17 00:00:00 2001 From: Lampan-git <22211983+Lampan-git@users.noreply.github.com> Date: Sat, 21 Jun 2025 21:56:21 +0200 Subject: [PATCH 1/2] feat(network): show secure icon in wifi list --- cosmic-applet-network/src/app.rs | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/cosmic-applet-network/src/app.rs b/cosmic-applet-network/src/app.rs index de6c9b2bb..f9ca92926 100644 --- a/cosmic-applet-network/src/app.rs +++ b/cosmic-applet-network/src/app.rs @@ -111,7 +111,26 @@ struct CosmicNetworkApplet { hw_device_to_show: Option, } -fn wifi_icon(strength: u8) -> &'static str { +fn wifi_icon(strength: u8, network_type: NetworkType) -> &'static str { + match network_type { + NetworkType::Open => wifi_icon_open(strength), + _ => wifi_icon_secure(strength), + } +} + +fn wifi_icon_secure(strength: u8) -> &'static str { + if strength < 25 { + "network-wireless-secure-signal-weak-symbolic" + } else if strength < 50 { + "network-wireless-secure-signal-ok-symbolic" + } else if strength < 75 { + "network-wireless-secure-signal-good-symbolic" + } else { + "network-wireless-secure-signal-excellent-symbolic" + } +} + +fn wifi_icon_open(strength: u8) -> &'static str { if strength < 25 { "network-wireless-signal-weak-symbolic" } else if strength < 50 { @@ -171,7 +190,7 @@ impl CosmicNetworkApplet { ( "network-wired-disconnected-symbolic", ActiveConnectionInfo::WiFi { strength, .. }, - ) => wifi_icon(*strength), + ) => wifi_icon(*strength, NetworkType::Open), (_, ActiveConnectionInfo::Wired { .. }) if icon_name != "network-vpn-symbolic" => { @@ -721,7 +740,7 @@ impl cosmic::Application for CosmicNetworkApplet { ipv4.push(text(format!("{}: {}", fl!("ipv4"), addr)).size(12).into()); } let mut btn_content = vec![ - icon::from_name(wifi_icon(*strength)) + icon::from_name(wifi_icon(*strength, NetworkType::Open)) .size(24) .symbolic(true) .into(), @@ -935,7 +954,7 @@ impl cosmic::Application for CosmicNetworkApplet { btn_content.push(ssid.into()); } else { btn_content.push( - icon::from_name(wifi_icon(known.strength)) + icon::from_name(wifi_icon(known.strength, known.network_type)) .size(24) .symbolic(true) .into(), @@ -1129,7 +1148,7 @@ impl cosmic::Application for CosmicNetworkApplet { } let button = menu_button( row![ - icon::from_name(wifi_icon(ap.strength)) + icon::from_name(wifi_icon(ap.strength, ap.network_type)) .size(16) .symbolic(true), text::body(&ap.ssid).align_y(Alignment::Center) From 02761728dbecbea4a76e11f9aad15c36b01cc2d9 Mon Sep 17 00:00:00 2001 From: Lampan-git <22211983+Lampan-git@users.noreply.github.com> Date: Sat, 21 Jun 2025 22:13:38 +0200 Subject: [PATCH 2/2] feat(network): show secure icon in active conns --- cosmic-applet-network/src/app.rs | 14 +++++--- .../src/network_manager/available_wifi.rs | 33 ++++++++++++------- .../src/network_manager/current_networks.rs | 3 ++ 3 files changed, 33 insertions(+), 17 deletions(-) diff --git a/cosmic-applet-network/src/app.rs b/cosmic-applet-network/src/app.rs index f9ca92926..3ced72cc0 100644 --- a/cosmic-applet-network/src/app.rs +++ b/cosmic-applet-network/src/app.rs @@ -190,7 +190,7 @@ impl CosmicNetworkApplet { ( "network-wired-disconnected-symbolic", ActiveConnectionInfo::WiFi { strength, .. }, - ) => wifi_icon(*strength, NetworkType::Open), + ) => wifi_icon(*strength, NetworkType::Open), // Use Open icon for clarity (_, ActiveConnectionInfo::Wired { .. }) if icon_name != "network-vpn-symbolic" => { @@ -729,6 +729,7 @@ impl cosmic::Application for CosmicNetworkApplet { state, strength, hw_address, + network_type, } => { if self.hw_device_to_show.is_some() && hw_address != self.hw_device_to_show.as_ref().unwrap() @@ -740,10 +741,13 @@ impl cosmic::Application for CosmicNetworkApplet { ipv4.push(text(format!("{}: {}", fl!("ipv4"), addr)).size(12).into()); } let mut btn_content = vec![ - icon::from_name(wifi_icon(*strength, NetworkType::Open)) - .size(24) - .symbolic(true) - .into(), + icon::from_name(wifi_icon( + *strength, + network_type.unwrap_or(NetworkType::Open), + )) + .size(24) + .symbolic(true) + .into(), column![text::body(name), Column::with_children(ipv4)] .width(Length::Fill) .into(), diff --git a/cosmic-applet-network/src/network_manager/available_wifi.rs b/cosmic-applet-network/src/network_manager/available_wifi.rs index ac78f3188..e7b6d49ad 100644 --- a/cosmic-applet-network/src/network_manager/available_wifi.rs +++ b/cosmic-applet-network/src/network_manager/available_wifi.rs @@ -47,18 +47,9 @@ pub async fn handle_wireless_device( } }; let proxy: &AccessPointProxy = ≈ - let Ok(flags) = ap.rsn_flags().await else { - continue; - }; - - let network_type = if flags.intersects(ApSecurityFlags::KEY_MGMT_802_1X) { - NetworkType::EAP - } else if flags.intersects(ApSecurityFlags::KEY_MGMTPSK) { - NetworkType::PSK - } else if flags.is_empty() { - NetworkType::Open - } else { - continue; + let network_type = match get_network_type(&ap).await { + Some(value) => value, + None => continue, }; aps.insert( @@ -85,6 +76,24 @@ pub async fn handle_wireless_device( Ok(aps) } +pub async fn get_network_type( + access_point: &cosmic_dbus_networkmanager::access_point::AccessPoint<'_>, +) -> Option { + let Ok(flags) = access_point.rsn_flags().await else { + return None; + }; + let network_type = if flags.intersects(ApSecurityFlags::KEY_MGMT_802_1X) { + NetworkType::EAP + } else if flags.intersects(ApSecurityFlags::KEY_MGMTPSK) { + NetworkType::PSK + } else if flags.is_empty() { + NetworkType::Open + } else { + return None; + }; + Some(network_type) +} + #[derive(Debug, Clone)] pub struct AccessPoint { pub ssid: String, diff --git a/cosmic-applet-network/src/network_manager/current_networks.rs b/cosmic-applet-network/src/network_manager/current_networks.rs index 7c3857a77..043061afb 100644 --- a/cosmic-applet-network/src/network_manager/current_networks.rs +++ b/cosmic-applet-network/src/network_manager/current_networks.rs @@ -6,6 +6,7 @@ use cosmic_dbus_networkmanager::{ }; use std::net::Ipv4Addr; +use super::available_wifi::{get_network_type, NetworkType}; use super::hw_address::HwAddress; pub async fn active_connections( @@ -59,6 +60,7 @@ pub async fn active_connections( .unwrap_or_default(), state, strength: access_point.strength().await.unwrap_or_default(), + network_type: get_network_type(&access_point).await, }); } } @@ -99,6 +101,7 @@ pub enum ActiveConnectionInfo { hw_address: HwAddress, state: ActiveConnectionState, strength: u8, + network_type: Option, }, Vpn { name: String,