From 169450aa2e9d9058686aab0f7cf54b728ecd6efa Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Tue, 29 Apr 2025 18:47:45 +1000 Subject: feat: bar bluetooth devices --- services/Bluetooth.qml | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++ services/Hyprland.qml | 4 +-- 2 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 services/Bluetooth.qml (limited to 'services') diff --git a/services/Bluetooth.qml b/services/Bluetooth.qml new file mode 100644 index 0000000..d749879 --- /dev/null +++ b/services/Bluetooth.qml @@ -0,0 +1,70 @@ +pragma Singleton + +import Quickshell +import Quickshell.Io +import QtQuick + +Singleton { + id: root + + property bool powered + property bool discovering + readonly property list devices: [] + readonly property list connected: devices.filter(d => d.connected) + + Process { + running: true + command: ["bluetoothctl"] + stdout: SplitParser { + onRead: getInfo.running = true + } + } + + Process { + id: getInfo + running: true + command: ["sh", "-c", "bluetoothctl show | paste -s"] + stdout: SplitParser { + onRead: data => { + root.powered = data.includes("Powered: yes"); + root.discovering = data.includes("Discovering: yes"); + } + } + } + + Process { + id: getDevices + running: true + command: ["fish", "-c", `for a in (bluetoothctl devices | cut -d ' ' -f 2); bluetoothctl info $a | jq -R 'reduce (inputs / ":") as [$key, $value] ({}; .[$key | ltrimstr("\t")] = ($value | ltrimstr(" ")))' | jq -c --arg addr $a '.Address = $addr'; end`] + stdout: SplitParser { + onRead: data => { + const d = JSON.parse(data); + root.devices.push(deviceComp.createObject(root, { + name: d.Name, + alias: d.Alias, + address: d.Address, + icon: d.Icon, + connected: d.Connected === "yes", + paired: d.Paired === "yes", + trusted: d.Trusted === "yes" + })); + } + } + } + + component Device: QtObject { + property string name + property string alias + property string address + property string icon + property bool connected + property bool paired + property bool trusted + } + + Component { + id: deviceComp + + Device {} + } +} diff --git a/services/Hyprland.qml b/services/Hyprland.qml index d786e62..df2f0ba 100644 --- a/services/Hyprland.qml +++ b/services/Hyprland.qml @@ -39,7 +39,7 @@ Singleton { Process { id: getClients - command: ["bash", "-c", "hyprctl -j clients | jq -c"] + command: ["sh", "-c", "hyprctl -j clients | jq -c"] stdout: SplitParser { onRead: data => { const clients = JSON.parse(data); @@ -58,7 +58,7 @@ Singleton { Process { id: getActiveClient - command: ["bash", "-c", "hyprctl -j activewindow | jq -c"] + command: ["sh", "-c", "hyprctl -j activewindow | jq -c"] stdout: SplitParser { onRead: data => { const client = JSON.parse(data); -- cgit v1.2.3-freya