C1: NotifItem QtObject with owned timer, refactor service to stable identities
This commit is contained in:
parent
45704cb102
commit
88d8842064
3 changed files with 136 additions and 52 deletions
67
modules/NotifItem.qml
Normal file
67
modules/NotifItem.qml
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
import QtQuick
|
||||
import Quickshell.Services.Notifications
|
||||
import "." as M
|
||||
|
||||
QtObject {
|
||||
id: root
|
||||
|
||||
property bool popup: false
|
||||
property string state: "visible" // "visible" | "dismissing" | "dismissed"
|
||||
|
||||
property var notification: null
|
||||
property var id
|
||||
property string summary
|
||||
property string body
|
||||
property string appName
|
||||
property string appIcon
|
||||
property string image
|
||||
property var hints
|
||||
property int urgency: NotificationUrgency.Normal
|
||||
property var actions: []
|
||||
property real time: Date.now()
|
||||
|
||||
// Expire timer — owned by this item, not dynamically created
|
||||
readonly property Timer _expireTimer: Timer {
|
||||
running: false
|
||||
onTriggered: {
|
||||
if (root.state === "visible")
|
||||
root.popup = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Relative time string
|
||||
property string timeStr: "now"
|
||||
readonly property Timer _timeStrTimer: Timer {
|
||||
running: root.state !== "dismissed"
|
||||
repeat: true
|
||||
interval: 5000
|
||||
onTriggered: root._updateTimeStr()
|
||||
}
|
||||
|
||||
function _updateTimeStr() {
|
||||
const diff = Date.now() - time;
|
||||
const m = Math.floor(diff / 60000);
|
||||
if (m < 1) {
|
||||
timeStr = "now";
|
||||
return;
|
||||
}
|
||||
const h = Math.floor(m / 60);
|
||||
if (h < 1) {
|
||||
timeStr = m + "m";
|
||||
return;
|
||||
}
|
||||
const d = Math.floor(h / 24);
|
||||
timeStr = d > 0 ? d + "d" : h + "h";
|
||||
}
|
||||
|
||||
function beginDismiss() {
|
||||
if (state === "visible")
|
||||
state = "dismissing";
|
||||
}
|
||||
|
||||
function finishDismiss() {
|
||||
state = "dismissed";
|
||||
_expireTimer.running = false;
|
||||
notification?.dismiss();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue