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
This commit is contained in:
manascb1344 2026-05-02 15:37:00 +05:30 committed by Jacob Kauffmann
parent 703a934b09
commit f2c374ff6b

View file

@ -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<crate::pages::Message> {
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 {