56 lines
1.5 KiB
QML
56 lines
1.5 KiB
QML
pragma Singleton
|
|
|
|
import QtQuick
|
|
import Qt.labs.folderlistmodel
|
|
import Quickshell
|
|
import Quickshell.Io
|
|
|
|
Singleton {
|
|
id: root
|
|
|
|
// Public values
|
|
property real cpuUsage: 0
|
|
property real cpuTemp: 0
|
|
property real memoryUsageGb: 0
|
|
property real memoryUsagePer: 0
|
|
property real diskUsage: 0
|
|
property real rxSpeed: 0
|
|
property real txSpeed: 0
|
|
|
|
// Helper function to format network speeds
|
|
function formatSpeed(bytesPerSecond) {
|
|
if (bytesPerSecond < 1024) {
|
|
return bytesPerSecond.toFixed(0) + "B/s"
|
|
} else if (bytesPerSecond < 1024 * 1024) {
|
|
return (bytesPerSecond / 1024).toFixed(0) + "KB/s"
|
|
} else if (bytesPerSecond < 1024 * 1024 * 1024) {
|
|
return (bytesPerSecond / (1024 * 1024)).toFixed(1) + "MB/s"
|
|
} else {
|
|
return (bytesPerSecond / (1024 * 1024 * 1024)).toFixed(1) + "GB/s"
|
|
}
|
|
}
|
|
|
|
// Background process emitting one JSON line per sample
|
|
Process {
|
|
id: reader
|
|
running: true
|
|
command: ["sh", "-c", Quickshell.shellDir + "/Bin/system-stats.sh"]
|
|
stdout: SplitParser {
|
|
onRead: function (line) {
|
|
try {
|
|
const data = JSON.parse(line)
|
|
root.cpuUsage = data.cpu
|
|
root.cpuTemp = data.cputemp
|
|
root.memoryUsageGb = data.memgb
|
|
root.memoryUsagePer = data.memper
|
|
root.diskUsage = data.diskper
|
|
root.rxSpeed = parseFloat(data.rx_speed) || 0
|
|
root.txSpeed = parseFloat(data.tx_speed) || 0
|
|
} catch (e) {
|
|
|
|
// ignore malformed lines
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|