From f2c374ff6b046168db18a6818fb1eb44d316a0fd Mon Sep 17 00:00:00 2001 From: manascb1344 Date: Sat, 2 May 2026 15:37:00 +0530 Subject: [PATCH] Sort VPN connections alphabetically Adds case-insensitive alphabetical sorting to the VPN connections list. The connections are now sorted by name when received and before display, making it easier to find specific VPN profiles. Fixes #1947 --- .../src/pages/networking/vpn/mod.rs | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/cosmic-settings/src/pages/networking/vpn/mod.rs b/cosmic-settings/src/pages/networking/vpn/mod.rs index 651022e..d9cf113 100644 --- a/cosmic-settings/src/pages/networking/vpn/mod.rs +++ b/cosmic-settings/src/pages/networking/vpn/mod.rs @@ -428,7 +428,19 @@ impl Page { } } Message::KnownConnections(connections) => { - self.known_connections = connections; + let mut connections: Vec<_> = connections.into_iter().collect(); + connections.sort_by(|a, b| { + let name_a = match &a.1 { + ConnectionSettings::Vpn(s) => s.id.as_str(), + ConnectionSettings::Wireguard { id } => id.as_str(), + }; + let name_b = match &b.1 { + ConnectionSettings::Vpn(s) => s.id.as_str(), + ConnectionSettings::Wireguard { id } => id.as_str(), + }; + name_a.to_lowercase().cmp(&name_b.to_lowercase()) + }); + self.known_connections = connections.into_iter().collect(); } Message::UpdateDevices(devices) => { self.update_devices(devices); @@ -1005,7 +1017,20 @@ fn devices_view() -> Section { widget::text::body(fl!("no-vpn")).into(), ]))); } else { - let known_networks = page.known_connections.iter().fold( + let mut known_connections: Vec<_> = page.known_connections.iter().collect(); + known_connections.sort_by(|a, b| { + let name_a = match a.1 { + ConnectionSettings::Vpn(s) => s.id.as_str(), + ConnectionSettings::Wireguard { id } => id.as_str(), + }; + let name_b = match b.1 { + ConnectionSettings::Vpn(s) => s.id.as_str(), + ConnectionSettings::Wireguard { id } => id.as_str(), + }; + name_a.to_lowercase().cmp(&name_b.to_lowercase()) + }); + + let known_networks = known_connections.into_iter().fold( vpn_connections, |networks, (uuid, connection)| { let id = match connection {