From 8426e36f46c9f77bf7b5fe8112e3f07afa8b471f Mon Sep 17 00:00:00 2001 From: LemmyCook Date: Fri, 5 Sep 2025 21:08:30 -0400 Subject: [PATCH] Time: improved human readable time + fixed a few tooltips. --- Commons/Time.qml | 34 +++++++++++++++---------- Modules/Bar/Widgets/NightLight.qml | 2 +- Modules/Bar/Widgets/SidePanelToggle.qml | 2 +- Modules/SidePanel/Cards/ProfileCard.qml | 20 +++------------ 4 files changed, 27 insertions(+), 31 deletions(-) diff --git a/Commons/Time.qml b/Commons/Time.qml index fe1f3fd..fddb4db 100644 --- a/Commons/Time.qml +++ b/Commons/Time.qml @@ -78,23 +78,31 @@ Singleton { } // Format an easy to read approximate duration ex: 4h32m -// Used to display the time remaining on the Battery widget +// Used to display the time remaining on the Battery widget, computer uptime, etc.. function formatVagueHumanReadableDuration(totalSeconds) { - const hours = Math.floor(totalSeconds / 3600) - const minutes = Math.floor((totalSeconds - (hours * 3600)) / 60) - const seconds = totalSeconds - (hours * 3600) - (minutes * 60) - - var str = "" - if (hours) { - str += hours.toString() + "h" - } - if (minutes) { - str += minutes.toString() + "m" + if (typeof totalSeconds !== 'number' || totalSeconds < 0) { + return '0s'; } + + // Floor the input to handle decimal seconds + totalSeconds = Math.floor(totalSeconds); + + const days = Math.floor(totalSeconds / 86400); + const hours = Math.floor((totalSeconds % 86400) / 3600); + const minutes = Math.floor((totalSeconds % 3600) / 60); + const seconds = totalSeconds % 60; + + const parts = []; + if (days) parts.push(`${days}d`); + if (hours) parts.push(`${hours}h`); + if (minutes) parts.push(`${minutes}m`); + + // Only show seconds if no hours and no minutes if (!hours && !minutes) { - str += seconds.toString() + "s" + parts.push(`${seconds}s`); } - return str + + return parts.join(''); } Timer { diff --git a/Modules/Bar/Widgets/NightLight.qml b/Modules/Bar/Widgets/NightLight.qml index 342a424..8021e74 100644 --- a/Modules/Bar/Widgets/NightLight.qml +++ b/Modules/Bar/Widgets/NightLight.qml @@ -21,7 +21,7 @@ NIconButton { colorBorderHover: Color.transparent icon: Settings.data.nightLight.enabled ? "bedtime" : "bedtime_off" - tooltipText: `Night light: ${Settings.data.nightLight.enabled ? "enabled" : "disabled"}\nLeft click to toggle.\nRight click to access settings.` + tooltipText: `Night light: ${Settings.data.nightLight.enabled ? "enabled." : "disabled"}\nLeft click to toggle.\nRight click to access settings.` onClicked: Settings.data.nightLight.enabled = !Settings.data.nightLight.enabled onRightClicked: { diff --git a/Modules/Bar/Widgets/SidePanelToggle.qml b/Modules/Bar/Widgets/SidePanelToggle.qml index 1b0b4ce..b9572fb 100644 --- a/Modules/Bar/Widgets/SidePanelToggle.qml +++ b/Modules/Bar/Widgets/SidePanelToggle.qml @@ -12,7 +12,7 @@ NIconButton { property real scaling: 1.0 icon: Settings.data.bar.useDistroLogo ? "" : "widgets" - tooltipText: "Open side panel" + tooltipText: "Open side panel." sizeRatio: 0.8 colorBg: Color.mSurfaceVariant diff --git a/Modules/SidePanel/Cards/ProfileCard.qml b/Modules/SidePanel/Cards/ProfileCard.qml index 951beba..4c2d1ce 100644 --- a/Modules/SidePanel/Cards/ProfileCard.qml +++ b/Modules/SidePanel/Cards/ProfileCard.qml @@ -59,7 +59,7 @@ NBox { } NIconButton { icon: "settings" - tooltipText: "Open settings" + tooltipText: "Open settings." onClicked: { settingsPanel.requestedTab = SettingsPanel.Tab.General settingsPanel.open(screen) @@ -69,7 +69,7 @@ NBox { NIconButton { id: powerButton icon: "power_settings_new" - tooltipText: "Power menu" + tooltipText: "Power menu." onClicked: { powerPanel.open(screen) sidePanel.close() @@ -79,7 +79,7 @@ NBox { NIconButton { id: closeButton icon: "close" - tooltipText: "Close side panel" + tooltipText: "Close side panel." onClicked: { sidePanel.close() } @@ -104,19 +104,7 @@ NBox { stdout: StdioCollector { onStreamFinished: { var uptimeSeconds = parseFloat(this.text.trim().split(' ')[0]) - var minutes = Math.floor(uptimeSeconds / 60) % 60 - var hours = Math.floor(uptimeSeconds / 3600) % 24 - var days = Math.floor(uptimeSeconds / 86400) - - // Format the output - if (days > 0) { - uptimeText = days + "d " + hours + "h" - } else if (hours > 0) { - uptimeText = hours + "h" + minutes + "m" - } else { - uptimeText = minutes + "m" - } - + uptimeText = Time.formatVagueHumanReadableDuration(uptimeSeconds) uptimeProcess.running = false } }