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