ben used steal, it was super effective
This commit is contained in:
parent
35d2addd70
commit
37497ddb10
1 changed files with 81 additions and 0 deletions
81
services/NetworkService.qml
Normal file
81
services/NetworkService.qml
Normal file
|
|
@ -0,0 +1,81 @@
|
||||||
|
pragma Singleton
|
||||||
|
|
||||||
|
import Quickshell
|
||||||
|
import Quickshell.Io
|
||||||
|
import QtQuick
|
||||||
|
|
||||||
|
Singleton {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
readonly property list<AccessPoint> 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: ["nmcli", "-g", "ACTIVE,SIGNAL,FREQ,SSID,BSSID", "d", "w"]
|
||||||
|
environment: ({
|
||||||
|
LANG: "C",
|
||||||
|
LC_ALL: "C"
|
||||||
|
})
|
||||||
|
stdout: StdioCollector {
|
||||||
|
onStreamFinished: {
|
||||||
|
const PLACEHOLDER = "STRINGWHICHHOPEFULLYWONTBEUSED";
|
||||||
|
const rep = new RegExp("\\\\:", "g");
|
||||||
|
const rep2 = new RegExp(PLACEHOLDER, "g");
|
||||||
|
|
||||||
|
const networks = text.trim().split("\n").map(n => {
|
||||||
|
const net = n.replace(rep, PLACEHOLDER).split(":");
|
||||||
|
return {
|
||||||
|
active: net[0] === "yes",
|
||||||
|
strength: parseInt(net[1]),
|
||||||
|
frequency: parseInt(net[2]),
|
||||||
|
ssid: net[3],
|
||||||
|
bssid: net[4]?.replace(rep2, ":") ?? ""
|
||||||
|
};
|
||||||
|
});
|
||||||
|
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)
|
||||||
|
rNetworks.splice(rNetworks.indexOf(network), 1).forEach(n => n.destroy());
|
||||||
|
|
||||||
|
for (const network of networks) {
|
||||||
|
const match = rNetworks.find(n => n.frequency === network.frequency && n.ssid === network.ssid && n.bssid === network.bssid);
|
||||||
|
if (match) {
|
||||||
|
match.lastIpcObject = network;
|
||||||
|
} else {
|
||||||
|
rNetworks.push(apComp.createObject(root, {
|
||||||
|
lastIpcObject: network
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
component AccessPoint: QtObject {
|
||||||
|
required property var lastIpcObject
|
||||||
|
readonly property string ssid: lastIpcObject.ssid
|
||||||
|
readonly property string bssid: lastIpcObject.bssid
|
||||||
|
readonly property int strength: lastIpcObject.strength
|
||||||
|
readonly property int frequency: lastIpcObject.frequency
|
||||||
|
readonly property bool active: lastIpcObject.active
|
||||||
|
}
|
||||||
|
|
||||||
|
Component {
|
||||||
|
id: apComp
|
||||||
|
|
||||||
|
AccessPoint {}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue