Sync incoming interface metadata (from nmcli, wifi manager, or API).
(self, interfaces: List[Dict])
| 217 | return None |
| 218 | |
| 219 | def sync_from_interfaces(self, interfaces: List[Dict]): |
| 220 | """Sync incoming interface metadata (from nmcli, wifi manager, or API).""" |
| 221 | selected = self._select_interfaces(interfaces) |
| 222 | timestamp = time.time() |
| 223 | global_enabled = self.is_multi_mode_enabled() |
| 224 | default_iface = self._default_iface |
| 225 | focus_interface = self.get_focus_interface() |
| 226 | |
| 227 | with self._lock: |
| 228 | new_state: Dict[str, Dict] = {} |
| 229 | for iface in selected: |
| 230 | name = iface.get('name') |
| 231 | if not name: |
| 232 | continue |
| 233 | role = 'internal' if name == default_iface else 'external' |
| 234 | base_enabled = self._resolve_enabled_flag(name, global_enabled) |
| 235 | entry = { |
| 236 | 'name': name, |
| 237 | 'role': role, |
| 238 | 'state': iface.get('state', 'UNKNOWN'), |
| 239 | 'connected': bool(iface.get('connected')), |
| 240 | 'connected_ssid': iface.get('connected_ssid'), |
| 241 | 'ip_address': iface.get('ip_address'), |
| 242 | 'cidr': iface.get('cidr'), |
| 243 | 'network_cidr': iface.get('network_cidr'), |
| 244 | 'mac_address': iface.get('mac_address'), |
| 245 | 'scan_enabled': base_enabled, |
| 246 | 'last_refresh': timestamp, |
| 247 | 'reason': None, |
| 248 | 'focus_selected': bool(name and name == focus_interface), |
| 249 | } |
| 250 | |
| 251 | if not global_enabled: |
| 252 | entry['scan_enabled'] = False |
| 253 | entry['reason'] = 'global_disabled' |
| 254 | elif not entry['connected_ssid']: |
| 255 | entry['scan_enabled'] = False |
| 256 | entry['reason'] = 'no_ssid' |
| 257 | elif not entry['connected']: |
| 258 | entry['scan_enabled'] = False |
| 259 | entry['reason'] = 'disconnected' |
| 260 | |
| 261 | new_state[name] = entry |
| 262 | |
| 263 | self.interfaces = new_state |
| 264 | self.last_refresh = timestamp |
| 265 | self._refresh_focus_flags() |
| 266 | |
| 267 | def get_scan_jobs(self) -> List[ScanJob]: |
| 268 | """Return all scan jobs respecting interface limits and enable flags. |
no test coverage detected