mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2025-12-07 14:05:38 -05:00
Optimize services to reduce load
This commit is contained in:
@@ -67,7 +67,7 @@ Item {
|
|||||||
id: fallbackTimer
|
id: fallbackTimer
|
||||||
|
|
||||||
running: false
|
running: false
|
||||||
interval: 100
|
interval: 256
|
||||||
repeat: true
|
repeat: true
|
||||||
onTriggered: {
|
onTriggered: {
|
||||||
root.audioLevels = [Math.random() * 40 + 10, Math.random() * 60 + 20, Math.random() * 50 + 15, Math.random() * 35 + 20, Math.random() * 45 + 15, Math.random() * 55 + 25];
|
root.audioLevels = [Math.random() * 40 + 10, Math.random() * 60 + 20, Math.random() * 50 + 15, Math.random() * 35 + 20, Math.random() * 45 + 15, Math.random() * 55 + 25];
|
||||||
|
|||||||
60
Services/IdleService.qml
Normal file
60
Services/IdleService.qml
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
pragma Singleton
|
||||||
|
pragma ComponentBehavior: Bound
|
||||||
|
|
||||||
|
import QtQuick
|
||||||
|
import Quickshell
|
||||||
|
import Quickshell.Io
|
||||||
|
|
||||||
|
Singleton {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
property bool isIdle: false
|
||||||
|
property int idleThresholdSeconds: 300 // 5 minutes
|
||||||
|
property int checkInterval: 30000 // Check every 30 seconds
|
||||||
|
|
||||||
|
signal idleChanged(bool idle)
|
||||||
|
|
||||||
|
function checkIdleState() {
|
||||||
|
if (idleChecker.running) return
|
||||||
|
idleChecker.running = true
|
||||||
|
}
|
||||||
|
|
||||||
|
Timer {
|
||||||
|
id: idleTimer
|
||||||
|
interval: root.checkInterval
|
||||||
|
running: true
|
||||||
|
repeat: true
|
||||||
|
onTriggered: root.checkIdleState()
|
||||||
|
}
|
||||||
|
|
||||||
|
Process {
|
||||||
|
id: idleChecker
|
||||||
|
command: ["bash", "-c", "if command -v xprintidle >/dev/null 2>&1; then echo $(( $(xprintidle) / 1000 )); elif command -v qdbus >/dev/null 2>&1; then qdbus org.freedesktop.ScreenSaver /org/freedesktop/ScreenSaver GetSessionIdleTime 2>/dev/null || echo 0; else echo 0; fi"]
|
||||||
|
running: false
|
||||||
|
|
||||||
|
stdout: SplitParser {
|
||||||
|
splitMarker: "\n"
|
||||||
|
onRead: (data) => {
|
||||||
|
const idleSeconds = parseInt(data.trim()) || 0
|
||||||
|
const wasIdle = root.isIdle
|
||||||
|
root.isIdle = idleSeconds >= root.idleThresholdSeconds
|
||||||
|
|
||||||
|
if (wasIdle !== root.isIdle) {
|
||||||
|
console.log("IdleService: System idle state changed to:", root.isIdle ? "idle" : "active", "(" + idleSeconds + "s)")
|
||||||
|
root.idleChanged(root.isIdle)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onExited: (exitCode) => {
|
||||||
|
if (exitCode !== 0) {
|
||||||
|
console.warn("IdleService: Failed to check idle state, exit code:", exitCode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
console.log("IdleService: Initialized with", root.idleThresholdSeconds + "s threshold")
|
||||||
|
checkIdleState()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -9,6 +9,7 @@ import qs.Common
|
|||||||
Singleton {
|
Singleton {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
|
property int refCount: 0
|
||||||
property string networkStatus: "disconnected" // "ethernet", "wifi", "disconnected"
|
property string networkStatus: "disconnected" // "ethernet", "wifi", "disconnected"
|
||||||
property string ethernetIP: ""
|
property string ethernetIP: ""
|
||||||
property string ethernetInterface: ""
|
property string ethernetInterface: ""
|
||||||
@@ -42,6 +43,25 @@ Singleton {
|
|||||||
|
|
||||||
signal networksUpdated()
|
signal networksUpdated()
|
||||||
|
|
||||||
|
function addRef() {
|
||||||
|
refCount++;
|
||||||
|
console.log("NetworkService: addRef, refCount now:", refCount);
|
||||||
|
if (refCount === 1) {
|
||||||
|
// Start monitoring when first consumer appears
|
||||||
|
networkStatusChecker.running = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeRef() {
|
||||||
|
refCount = Math.max(0, refCount - 1);
|
||||||
|
console.log("NetworkService: removeRef, refCount now:", refCount);
|
||||||
|
if (refCount === 0) {
|
||||||
|
// Stop monitoring when no consumers
|
||||||
|
networkStatusChecker.running = false;
|
||||||
|
autoRefreshTimer.running = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Load saved preference on startup
|
// Load saved preference on startup
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
// Load preference from Prefs system
|
// Load preference from Prefs system
|
||||||
@@ -58,7 +78,7 @@ Singleton {
|
|||||||
Process {
|
Process {
|
||||||
id: networkStatusChecker
|
id: networkStatusChecker
|
||||||
command: ["sh", "-c", "nmcli -t -f DEVICE,TYPE,STATE device | grep -E '(ethernet|wifi)' && echo '---' && ip link show | grep -E '^[0-9]+:.*ethernet.*state UP'"]
|
command: ["sh", "-c", "nmcli -t -f DEVICE,TYPE,STATE device | grep -E '(ethernet|wifi)' && echo '---' && ip link show | grep -E '^[0-9]+:.*ethernet.*state UP'"]
|
||||||
running: true
|
running: false
|
||||||
|
|
||||||
stdout: StdioCollector {
|
stdout: StdioCollector {
|
||||||
onStreamFinished: {
|
onStreamFinished: {
|
||||||
@@ -519,7 +539,7 @@ Singleton {
|
|||||||
Timer {
|
Timer {
|
||||||
id: autoRefreshTimer
|
id: autoRefreshTimer
|
||||||
interval: 20000
|
interval: 20000
|
||||||
running: root.autoRefreshEnabled
|
running: root.autoRefreshEnabled && root.refCount > 0
|
||||||
repeat: true
|
repeat: true
|
||||||
onTriggered: scanWifi()
|
onTriggered: scanWifi()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,12 +4,13 @@ pragma ComponentBehavior: Bound
|
|||||||
import QtQuick
|
import QtQuick
|
||||||
import Quickshell
|
import Quickshell
|
||||||
import Quickshell.Io
|
import Quickshell.Io
|
||||||
|
import qs.Services
|
||||||
|
|
||||||
Singleton {
|
Singleton {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
property int refCount: 0
|
property int refCount: 0
|
||||||
property int updateInterval: 8000
|
property int updateInterval: 30000
|
||||||
property int maxProcesses: 100
|
property int maxProcesses: 100
|
||||||
property bool isUpdating: false
|
property bool isUpdating: false
|
||||||
|
|
||||||
@@ -360,12 +361,27 @@ Singleton {
|
|||||||
Timer {
|
Timer {
|
||||||
id: updateTimer
|
id: updateTimer
|
||||||
interval: root.updateInterval
|
interval: root.updateInterval
|
||||||
running: root.refCount > 0
|
running: root.refCount > 0 && !IdleService.isIdle
|
||||||
repeat: true
|
repeat: true
|
||||||
triggeredOnStart: true
|
triggeredOnStart: true
|
||||||
onTriggered: root.updateAllStats()
|
onTriggered: root.updateAllStats()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: IdleService
|
||||||
|
function onIdleChanged(idle) {
|
||||||
|
if (idle) {
|
||||||
|
console.log("SysMonitorService: System idle, pausing monitoring")
|
||||||
|
} else {
|
||||||
|
console.log("SysMonitorService: System active, resuming monitoring")
|
||||||
|
if (root.refCount > 0) {
|
||||||
|
// Trigger immediate update when coming back from idle
|
||||||
|
root.updateAllStats()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
readonly property string scriptBody: `set -Eeuo pipefail
|
readonly property string scriptBody: `set -Eeuo pipefail
|
||||||
trap 'echo "ERR at line $LINENO: $BASH_COMMAND (exit $?)" >&2' ERR
|
trap 'echo "ERR at line $LINENO: $BASH_COMMAND (exit $?)" >&2' ERR
|
||||||
sort_key=\${1:-cpu}
|
sort_key=\${1:-cpu}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import QtQuick
|
|||||||
import Quickshell
|
import Quickshell
|
||||||
import Quickshell.Io
|
import Quickshell.Io
|
||||||
import qs.Common
|
import qs.Common
|
||||||
|
import qs.Services
|
||||||
|
|
||||||
Singleton {
|
Singleton {
|
||||||
id: root
|
id: root
|
||||||
@@ -239,7 +240,7 @@ Singleton {
|
|||||||
Timer {
|
Timer {
|
||||||
id: updateTimer
|
id: updateTimer
|
||||||
interval: root.updateInterval
|
interval: root.updateInterval
|
||||||
running: root.refCount > 0
|
running: root.refCount > 0 && !IdleService.isIdle
|
||||||
repeat: true
|
repeat: true
|
||||||
triggeredOnStart: true
|
triggeredOnStart: true
|
||||||
onTriggered: {
|
onTriggered: {
|
||||||
@@ -247,6 +248,21 @@ Singleton {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: IdleService
|
||||||
|
function onIdleChanged(idle) {
|
||||||
|
if (idle) {
|
||||||
|
console.log("WeatherService: System idle, pausing weather updates")
|
||||||
|
} else {
|
||||||
|
console.log("WeatherService: System active, resuming weather updates")
|
||||||
|
if (root.refCount > 0 && !root.weather.available) {
|
||||||
|
// Trigger immediate update when coming back from idle if no data
|
||||||
|
root.fetchWeather()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Timer {
|
Timer {
|
||||||
id: retryTimer
|
id: retryTimer
|
||||||
interval: root.retryDelay
|
interval: root.retryDelay
|
||||||
|
|||||||
16
Services/qmldir
Normal file
16
Services/qmldir
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
singleton AppSearchService 1.0 AppSearchService.qml
|
||||||
|
singleton AudioService 1.0 AudioService.qml
|
||||||
|
singleton BatteryService 1.0 BatteryService.qml
|
||||||
|
singleton BluetoothService 1.0 BluetoothService.qml
|
||||||
|
singleton BrightnessService 1.0 BrightnessService.qml
|
||||||
|
singleton CalendarService 1.0 CalendarService.qml
|
||||||
|
singleton FocusedWindowService 1.0 FocusedWindowService.qml
|
||||||
|
singleton IdleService 1.0 IdleService.qml
|
||||||
|
singleton MprisController 1.0 MprisController.qml
|
||||||
|
singleton NetworkService 1.0 NetworkService.qml
|
||||||
|
singleton NiriService 1.0 NiriService.qml
|
||||||
|
singleton NotificationService 1.0 NotificationService.qml
|
||||||
|
singleton SysMonitorService 1.0 SysMonitorService.qml
|
||||||
|
singleton ToastService 1.0 ToastService.qml
|
||||||
|
singleton UserInfoService 1.0 UserInfoService.qml
|
||||||
|
singleton WeatherService 1.0 WeatherService.qml
|
||||||
Reference in New Issue
Block a user