Skip to content

Commit 28c691b

Browse files
authored
Merge pull request #538 from peterdk/feature/wifi-link-ssid
Show SSID for Wifi connections
2 parents ef85f30 + 11f8048 commit 28c691b

File tree

4 files changed

+48
-6
lines changed

4 files changed

+48
-6
lines changed

data/resources/ui/pages/network.ui

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,15 @@
8585
<property name="title" translatable="yes">Hardware Address</property>
8686
</object>
8787
</child>
88+
<child>
89+
<object class="AdwActionRow" id="network_name">
90+
<style>
91+
<class name="property"/>
92+
</style>
93+
<property name="subtitle-selectable">true</property>
94+
<property name="title" translatable="yes">Network Name</property>
95+
</object>
96+
</child>
8897
<child>
8998
<object class="AdwActionRow" id="link">
9099
<style>

src/ui/pages/network.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ mod imp {
4646
#[template_child]
4747
pub hw_address: TemplateChild<adw::ActionRow>,
4848
#[template_child]
49+
pub network_name: TemplateChild<adw::ActionRow>,
50+
#[template_child]
4951
pub link: TemplateChild<adw::ActionRow>,
5052
#[template_child]
5153
pub link_speed: TemplateChild<adw::ActionRow>,
@@ -115,6 +117,7 @@ mod imp {
115117
driver: Default::default(),
116118
interface: Default::default(),
117119
hw_address: Default::default(),
120+
network_name: Default::default(),
118121
link: Default::default(),
119122
link_speed: Default::default(),
120123
uses_progress_bar: Cell::new(true),
@@ -274,6 +277,17 @@ impl ResNetwork {
274277
imp.hw_address.set_subtitle(&hw_address);
275278
}
276279

280+
if let Ok(wifi_link) = &wifi_link {
281+
imp.network_name.set_visible(true);
282+
if let Some(ssid) = &wifi_link.current.ssid {
283+
imp.network_name.set_subtitle(ssid);
284+
} else {
285+
imp.network_name.set_subtitle(&i18n("N/A"));
286+
}
287+
} else {
288+
imp.network_name.set_visible(false);
289+
}
290+
277291
imp.link.set_subtitle(&wifi_link.as_ref().map_or_else(
278292
|_| i18n("N/A"),
279293
|network_link_data| network_link_data.to_string(),
@@ -394,6 +408,18 @@ impl ResNetwork {
394408

395409
(0.0, i18n("N/A"))
396410
};
411+
412+
if let Ok(wifi_link) = &wifi_link {
413+
imp.network_name.set_visible(true);
414+
if let Some(ssid) = &wifi_link.current.ssid {
415+
imp.network_name.set_subtitle(ssid);
416+
} else {
417+
imp.network_name.set_subtitle(&i18n("N/A"));
418+
}
419+
} else {
420+
imp.network_name.set_visible(false);
421+
}
422+
397423
imp.link.set_subtitle(&wifi_link.as_ref().map_or_else(
398424
|_| i18n("N/A"),
399425
|network_link_data| network_link_data.to_string(),

src/utils/link/mod.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,12 @@ pub struct LinkData<T> {
3030
impl<T> Display for LinkData<T>
3131
where
3232
T: Display,
33-
T: Copy,
3433
T: PartialEq,
3534
{
3635
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
3736
let has_different_max = {
38-
if let Ok(max) = self.max {
39-
self.current != max
37+
if let Ok(max) = self.max.as_ref() {
38+
self.current != *max
4039
} else {
4140
false
4241
}

src/utils/link/wifi.rs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,13 @@ static NELI_SOCKET: LazyLock<Result<Mutex<Socket>>> = LazyLock::new(|| {
1818
.map(Mutex::new)
1919
});
2020

21-
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
21+
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
2222
pub struct WifiLinkData {
2323
pub generation: Option<WifiGeneration>,
2424
pub frequency_mhz: u32,
2525
pub rx_bps: usize,
2626
pub tx_bps: usize,
27+
pub ssid: Option<String>,
2728
}
2829
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
2930
pub enum WifiGeneration {
@@ -79,7 +80,6 @@ impl LinkData<WifiLinkData> {
7980
if interface.interface_type != InterfaceType::Wlan {
8081
bail!("Wifi interface type is required for wifi generation detection");
8182
}
82-
8383
let name = interface
8484
.interface_name
8585
.to_str()
@@ -104,6 +104,10 @@ impl LinkData<WifiLinkData> {
104104
if let Some(wifi_interface) = wifi_interface {
105105
let wifi_interface_name =
106106
String::from_utf8_lossy(wifi_interface.name.as_ref().unwrap());
107+
let ssid = wifi_interface
108+
.ssid
109+
.as_ref()
110+
.map(|s| String::from_utf8_lossy(s).to_string());
107111
trace!("Found interface '{wifi_interface_name}': {interface:?}");
108112
let index = wifi_interface
109113
.index
@@ -122,6 +126,7 @@ impl LinkData<WifiLinkData> {
122126
rx_bps: rx,
123127
tx_bps: tx,
124128
frequency_mhz: wifi_interface.frequency.unwrap_or(0),
129+
ssid,
125130
},
126131
max: Err(anyhow!("No max yet supported")),
127132
});
@@ -165,7 +170,7 @@ impl Display for WifiLinkData {
165170
} else {
166171
i18n("N/A")
167172
},
168-
self.frequency_display()
173+
self.frequency_display(),
169174
)
170175
}
171176
}
@@ -297,6 +302,7 @@ mod test {
297302
frequency_mhz: step,
298303
rx_bps: 0,
299304
tx_bps: 0,
305+
ssid: None,
300306
};
301307
let result = input.frequency_display();
302308
let expected = map[mhz_range];
@@ -320,6 +326,7 @@ mod test {
320326
frequency_mhz: *mhz,
321327
rx_bps: 0,
322328
tx_bps: 0,
329+
ssid: None,
323330
};
324331
let result = input.frequency_display();
325332
let expected = map[mhz];
@@ -360,6 +367,7 @@ mod test {
360367
frequency_mhz: 0,
361368
rx_bps: receive,
362369
tx_bps: send,
370+
ssid: None,
363371
};
364372
let result = input.link_speed_display();
365373
pretty_assertions::assert_eq!(*expected, result);

0 commit comments

Comments
 (0)