pragma ComponentBehavior: Bound import ".." import "." import qs.components import qs.components.controls import qs.components.effects import qs.components.containers import qs.services import qs.config import QtQuick import QtQuick.Layouts Item { id: root required property Session session readonly property var network: session.network.active Component.onCompleted: { updateDeviceDetails(); checkSavedProfile(); } onNetworkChanged: { updateDeviceDetails(); checkSavedProfile(); } function checkSavedProfile(): void { // Refresh saved connections list to ensure it's up to date // This ensures the "Forget Network" button visibility is accurate if (network && network.ssid) { // Always refresh to ensure we have the latest saved connections // This is important when networks are selected or changed Network.listConnectionsProc.running = true; } } Connections { target: Network function onActiveChanged() { updateDeviceDetails(); } } function updateDeviceDetails(): void { // Only update details if the selected network is currently active if (network && Network.active && Network.active.ssid === network.ssid) { Network.updateWirelessDeviceDetails(); } else { Network.wirelessDeviceDetails = null; } } StyledFlickable { anchors.fill: parent flickableDirection: Flickable.VerticalFlick contentHeight: layout.height ColumnLayout { id: layout anchors.left: parent.left anchors.right: parent.right spacing: Appearance.spacing.normal ConnectionHeader { icon: root.network?.isSecure ? "lock" : "wifi" title: root.network?.ssid ?? qsTr("Unknown") } SectionHeader { title: qsTr("Connection status") description: qsTr("Connection settings for this network") } SectionContainer { ToggleRow { label: qsTr("Connected") checked: root.network?.active ?? false toggle.onToggled: { if (checked) { handleConnect(); } else { Network.disconnectFromNetwork(); } } } SimpleButton { Layout.fillWidth: true Layout.topMargin: Appearance.spacing.normal visible: { if (!root.network || !root.network.ssid) { return false; } // Check if profile exists - this will update reactively when savedConnectionSsids changes return Network.hasSavedProfile(root.network.ssid); } color: Colours.palette.m3errorContainer onColor: Colours.palette.m3onErrorContainer text: qsTr("Forget Network") onClicked: { if (root.network && root.network.ssid) { // Disconnect first if connected if (root.network.active) { Network.disconnectFromNetwork(); } // Delete the connection profile Network.forgetNetwork(root.network.ssid); } } } } SectionHeader { title: qsTr("Network properties") description: qsTr("Additional information") } SectionContainer { contentSpacing: Appearance.spacing.small / 2 PropertyRow { label: qsTr("SSID") value: root.network?.ssid ?? qsTr("Unknown") } PropertyRow { showTopMargin: true label: qsTr("BSSID") value: root.network?.bssid ?? qsTr("Unknown") } PropertyRow { showTopMargin: true label: qsTr("Signal strength") value: root.network ? qsTr("%1%").arg(root.network.strength) : qsTr("N/A") } PropertyRow { showTopMargin: true label: qsTr("Frequency") value: root.network ? qsTr("%1 MHz").arg(root.network.frequency) : qsTr("N/A") } PropertyRow { showTopMargin: true label: qsTr("Security") value: root.network ? (root.network.isSecure ? root.network.security : qsTr("Open")) : qsTr("N/A") } } SectionHeader { title: qsTr("Connection information") description: qsTr("Network connection details") } SectionContainer { ConnectionInfoSection { deviceDetails: Network.wirelessDeviceDetails } } } } function handleConnect(): void { // If already connected to a different network, disconnect first if (Network.active && Network.active.ssid !== root.network.ssid) { Network.disconnectFromNetwork(); Qt.callLater(() => { connectToNetwork(); }); } else { connectToNetwork(); } } function connectToNetwork(): void { if (root.network.isSecure) { // Check if we have a saved connection profile for this network (by SSID) const hasSavedProfile = Network.hasSavedProfile(root.network.ssid); if (hasSavedProfile) { // Try connecting with saved password - don't show dialog if it fails // The saved password should work, but if connection fails for other reasons, // we'll let the user try manually later Network.connectToNetwork(root.network.ssid, "", root.network.bssid, null); } else { // No saved profile, try connecting without password first Network.connectToNetworkWithPasswordCheck( root.network.ssid, root.network.isSecure, () => { // Callback: connection failed, show password dialog root.session.network.showPasswordDialog = true; root.session.network.pendingNetwork = root.network; }, root.network.bssid ); } } else { Network.connectToNetwork(root.network.ssid, "", root.network.bssid, null); } } }