@@ -145,6 +145,12 @@ impl super::NetworkBackend for IwdDbus<'_> {
145145 /// List known (provisioned) SSIDs.
146146 async fn known_connections ( & self ) -> anyhow:: Result < Vec < KnownConnection > > {
147147 let nets = self . reachable_networks ( ) . await ?;
148+ let stations: HashMap < _ , _ > = self
149+ . stations ( )
150+ . await ?
151+ . into_iter ( )
152+ . map ( |s| ( s. inner ( ) . path ( ) . clone ( ) , s) )
153+ . collect ( ) ;
148154 let mut networks = HashMap :: < String , AccessPointData > :: new ( ) ;
149155 for ( n, signal_strength) in nets {
150156 if n. known_network ( ) . await . is_err ( ) {
@@ -153,16 +159,41 @@ impl super::NetworkBackend for IwdDbus<'_> {
153159 let ssid = n. name ( ) . await ?;
154160 let path = n. inner ( ) . path ( ) . clone ( ) . into ( ) ;
155161 let device_path = n. device ( ) . await ?. clone ( ) ;
162+
163+ let ( state, working) = if let Some ( station) = stations. get ( & device_path) {
164+ let station_state = station. state ( ) . await . unwrap_or_default ( ) ;
165+ let connected_network = station. connected_network ( ) . await . ok ( ) ;
166+
167+ let is_connected = connected_network
168+ . map ( |net_path| net_path == path)
169+ . unwrap_or ( false ) ;
170+
171+ let state = if is_connected {
172+ match station_state. as_str ( ) {
173+ "connected" => DeviceState :: Activated ,
174+ "connecting" => DeviceState :: Config ,
175+ _ => DeviceState :: Unknown ,
176+ }
177+ } else {
178+ DeviceState :: Disconnected
179+ } ;
180+
181+ let working = is_connected && station_state == "connected" ;
182+ ( state, working)
183+ } else {
184+ ( DeviceState :: Unknown , false )
185+ } ;
186+
156187 let access_point = AccessPointData {
157188 ssid : ssid. clone ( ) ,
158189 path,
159190 device_path,
160191 strength : map_iwd_rssi_to_percent ( signal_strength) ,
161192 max_bitrate : 0 ,
162193 frequency : 0 ,
163- state : DeviceState :: Unknown , // TODO:
194+ state,
164195 public : n. type_ ( ) . await ? == "open" ,
165- working : false , // TODO:
196+ working,
166197 } ;
167198
168199 // maybe IWD will provide frequency and bitrate in the future
0 commit comments