feat: add refresh button for wifi
This commit is contained in:
parent
4c9a51bf6a
commit
d2ea87b46b
1 changed files with 40 additions and 37 deletions
|
|
@ -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 (nets[j].ssid === ssid) {
|
|
||||||
// Update connection status if this entry is connected
|
|
||||||
if (inUse) {
|
if (inUse) {
|
||||||
nets[j].connected = true;
|
existingNet.connected = true;
|
||||||
}
|
}
|
||||||
// Update signal if this entry has better signal
|
if (signal > existingNet.signal) {
|
||||||
if (signal > nets[j].signal) {
|
existingNet.signal = signal;
|
||||||
nets[j].signal = signal;
|
existingNet.security = security;
|
||||||
nets[j].security = security;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
wifiLogic.networks = Object.values(networksMap);
|
||||||
wifiLogic.networks = nets;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -115,18 +113,18 @@ 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.security = params.security;
|
||||||
connectProcess.ssid = params.ssid;
|
connectProcess.ssid = params.ssid;
|
||||||
connectProcess.password = params.password;
|
connectProcess.password = params.password;
|
||||||
connectProcess.running = true;
|
connectProcess.running = true;
|
||||||
wifiLogic.pendingConnect = null;
|
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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue