fix(wired): display known connections when unplugged

This commit is contained in:
Michael Aaron Murphy 2024-09-20 22:32:20 +02:00
parent ccb0449d1c
commit eb1d5457d4
No known key found for this signature in database
GPG key ID: B2732D4240C9212C
2 changed files with 11 additions and 6 deletions

2
Cargo.lock generated
View file

@ -1646,7 +1646,7 @@ dependencies = [
[[package]] [[package]]
name = "cosmic-settings-subscriptions" name = "cosmic-settings-subscriptions"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/pop-os/cosmic-settings-subscriptions#90df5c4b22c47f0e0213dcf2025519b0312437df" source = "git+https://github.com/pop-os/cosmic-settings-subscriptions#ece1b2475c9eb90e0f2042b743577670e799a010"
dependencies = [ dependencies = [
"cosmic-dbus-networkmanager", "cosmic-dbus-networkmanager",
"futures", "futures",

View file

@ -11,9 +11,10 @@ use cosmic::{
widget::{self, icon}, widget::{self, icon},
Apply, Command, Element, Apply, Command, Element,
}; };
use cosmic_dbus_networkmanager::interface::enums::DeviceState;
use cosmic_settings_page::{self as page, section, Section}; use cosmic_settings_page::{self as page, section, Section};
use cosmic_settings_subscriptions::network_manager::{ use cosmic_settings_subscriptions::network_manager::{
self, current_networks::ActiveConnectionInfo, devices::DeviceState, NetworkManagerState, self, current_networks::ActiveConnectionInfo, NetworkManagerState,
}; };
pub type ConnectionId = Arc<str>; pub type ConnectionId = Arc<str>;
@ -446,13 +447,14 @@ impl Page {
remove_txt: &'a str, remove_txt: &'a str,
settings_txt: &'a str, settings_txt: &'a str,
wired_conns_txt: &'a str, wired_conns_txt: &'a str,
unplugged_txt: &'a str,
device: &'a network_manager::devices::DeviceInfo, device: &'a network_manager::devices::DeviceInfo,
) -> Element<'a, Message> { ) -> Element<'a, Message> {
let has_multiple_connection_profiles = device.available_connections.len() > 1; let has_multiple_connection_profiles = device.known_connections.len() > 1;
let header_txt = format!("{}", wired_conns_txt); let header_txt = format!("{}", wired_conns_txt);
device device
.available_connections .known_connections
.iter() .iter()
.fold( .fold(
widget::settings::section().title(header_txt), widget::settings::section().title(header_txt),
@ -467,6 +469,8 @@ impl Page {
let (connect_txt, connect_msg) = if is_connected { let (connect_txt, connect_msg) = if is_connected {
(connected_txt, None) (connected_txt, None)
} else if device.state == DeviceState::Unavailable {
(unplugged_txt, None)
} else { } else {
( (
connect_txt, connect_txt,
@ -552,6 +556,7 @@ fn devices_view() -> Section<crate::pages::Message> {
connected_txt = fl!("connected"); connected_txt = fl!("connected");
settings_txt = fl!("settings"); settings_txt = fl!("settings");
disconnect_txt = fl!("disconnect"); disconnect_txt = fl!("disconnect");
unplugged_txt = fl!("network-device-state", "unplugged");
}); });
Section::default() Section::default()
@ -570,8 +575,7 @@ fn devices_view() -> Section<crate::pages::Message> {
let active_device = page let active_device = page
.active_device .active_device
.as_ref() .as_ref()
.or_else(|| (nm_state.devices.len() == 1).then(|| nm_state.devices.get(0))?) .or_else(|| (nm_state.devices.len() == 1).then(|| nm_state.devices.get(0))?);
.filter(|device| !matches!(device.state, DeviceState::Unavailable));
view = match active_device { view = match active_device {
Some(device) => view.push(page.device_view( Some(device) => view.push(page.device_view(
@ -583,6 +587,7 @@ fn devices_view() -> Section<crate::pages::Message> {
&section.descriptions[remove_txt], &section.descriptions[remove_txt],
&section.descriptions[settings_txt], &section.descriptions[settings_txt],
&section.descriptions[wired_conns_txt], &section.descriptions[wired_conns_txt],
&section.descriptions[unplugged_txt],
device, device,
)), )),