From cd102d894e2538ebdf265e23e10cc4f60dba418b Mon Sep 17 00:00:00 2001 From: Kainoa Kanter Date: Fri, 22 Aug 2025 12:34:08 -0700 Subject: [PATCH] feat: show ethernet icon if ethernet is connected Closes https://github.com/noctalia-dev/noctalia-shell/issues/115 --- Modules/Bar/WiFi.qml | 3 ++- Services/NetworkService.qml | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/Modules/Bar/WiFi.qml b/Modules/Bar/WiFi.qml index 6b9b921..da749ff 100644 --- a/Modules/Bar/WiFi.qml +++ b/Modules/Bar/WiFi.qml @@ -21,6 +21,7 @@ NIconButton { colorBorderHover: Color.transparent icon: { + if (NetworkService.ethernet) return "lan" let connected = false let signalStrength = 0 for (const net in NetworkService.networks) { @@ -30,7 +31,7 @@ NIconButton { break } } - return connected ? NetworkService.signalIcon(signalStrength) : "wifi" + return connected ? NetworkService.signalIcon(signalStrength) : "wifi_find" } tooltipText: "WiFi Networks" onClicked: { diff --git a/Services/NetworkService.qml b/Services/NetworkService.qml index 65378f0..43e31e7 100644 --- a/Services/NetworkService.qml +++ b/Services/NetworkService.qml @@ -16,6 +16,7 @@ Singleton { property string detectedInterface: "" property string lastConnectedNetwork: "" property bool isLoading: false + property bool ethernet: false Component.onCompleted: { Logger.log("Network", "Service started") @@ -43,6 +44,7 @@ Singleton { function refreshNetworks() { isLoading = true + checkEthernet.running = true existingNetwork.running = true } @@ -415,6 +417,24 @@ Singleton { } } } + + property Process checkEthernet: Process { + id: checkEthernet + running: false + command: ["nmcli", "-t", "-f", "DEVICE,TYPE,STATE", "device"] + stdout: StdioCollector { + onStreamFinished: { + var lines = text.split("\n") + for (var i = 0; i < lines.length; ++i) { + var parts = lines[i].split(":") + if (parts[1] === "ethernet" && parts[2] === "connected") { + root.ethernet = true + break + } + } + } + } + } property Process addConnectionProcess: Process { id: addConnectionProcess