92 lines
2.7 KiB
QML
92 lines
2.7 KiB
QML
pragma Singleton
|
|
import QtQuick
|
|
import Quickshell.Io
|
|
|
|
Item {
|
|
id: root
|
|
|
|
property bool isConnected: false
|
|
property string connectedSsid: ""
|
|
property int signalPercent: 0
|
|
property bool isWifiPowered: true
|
|
property bool hasEthernet: false
|
|
property bool ethernetConnected: false
|
|
property var networks: []
|
|
|
|
function scanWifi() {
|
|
if (!scanProc.running && !actionProc.running) {
|
|
scanProc.running = true
|
|
}
|
|
}
|
|
|
|
function toggleWifiPower() {
|
|
let targetPowered = !isWifiPowered
|
|
isWifiPowered = targetPowered
|
|
if (!targetPowered) {
|
|
networks = []
|
|
if (!ethernetConnected) isConnected = false
|
|
}
|
|
|
|
if (targetPowered) {
|
|
actionProc.command = ["bash", "-c", "nmcli radio wifi on 2>/dev/null &"]
|
|
} else {
|
|
actionProc.command = ["bash", "-c", "nmcli radio wifi off 2>/dev/null &"]
|
|
}
|
|
actionProc.running = true
|
|
}
|
|
|
|
function connectNetwork(targetSsid, password) {
|
|
if (!targetSsid) return;
|
|
if (password && password !== "") {
|
|
actionProc.command = ["bash", "-c", "nmcli dev wifi connect '" + targetSsid + "' password '" + password + "' 2>/dev/null &"]
|
|
} else {
|
|
actionProc.command = ["bash", "-c", "nmcli dev wifi connect '" + targetSsid + "' 2>/dev/null &"]
|
|
}
|
|
actionProc.running = true
|
|
}
|
|
|
|
Process {
|
|
id: actionProc
|
|
onExited: scanTimer.start()
|
|
}
|
|
|
|
Timer {
|
|
id: scanTimer
|
|
interval: 400
|
|
repeat: false
|
|
onTriggered: scanWifi()
|
|
}
|
|
|
|
Process {
|
|
id: scanProc
|
|
command: ["python3", "/home/sho/Documents/themes/quickshell/services/python/network_service.py"]
|
|
stdout: SplitParser {
|
|
onRead: data => {
|
|
try {
|
|
let parsed = JSON.parse(data.trim())
|
|
root.isWifiPowered = parsed.wifiPowered
|
|
root.hasEthernet = parsed.hasEthernet
|
|
root.ethernetConnected = parsed.ethernetConnected
|
|
root.isConnected = parsed.isConnected || parsed.ethernetConnected
|
|
root.connectedSsid = parsed.connectedSsid || ""
|
|
if (parsed.signalPercent > 0) {
|
|
root.signalPercent = parsed.signalPercent
|
|
}
|
|
if (parsed.networks && parsed.networks.length > 0) {
|
|
root.networks = parsed.networks
|
|
}
|
|
} catch (e) {}
|
|
}
|
|
}
|
|
}
|
|
|
|
Timer {
|
|
interval: 3000
|
|
running: true
|
|
repeat: true
|
|
onTriggered: scanWifi()
|
|
}
|
|
|
|
Component.onCompleted: scanWifi()
|
|
}
|