SystemMonitor: get available disk space

This commit is contained in:
thmoee
2026-01-29 13:53:15 +01:00
parent 5459497199
commit dd844ef2da
3 changed files with 30 additions and 10 deletions
+3 -2
View File
@@ -136,8 +136,9 @@
"showSwapUsage": false,
"showNetworkStats": false,
"showDiskUsage": false,
"diskPath": "/",
"showDiskDetails": false
"showDiskUsageAsPercent": false,
"showDiskAvailable": false,
"diskPath": "/"
},
"Taskbar": {
"onlySameOutput": true,
@@ -38,6 +38,8 @@ ColumnLayout {
property bool valueShowSwapUsage: widgetData.showSwapUsage !== undefined ? widgetData.showSwapUsage : widgetMetadata.showSwapUsage
property bool valueShowNetworkStats: widgetData.showNetworkStats !== undefined ? widgetData.showNetworkStats : widgetMetadata.showNetworkStats
property bool valueShowDiskUsage: widgetData.showDiskUsage !== undefined ? widgetData.showDiskUsage : widgetMetadata.showDiskUsage
property bool valueShowDiskUsageAsPercent: widgetData.showDiskUsageAsPercent !== undefined ? widgetData.showDiskUsageAsPercent : widgetMetadata.showDiskUsageAsPercent
property bool valueShowDiskAvailable: widgetData.showDiskAvailable !== undefined ? widgetData.showDiskAvailable : widgetMetadata.showDiskAvailable
property string valueDiskPath: widgetData.diskPath !== undefined ? widgetData.diskPath : widgetMetadata.diskPath
property bool valueShowDiskDetails: widgetData.showDiskDetails !== undefined ? widgetData.showDiskDetails : widgetMetadata.showDiskDetails
@@ -55,8 +57,9 @@ ColumnLayout {
settings.showSwapUsage = valueShowSwapUsage;
settings.showNetworkStats = valueShowNetworkStats;
settings.showDiskUsage = valueShowDiskUsage;
settings.showDiskUsageAsPercent = valueShowDiskUsageAsPercent;
settings.showDiskAvailable = valueShowDiskAvailable;
settings.diskPath = valueDiskPath;
settings.showDiskDetails = valueShowDiskDetails;
return settings;
}
@@ -207,16 +210,27 @@ ColumnLayout {
}
NToggle {
id: showDiskDetails
id: showDiskUsageAsPercent
Layout.fillWidth: true
label: I18n.tr("bar.system-monitor.storage-details-label")
description: I18n.tr("bar.system-monitor.storage-details-description")
checked: valueShowDiskDetails
label: "Disk as percentage"
description: "Show disk space as percentage instead of absolute values."
checked: valueShowDiskUsageAsPercent
onToggled: checked => {
valueShowDiskDetails = checked;
valueShowDiskUsageAsPercent = checked;
settingsChanged(saveSettings());
}
}
NToggle {
id: showDiskAvailable
Layout.fillWidth: true
label: "Disk space available"
description: "Shows how much disk space is available instead of how much is used."
checked: valueShowDiskAvailable
onToggled: checked => {
valueShowDiskAvailable = checked;
settingsChanged(saveSettings());
}
visible: !isVertical
}
NComboBox {
+6 -1
View File
@@ -30,6 +30,7 @@ Singleton {
property real swapTotalGb: 0
property var diskPercents: ({})
property var diskUsedGb: ({}) // Used space in GB per mount point
property var diskAvailableGb: ({}) // available space in GB per mount point
property var diskSizeGb: ({}) // Total size in GB per mount point
property real rxSpeed: 0
property real txSpeed: 0
@@ -385,7 +386,7 @@ Singleton {
// --block-size=1 gives us bytes for precise GB calculation
Process {
id: dfProcess
command: ["df", "--output=target,pcent,used,size", "--block-size=1", "-x", "efivarfs"]
command: ["df", "--output=target,pcent,used,size,avail", "--block-size=1", "-x", "efivarfs"]
running: false
stdout: StdioCollector {
onStreamFinished: {
@@ -393,6 +394,7 @@ Singleton {
const newPercents = {};
const newUsedGb = {};
const newSizeGb = {};
const newAvailableGb = {};
const bytesPerGb = 1024 * 1024 * 1024;
// Start from line 1 (skip header)
for (var i = 1; i < lines.length; i++) {
@@ -402,14 +404,17 @@ Singleton {
const percent = parseInt(parts[1].replace(/[^0-9]/g, '')) || 0;
const usedBytes = parseFloat(parts[2]) || 0;
const sizeBytes = parseFloat(parts[3]) || 0;
const availBytes = parseFloat(parts[4]) || 0;
newPercents[target] = percent;
newUsedGb[target] = usedBytes / bytesPerGb;
newSizeGb[target] = sizeBytes / bytesPerGb;
newAvailableGb[target] = availBytes / bytesPerGb;
}
}
root.diskPercents = newPercents;
root.diskUsedGb = newUsedGb;
root.diskSizeGb = newSizeGb;
root.diskAvailableGb = newAvailableGb;
}
}
}