feat: add refresh button for wifi

This commit is contained in:
JPratama7 2025-08-03 06:33:44 +07:00
parent 4c9a51bf6a
commit d2ea87b46b
No known key found for this signature in database
GPG key ID: CD3EB7D0490C5F4B

View file

@ -34,42 +34,40 @@ Item {
} }
stdout: StdioCollector { stdout: StdioCollector {
onStreamFinished: { onStreamFinished: {
var lines = text.split("\n"); const lines = text.split("\n");
var nets = []; const networksMap = {};
var seen = {};
for (var i = 0; i < lines.length; ++i) { for (let i = 0; i < lines.length; ++i) {
var line = lines[i].trim(); const line = lines[i].trim();
if (!line) continue; if (!line) continue;
var parts = line.split(":");
var ssid = parts[0]; const parts = line.split(":");
var security = parts[1]; if (parts.length < 4) {
var signal = parseInt(parts[2]); console.warn("Malformed nmcli output line:", line);
var inUse = parts[3] === "*"; continue;
}
const ssid = parts[0];
const security = parts[1];
const signal = parseInt(parts[2]);
const inUse = parts[3] === "*";
if (ssid) { if (ssid) {
if (!seen[ssid]) { if (!networksMap[ssid]) {
// First time seeing this SSID networksMap[ssid] = { ssid: ssid, security: security, signal: signal, connected: inUse };
nets.push({ ssid: ssid, security: security, signal: signal, connected: inUse });
seen[ssid] = true;
} else { } else {
// SSID already exists, update if this entry has better signal or is connected const existingNet = networksMap[ssid];
for (var j = 0; j < nets.length; ++j) { if (inUse) {
if (nets[j].ssid === ssid) { existingNet.connected = true;
// Update connection status if this entry is connected }
if (inUse) { if (signal > existingNet.signal) {
nets[j].connected = true; existingNet.signal = signal;
} existingNet.security = security;
// Update signal if this entry has better signal
if (signal > nets[j].signal) {
nets[j].signal = signal;
nets[j].security = security;
}
break;
}
} }
} }
} }
} }
wifiLogic.networks = nets; wifiLogic.networks = Object.values(networksMap);
} }
} }
} }
@ -115,17 +113,17 @@ Item {
listConnectionsProcess.running = true; listConnectionsProcess.running = true;
} }
function doConnect() { function doConnect() {
var params = wifiLogic.pendingConnect; const params = wifiLogic.pendingConnect;
wifiLogic.connectingSsid = params.ssid; wifiLogic.connectingSsid = params.ssid;
if (params.security && params.security !== "--") { if (params.security && params.security !== "--") {
getInterfaceProcess.running = true; getInterfaceProcess.running = true;
} else { return;
connectProcess.security = params.security;
connectProcess.ssid = params.ssid;
connectProcess.password = params.password;
connectProcess.running = true;
wifiLogic.pendingConnect = null;
} }
connectProcess.security = params.security;
connectProcess.ssid = params.ssid;
connectProcess.password = params.password;
connectProcess.running = true;
wifiLogic.pendingConnect = null;
} }
function isSecured(security) { function isSecured(security) {
return security && security.trim() !== "" && security.trim() !== "--"; return security && security.trim() !== "" && security.trim() !== "--";
@ -400,8 +398,13 @@ Item {
color: Theme.textPrimary color: Theme.textPrimary
Layout.fillWidth: true Layout.fillWidth: true
} }
Item { Layout.fillWidth: true }
IconButton {
icon: "refresh"
onClicked: wifiLogic.refreshNetworks()
}
Rectangle { Rectangle {
width: 36; height: 36; radius: 18 implicitWidth: 36; implicitHeight: 36; radius: 18
color: closeButtonArea.containsMouse ? Theme.accentPrimary : "transparent" color: closeButtonArea.containsMouse ? Theme.accentPrimary : "transparent"
border.color: Theme.accentPrimary border.color: Theme.accentPrimary
border.width: 1 border.width: 1