import QtQuick import Quickshell.Io Item { id: root signal devicesFound(var devices) property var connectedDevices: [] function deviceListChanged(newList) { if (newList.length !== root.connectedDevices.length) { return true; } for (let i = 0; i < newList.length; i++) { if (newList[i].mac !== root.connectedDevices[i].mac || newList[i].name !== root.connectedDevices[i].name) { return true; } } return false; } Process { id: bluetoothConnectedDevicesProcess command: ["bluetoothctl", "devices", "Connected"] stdout: StdioCollector { onStreamFinished: { if (!this.text) { root.connectedDevices = []; root.devicesFound([]); return; } var devices = this.text.trim().split("\n").map(line => { var parts = line.split(" "); return { mac: parts[1], name: parts.slice(2).join(" ") }; }); if (root.deviceListChanged(devices)) { root.connectedDevices = devices; root.devicesFound(devices); } } } } Timer { interval: 2000 running: true repeat: true onTriggered: bluetoothConnectedDevicesProcess.running = true } Component.onCompleted: bluetoothConnectedDevicesProcess.running = true }