diff options
| -rw-r--r-- | services/Nmcli.qml | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/services/Nmcli.qml b/services/Nmcli.qml index 36bd3e6..812387f 100644 --- a/services/Nmcli.qml +++ b/services/Nmcli.qml @@ -751,17 +751,25 @@ Singleton { const networks = deduplicateNetworks(allNetworks); const rNetworks = root.networks; - const destroyed = rNetworks.filter(rn => !networks.find(n => n.frequency === rn.frequency && n.ssid === rn.ssid && n.bssid === rn.bssid)); - for (const network of destroyed) { - const index = rNetworks.indexOf(network); - if (index >= 0) { - rNetworks.splice(index, 1); - network.destroy(); + const newMap = new Map(); + for (const n of networks) + newMap.set(`${n.frequency}:${n.ssid}:${n.bssid}`, n); + + for (let i = rNetworks.length - 1; i >= 0; i--) { + const rn = rNetworks[i]; + const key = `${rn.frequency}:${rn.ssid}:${rn.bssid}`; + if (!newMap.has(key)) { + rNetworks.splice(i, 1); + rn.destroy(); } } - for (const network of networks) { - const match = rNetworks.find(n => n.frequency === network.frequency && n.ssid === network.ssid && n.bssid === network.bssid); + const existingMap = new Map(); + for (const rn of rNetworks) + existingMap.set(`${rn.frequency}:${rn.ssid}:${rn.bssid}`, rn); + + for (const [key, network] of newMap) { + const match = existingMap.get(key); if (match) { match.lastIpcObject = network; } else { |