11use crate :: events:: { AppEvents , NmEvents } ;
22use futures:: { SinkExt , StreamExt , channel:: mpsc, select} ;
3- use networkmanager:: service:: NetworkManagerService ;
3+ use networkmanager:: { interfaces :: wireless :: NMState , service:: NetworkManagerService } ;
44
55pub async fn sync_network_status ( mut tx : mpsc:: Sender < AppEvents > ) {
66 let network_manager = match NetworkManagerService :: new ( ) . await {
@@ -20,6 +20,25 @@ pub async fn sync_network_status(mut tx: mpsc::Sender<AppEvents>) {
2020 }
2121}
2222
23+ pub async fn stream_network_device_events ( tx : mpsc:: Sender < AppEvents > ) {
24+ let network_manager = match NetworkManagerService :: new ( ) . await {
25+ Ok ( nm) => nm,
26+ Err ( e) => {
27+ eprintln ! ( "Failed to create NetworkManagerService: {}" , e) ;
28+ return ;
29+ }
30+ } ;
31+ let wireless_status_receiver = network_manager. stream_device_events ( ) . await ;
32+ while let Ok ( nm_state) = wireless_status_receiver. recv ( ) {
33+ match nm_state {
34+ NMState :: ConnectedGlobal => {
35+ let _ = sync_connected_network ( tx. clone ( ) ) . await ;
36+ }
37+ _ => { }
38+ }
39+ }
40+ }
41+
2342pub async fn sync_network_strength ( mut tx : mpsc:: Sender < AppEvents > ) {
2443 let network_manager = match NetworkManagerService :: new ( ) . await {
2544 Ok ( nm) => nm,
@@ -62,7 +81,7 @@ pub async fn sync_connected_network(mut tx: mpsc::Sender<AppEvents>) {
6281}
6382
6483pub async fn handle_wireless_toggle ( mut nm_rx : mpsc:: Receiver < NmEvents > ) {
65- let network_manager = match NetworkManagerService :: new ( ) . await {
84+ let network_manager = match NetworkManagerService :: new ( ) . await {
6685 Ok ( nm) => nm,
6786 Err ( e) => {
6887 eprintln ! ( "Failed to create NetworkManagerService: {}" , e) ;
0 commit comments