pragma Singleton import Quickshell import Quickshell.Io import QtQuick Singleton { id: root readonly property list networks: [] readonly property AccessPoint active: networks.find(n => n.active) ?? null reloadableId: "network" Process { running: true command: ["nmcli", "m"] stdout: SplitParser { onRead: getNetworks.running = true } } Process { id: getNetworks running: true command: ["sh", "-c", `nmcli -g ACTIVE,SIGNAL,FREQ,SSID d w | jq -cR '[(inputs / ":") | select(.[3] | length >= 4)]'`] stdout: SplitParser { onRead: data => { const networks = JSON.parse(data).map(n => [n[0] === "yes", parseInt(n[1]), parseInt(n[2]), n[3]]); const rNetworks = root.networks; const len = rNetworks.length; for (let i = 0; i < len; i++) { const network = rNetworks[i]; if (!networks.find(n => n[2] === network?.frequency && n[3] === network?.ssid)) rNetworks.splice(i, 1); } for (const network of networks) { const match = rNetworks.find(n => n.frequency === network[2] && n.ssid === network[3]); if (match) { match.active = network[0]; match.strength = network[1]; match.frequency = network[2]; match.ssid = network[3]; } else { rNetworks.push(apComp.createObject(root, { active: network[0], strength: network[1], frequency: network[2], ssid: network[3] })); } } } } } component AccessPoint: QtObject { property string ssid property int strength property int frequency property bool active } Component { id: apComp AccessPoint {} } }