From 83baff78946fc7d14998d242eb921d3663ebcfa1 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sun, 8 Mar 2026 18:09:34 +0100 Subject: [PATCH] refactor time duration formatting --- .../ii/modules/common/functions/DateUtils.qml | 15 +++++++++++++ .../ii/modules/ii/bar/BatteryPopup.qml | 21 ++++--------------- .../quickshell/ii/services/DateTime.qml | 18 +++------------- 3 files changed, 22 insertions(+), 32 deletions(-) diff --git a/dots/.config/quickshell/ii/modules/common/functions/DateUtils.qml b/dots/.config/quickshell/ii/modules/common/functions/DateUtils.qml index 3cbae5bee..cb50243e6 100644 --- a/dots/.config/quickshell/ii/modules/common/functions/DateUtils.qml +++ b/dots/.config/quickshell/ii/modules/common/functions/DateUtils.qml @@ -24,4 +24,19 @@ Singleton { targetDate.setDate(firstDayDate.getDate() + i); return targetDate; } + + function formatDuration(seconds) { + const d = Math.floor(seconds / 86400); + const h = Math.floor((seconds % 86400) / 3600); + const m = Math.floor((seconds % 3600) / 60); + + let str = ""; + if (d > 0) + str += `${d}d`; + if (h > 0) + str += `${str ? ", " : ""}${h}h`; + if (m > 0 || !str) + str += `${str ? ", " : ""}${m}m`; + return str; + } } diff --git a/dots/.config/quickshell/ii/modules/ii/bar/BatteryPopup.qml b/dots/.config/quickshell/ii/modules/ii/bar/BatteryPopup.qml index 26eda569e..84b25cbc1 100644 --- a/dots/.config/quickshell/ii/modules/ii/bar/BatteryPopup.qml +++ b/dots/.config/quickshell/ii/modules/ii/bar/BatteryPopup.qml @@ -1,4 +1,5 @@ import qs.modules.common +import qs.modules.common.functions import qs.modules.common.widgets import qs.services import QtQuick @@ -27,18 +28,10 @@ StyledPopup { icon: "schedule" label: Battery.isCharging ? Translation.tr("Time to full:") : Translation.tr("Time to empty:") value: { - function formatTime(seconds) { - var h = Math.floor(seconds / 3600); - var m = Math.floor((seconds % 3600) / 60); - if (h > 0) - return `${h}h, ${m}m`; - else - return `${m}m`; - } if (Battery.isCharging) - return formatTime(Battery.timeToFull); + return DateUtils.formatDuration(Battery.timeToFull); else - return formatTime(Battery.timeToEmpty); + return DateUtils.formatDuration(Battery.timeToEmpty); } } @@ -54,13 +47,7 @@ StyledPopup { return Translation.tr("Discharging:"); } } - value: { - if (Battery.chargeState == 4) { - return ""; - } else { - return `${Battery.energyRate.toFixed(2)}W`; - } - } + value: `${Battery.energyRate.toFixed(2)}W` } StyledPopupValueRow { diff --git a/dots/.config/quickshell/ii/services/DateTime.qml b/dots/.config/quickshell/ii/services/DateTime.qml index e1a8300d4..462243e6f 100644 --- a/dots/.config/quickshell/ii/services/DateTime.qml +++ b/dots/.config/quickshell/ii/services/DateTime.qml @@ -2,6 +2,7 @@ pragma Singleton pragma ComponentBehavior: Bound import qs import qs.modules.common +import qs.modules.common.functions import QtQuick import Quickshell import Quickshell.Io @@ -10,6 +11,7 @@ import Quickshell.Io * A nice wrapper for date and time strings. */ Singleton { + id: root property var clock: SystemClock { id: clock precision: { @@ -33,21 +35,7 @@ Singleton { fileUptime.reload(); const textUptime = fileUptime.text(); const uptimeSeconds = Number(textUptime.split(" ")[0] ?? 0); - - // Convert seconds to days, hours, and minutes - const days = Math.floor(uptimeSeconds / 86400); - const hours = Math.floor((uptimeSeconds % 86400) / 3600); - const minutes = Math.floor((uptimeSeconds % 3600) / 60); - - // Build the formatted uptime string - let formatted = ""; - if (days > 0) - formatted += `${days}d`; - if (hours > 0) - formatted += `${formatted ? ", " : ""}${hours}h`; - if (minutes > 0 || !formatted) - formatted += `${formatted ? ", " : ""}${minutes}m`; - uptime = formatted; + root.uptime = DateUtils.formatDuration(uptimeSeconds) interval = Config.options?.resources?.updateInterval ?? 3000; } }