From 2d7cacbefb846f4d7cb7ac4a0519f15c772714e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Zanghelini?= Date: Fri, 10 Oct 2025 00:17:06 -0300 Subject: [PATCH] Add more status in the network icon --- .../quickToggles/NetworkToggle.qml | 2 +- .config/quickshell/ii/services/Network.qml | 58 ++++++++++++++----- 2 files changed, 46 insertions(+), 14 deletions(-) diff --git a/.config/quickshell/ii/modules/sidebarRight/quickToggles/NetworkToggle.qml b/.config/quickshell/ii/modules/sidebarRight/quickToggles/NetworkToggle.qml index bb7d0969c..5fd8e3e8d 100644 --- a/.config/quickshell/ii/modules/sidebarRight/quickToggles/NetworkToggle.qml +++ b/.config/quickshell/ii/modules/sidebarRight/quickToggles/NetworkToggle.qml @@ -10,7 +10,7 @@ import Quickshell.Io import Quickshell.Hyprland QuickToggleButton { - toggled: Network.wifiEnabled + toggled: Network.wifiStatus !== "disabled" buttonIcon: Network.materialSymbol onClicked: Network.toggleWifi() altAction: () => { diff --git a/.config/quickshell/ii/services/Network.qml b/.config/quickshell/ii/services/Network.qml index ebca2a61d..181e76cf4 100644 --- a/.config/quickshell/ii/services/Network.qml +++ b/.config/quickshell/ii/services/Network.qml @@ -16,24 +16,35 @@ Singleton { property bool wifi: true property bool ethernet: false - + property bool wifiEnabled: false property bool wifiScanning: false property bool wifiConnecting: connectProc.running property WifiAccessPoint wifiConnectTarget readonly property list wifiNetworks: [] readonly property WifiAccessPoint active: wifiNetworks.find(n => n.active) ?? null + property string wifiStatus: "disconnected" property string networkName: "" property int networkStrength - property string materialSymbol: ethernet ? "lan" : - wifiEnabled ? ( - Network.networkStrength > 80 ? "signal_wifi_4_bar" : - Network.networkStrength > 60 ? "network_wifi_3_bar" : - Network.networkStrength > 40 ? "network_wifi_2_bar" : - Network.networkStrength > 20 ? "network_wifi_1_bar" : - "signal_wifi_0_bar" - ) : "signal_wifi_off" + property string materialSymbol: root.ethernet + ? "lan" + : root.wifiEnabled + ? ( + Network.networkStrength > 83 ? "signal_wifi_4_bar" : + Network.networkStrength > 67 ? "network_wifi" : + Network.networkStrength > 50 ? "network_wifi_3_bar" : + Network.networkStrength > 33 ? "network_wifi_2_bar" : + Network.networkStrength > 17 ? "network_wifi_1_bar" : + "signal_wifi_0_bar" + ) + : (root.wifiStatus === "connecting") + ? "signal_wifi_statusbar_not_connected" + : (root.wifiStatus === "disconnected") + ? "wifi_find" + : (root.wifiStatus === "disabled") + ? "signal_wifi_off" + : "signal_wifi_bad" // Control function enableWifi(enabled = true): void { @@ -153,7 +164,7 @@ Singleton { Process { id: updateConnectionType property string buffer - command: ["sh", "-c", "nmcli -t -f NAME,TYPE,DEVICE c show --active"] + command: ["sh", "-c", "nmcli -t -f TYPE,STATE d status && nmcli -t -f CONNECTIVITY g"] running: true function startCheck() { buffer = ""; @@ -166,14 +177,35 @@ Singleton { } onExited: (exitCode, exitStatus) => { const lines = updateConnectionType.buffer.trim().split('\n'); + const connectivity = lines.pop() // none, limited, full let hasEthernet = false; let hasWifi = false; + let wifiStatus = "disconnected"; lines.forEach(line => { - if (line.includes("ethernet")) + if (line.includes("ethernet") && line.includes("connected")) hasEthernet = true; - else if (line.includes("wireless")) - hasWifi = true; + else if (line.includes("wifi:")) { + if (line.includes("disconnected")) { + wifiStatus = "disconnected" + } + else if (line.includes("connected")) { + hasWifi = true; + wifiStatus = "connected" + + if (connectivity === "limited") { + hasWifi = false; + wifiStatus = "limited" + } + } + else if (line.includes("connecting")) { + wifiStatus = "connecting" + } + else if (line.includes("unavailable")) { + wifiStatus = "disabled" + } + } }); + root.wifiStatus = wifiStatus; root.ethernet = hasEthernet; root.wifi = hasWifi; }