1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-01-29 16:02:51 -05:00

new network service

This commit is contained in:
bbedward
2025-08-13 12:29:48 -04:00
parent a1bd7aaa3f
commit f64dd538d5
5 changed files with 1005 additions and 1108 deletions

View File

@@ -30,42 +30,41 @@ Rectangle {
0.12) 0.12)
border.width: NetworkService.networkStatus === "ethernet" ? 2 : 1 border.width: NetworkService.networkStatus === "ethernet" ? 2 : 1
Column { Row {
anchors.left: parent.left anchors.left: parent.left
anchors.leftMargin: Theme.spacingM anchors.leftMargin: Theme.spacingM
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
anchors.right: ethernetToggle.left anchors.right: parent.right
anchors.rightMargin: Theme.spacingM anchors.rightMargin: Theme.spacingM
spacing: Theme.spacingS spacing: Theme.spacingM
Row { DankIcon {
spacing: Theme.spacingM name: "lan"
size: Theme.iconSize
color: NetworkService.networkStatus === "ethernet" ? Theme.primary : Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
}
DankIcon { Column {
name: "lan" anchors.verticalCenter: parent.verticalCenter
size: Theme.iconSize spacing: 2
color: NetworkService.networkStatus === "ethernet" ? Theme.primary : Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
}
StyledText { StyledText {
text: "Ethernet" text: "Ethernet"
font.pixelSize: Theme.fontSizeMedium font.pixelSize: Theme.fontSizeMedium
color: NetworkService.networkStatus === "ethernet" ? Theme.primary : Theme.surfaceText color: NetworkService.networkStatus === "ethernet" ? Theme.primary : Theme.surfaceText
font.weight: Font.Medium font.weight: Font.Medium
anchors.verticalCenter: parent.verticalCenter
elide: Text.ElideRight elide: Text.ElideRight
} }
}
StyledText { StyledText {
text: NetworkService.ethernetConnected ? (NetworkService.ethernetIP text: NetworkService.ethernetConnected ? (NetworkService.ethernetIP
|| "Connected") : "Disconnected" || "Connected") : "Disconnected"
font.pixelSize: Theme.fontSizeSmall font.pixelSize: Theme.fontSizeSmall
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g,
Theme.surfaceText.b, 0.7) Theme.surfaceText.b, 0.7)
leftPadding: Theme.iconSize + Theme.spacingM elide: Text.ElideRight
elide: Text.ElideRight }
} }
} }
@@ -75,7 +74,7 @@ Rectangle {
name: "refresh" name: "refresh"
size: Theme.iconSize - 4 size: Theme.iconSize - 4
color: Theme.primary color: Theme.primary
anchors.right: ethernetToggle.left anchors.right: parent.right
anchors.rightMargin: Theme.spacingS anchors.rightMargin: Theme.spacingS
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
visible: NetworkService.changingPreference visible: NetworkService.changingPreference
@@ -93,24 +92,11 @@ Rectangle {
} }
} }
DankToggle {
id: ethernetToggle
checked: NetworkService.ethernetConnected
enabled: true
anchors.right: parent.right
anchors.rightMargin: Theme.spacingM
anchors.verticalCenter: parent.verticalCenter
onClicked: {
NetworkService.toggleNetworkConnection("ethernet")
}
}
MouseArea { MouseArea {
id: ethernetPreferenceArea id: ethernetPreferenceArea
anchors.fill: parent anchors.fill: parent
anchors.rightMargin: 60 // Exclude toggle area
hoverEnabled: true hoverEnabled: true
cursorShape: (NetworkService.ethernetConnected && NetworkService.wifiEnabled cursorShape: (NetworkService.ethernetConnected && NetworkService.wifiEnabled
&& NetworkService.networkStatus && NetworkService.networkStatus

View File

@@ -48,30 +48,31 @@ Rectangle {
border.width: NetworkService.networkStatus === "wifi" ? 2 : 1 border.width: NetworkService.networkStatus === "wifi" ? 2 : 1
visible: NetworkService.wifiAvailable visible: NetworkService.wifiAvailable
Column { Row {
anchors.left: parent.left anchors.left: parent.left
anchors.leftMargin: Theme.spacingM anchors.leftMargin: Theme.spacingM
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
anchors.right: wifiToggle.left anchors.right: wifiToggle.left
anchors.rightMargin: Theme.spacingM anchors.rightMargin: Theme.spacingM
spacing: Theme.spacingS spacing: Theme.spacingM
Row { DankIcon {
spacing: Theme.spacingM name: {
if (!NetworkService.wifiEnabled)
DankIcon { return "wifi_off"
name: { else if (NetworkService.currentWifiSSID !== "")
if (!NetworkService.wifiEnabled) return getWiFiSignalIcon(NetworkService.wifiSignalStrength)
return "wifi_off" else
else if (NetworkService.currentWifiSSID !== "") return "wifi"
return getWiFiSignalIcon(NetworkService.wifiSignalStrength)
else
return "wifi"
}
size: Theme.iconSize
color: NetworkService.networkStatus === "wifi" ? Theme.primary : Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
} }
size: Theme.iconSize
color: NetworkService.networkStatus === "wifi" ? Theme.primary : Theme.surfaceText
anchors.verticalCenter: parent.verticalCenter
}
Column {
anchors.verticalCenter: parent.verticalCenter
spacing: 2
StyledText { StyledText {
text: { text: {
@@ -85,25 +86,23 @@ Rectangle {
font.pixelSize: Theme.fontSizeMedium font.pixelSize: Theme.fontSizeMedium
color: NetworkService.networkStatus === "wifi" ? Theme.primary : Theme.surfaceText color: NetworkService.networkStatus === "wifi" ? Theme.primary : Theme.surfaceText
font.weight: Font.Medium font.weight: Font.Medium
anchors.verticalCenter: parent.verticalCenter
elide: Text.ElideRight elide: Text.ElideRight
} }
}
StyledText { StyledText {
text: { text: {
if (!NetworkService.wifiEnabled) if (!NetworkService.wifiEnabled)
return "Turn on WiFi to see networks" return "Turn on WiFi to see networks"
else if (NetworkService.wifiEnabled && NetworkService.currentWifiSSID) else if (NetworkService.wifiEnabled && NetworkService.currentWifiSSID)
return NetworkService.wifiIP || "Connected" return NetworkService.wifiIP || "Connected"
else else
return "Select a network below" return "Select a network below"
}
font.pixelSize: Theme.fontSizeSmall
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g,
Theme.surfaceText.b, 0.7)
elide: Text.ElideRight
} }
font.pixelSize: Theme.fontSizeSmall
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g,
Theme.surfaceText.b, 0.7)
leftPadding: Theme.iconSize + Theme.spacingM
elide: Text.ElideRight
} }
} }
@@ -143,7 +142,7 @@ Rectangle {
onClicked: { onClicked: {
if (NetworkService.wifiEnabled) { if (NetworkService.wifiEnabled) {
NetworkService.currentWifiSSID = "" NetworkService.currentWifiSSID = ""
NetworkService.wifiSignalStrength = "excellent" NetworkService.wifiSignalStrength = 100
NetworkService.wifiNetworks = [] NetworkService.wifiNetworks = []
NetworkService.savedWifiNetworks = [] NetworkService.savedWifiNetworks = []
NetworkService.connectionStatus = "" NetworkService.connectionStatus = ""

View File

@@ -22,7 +22,7 @@ Item {
var allNetworks = NetworkService.wifiNetworks var allNetworks = NetworkService.wifiNetworks
var savedNetworks = NetworkService.savedWifiNetworks var savedNetworks = NetworkService.savedWifiNetworks
var currentSSID = NetworkService.currentWifiSSID var currentSSID = NetworkService.currentWifiSSID
var signalStrength = NetworkService.wifiSignalStrength var signalStrength = NetworkService.wifiSignalStrengthStr
var refreshTrigger = forceRefresh var refreshTrigger = forceRefresh
// Force recalculation // Force recalculation
@@ -60,15 +60,12 @@ Item {
Component.onCompleted: { Component.onCompleted: {
NetworkService.addRef() NetworkService.addRef()
NetworkService.autoRefreshEnabled = true
if (NetworkService.wifiEnabled) if (NetworkService.wifiEnabled)
NetworkService.scanWifi() NetworkService.scanWifi()
wifiMonitorTimer.start()
} }
Component.onDestruction: { Component.onDestruction: {
NetworkService.removeRef() NetworkService.removeRef()
NetworkService.autoRefreshEnabled = false
} }
Row { Row {
@@ -79,6 +76,7 @@ Item {
width: (parent.width - Theme.spacingM) / 2 width: (parent.width - Theme.spacingM) / 2
height: parent.height height: parent.height
spacing: Theme.spacingS spacing: Theme.spacingS
anchors.verticalCenter: parent.verticalCenter
Flickable { Flickable {
width: parent.width width: parent.width
@@ -110,9 +108,7 @@ Item {
width: parent.width width: parent.width
spacing: Theme.spacingM spacing: Theme.spacingM
WiFiCard { WiFiCard {}
refreshTimer: refreshTimer
}
} }
ScrollBar.vertical: ScrollBar { ScrollBar.vertical: ScrollBar {
@@ -125,6 +121,7 @@ Item {
width: (parent.width - Theme.spacingM) / 2 width: (parent.width - Theme.spacingM) / 2
height: parent.height height: parent.height
spacing: Theme.spacingS spacing: Theme.spacingS
anchors.verticalCenter: parent.verticalCenter
Flickable { Flickable {
width: parent.width width: parent.width
@@ -212,104 +209,20 @@ Item {
wifiPasswordModalRef: networkTab.wifiPasswordModalRef wifiPasswordModalRef: networkTab.wifiPasswordModalRef
} }
Timer {
id: refreshTimer
interval: 2000
running: visible && refreshTimer.triggered
property bool triggered: false
onTriggered: {
NetworkService.refreshNetworkStatus()
if (NetworkService.wifiEnabled && !NetworkService.isScanning) {
NetworkService.scanWifi()
}
triggered = false
}
}
Connections { Connections {
target: NetworkService target: NetworkService
function onWifiEnabledChanged() { function onWifiEnabledChanged() {
if (NetworkService.wifiEnabled && visible) { if (NetworkService.wifiEnabled && visible) {
wifiScanDelayTimer.start() // Trigger a scan when WiFi is enabled
wifiMonitorTimer.start()
} else {
NetworkService.currentWifiSSID = ""
NetworkService.wifiSignalStrength = "excellent"
NetworkService.wifiNetworks = []
NetworkService.savedWifiNetworks = []
NetworkService.connectionStatus = ""
NetworkService.connectingSSID = ""
NetworkService.isScanning = false
NetworkService.refreshNetworkStatus()
wifiMonitorTimer.stop()
}
}
}
Timer {
id: wifiScanDelayTimer
interval: 1500
running: false
repeat: false
onTriggered: {
if (NetworkService.wifiEnabled && visible) {
if (!NetworkService.isScanning) {
NetworkService.scanWifi()
} else {
wifiRetryTimer.start()
}
}
}
}
Timer {
id: wifiRetryTimer
interval: 2000
running: false
repeat: false
onTriggered: {
if (NetworkService.wifiEnabled && visible
&& NetworkService.wifiNetworks.length === 0) {
if (!NetworkService.isScanning) {
NetworkService.scanWifi()
}
}
}
}
Timer {
id: wifiMonitorTimer
interval: 8000 // Check every 8 seconds
running: false
repeat: true
onTriggered: {
if (!visible || !NetworkService.wifiEnabled) {
running = false
return
}
var shouldScan = false
var reason = ""
if (NetworkService.networkStatus !== "wifi") {
shouldScan = true
reason = "not connected to WiFi"
} else if (NetworkService.wifiNetworks.length === 0) {
shouldScan = true
reason = "no networks cached"
}
if (shouldScan && !NetworkService.isScanning) {
NetworkService.scanWifi() NetworkService.scanWifi()
} }
} }
} }
onVisibleChanged: { onVisibleChanged: {
if (visible && NetworkService.wifiEnabled) { if (visible && NetworkService.wifiEnabled && NetworkService.wifiNetworks.length === 0) {
wifiMonitorTimer.start() // Scan when tab becomes visible if we don't have networks cached
} else { NetworkService.scanWifi()
wifiMonitorTimer.stop()
} }
} }

View File

@@ -49,7 +49,7 @@ Rectangle {
if (NetworkService.networkStatus === "ethernet") if (NetworkService.networkStatus === "ethernet")
return "lan" return "lan"
else if (NetworkService.networkStatus === "wifi") else if (NetworkService.networkStatus === "wifi")
return getWiFiSignalIcon(NetworkService.wifiSignalStrength) return getWiFiSignalIcon(NetworkService.wifiSignalStrengthStr)
else else
return "wifi_off" return "wifi_off"
} }

File diff suppressed because it is too large Load Diff