diff --git a/Assets/settings-widgets-default.json b/Assets/settings-widgets-default.json index cbc8cd732..fd81c96b5 100644 --- a/Assets/settings-widgets-default.json +++ b/Assets/settings-widgets-default.json @@ -136,8 +136,9 @@ "showSwapUsage": false, "showNetworkStats": false, "showDiskUsage": false, - "diskPath": "/", - "showDiskDetails": false + "showDiskUsageAsPercent": false, + "showDiskAvailable": false, + "diskPath": "/" }, "Taskbar": { "onlySameOutput": true, diff --git a/Modules/Panels/Settings/Bar/WidgetSettings/SystemMonitorSettings.qml b/Modules/Panels/Settings/Bar/WidgetSettings/SystemMonitorSettings.qml index 13b5905ae..9f5ed4599 100644 --- a/Modules/Panels/Settings/Bar/WidgetSettings/SystemMonitorSettings.qml +++ b/Modules/Panels/Settings/Bar/WidgetSettings/SystemMonitorSettings.qml @@ -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 { diff --git a/Services/System/SystemStatService.qml b/Services/System/SystemStatService.qml index b9435441b..b90c15c70 100644 --- a/Services/System/SystemStatService.qml +++ b/Services/System/SystemStatService.qml @@ -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; } } }