notifs: use adaptive timer for timeStr instead of reactive binding

Replace the per-second reactive binding with an imperative timer
that adapts its interval based on notification age: 5s for <1min,
30s for <10min, 60s for <1h, 5min for <1d, 1h for older.
This commit is contained in:
2 * r + 2 * t 2026-03-12 21:49:55 +11:00
parent b4514a7820
commit 30c36e356d

View file

@ -146,21 +146,37 @@ Singleton {
property var locks: new Set() property var locks: new Set()
property date time: new Date() property date time: new Date()
readonly property string timeStr: { property string timeStr: qsTr("now")
const diff = Time.date.getTime() - time.getTime();
function updateTimeStr(): void {
const diff = Date.now() - time.getTime();
const m = Math.floor(diff / 60000); const m = Math.floor(diff / 60000);
if (m < 1) if (m < 1) {
return qsTr("now"); timeStr = qsTr("now");
timeStrTimer.interval = 5000;
} else {
const h = Math.floor(m / 60);
const d = Math.floor(h / 24);
const h = Math.floor(m / 60); if (d > 0) {
const d = Math.floor(h / 24); timeStr = `${d}d`;
timeStrTimer.interval = 3600000;
} else if (h > 0) {
timeStr = `${h}h`;
timeStrTimer.interval = 300000;
} else {
timeStr = `${m}m`;
timeStrTimer.interval = m < 10 ? 30000 : 60000;
}
}
}
if (d > 0) readonly property Timer timeStrTimer: Timer {
return `${d}d`; running: !notif.closed
if (h > 0) repeat: true
return `${h}h`; interval: 5000
return `${m}m`; onTriggered: notif.updateTimeStr()
} }
property Notification notification property Notification notification