feat: sql database for notifications

This commit is contained in:
2026-11-01 12:43:21 +01:00
parent 8271e5d013
commit f8101b2807
11 changed files with 1667 additions and 281 deletions
+2 -1
View File
@@ -5,6 +5,7 @@ import Quickshell.Widgets
import QtQuick
import ZShell.Config
import ZShell.Components
import ZShell.Services
import qs.Components
import qs.Daemons
import qs.Helpers
@@ -97,7 +98,7 @@ Item {
property int idx
required property int index
required property NotifServer.Notif modelData
required property NotificationRow modelData
readonly property alias nonAnimHeight: notif.nonAnimHeight
implicitHeight: notif.implicitHeight + (idx === 0 ? 0 : Tokens.spacing.small)
+13 -8
View File
@@ -5,7 +5,7 @@ import QtQuick.Shapes
import Quickshell
import Quickshell.Services.Notifications
import ZShell.Components
import qs.Daemons
import ZShell.Services
import qs.Helpers
import ZShell.Config
import qs.Components
@@ -17,7 +17,7 @@ CustomRect {
property bool expanded: Config.notifs.openExpanded
readonly property bool hasAppIcon: modelData.appIcon.length > 0
readonly property bool hasImage: modelData.image.length > 0
required property NotifServer.Notif modelData
required property NotificationRow modelData
readonly property int nonAnimHeight: summary.implicitHeight + (root.expanded ? Tokens.spacing.extraSmall * 2 + appName.height + body.height + actions.height + actions.anchors.topMargin : bodyPreview.height) + inner.anchors.margins * 2
color: root.modelData.urgency === NotificationUrgency.Critical ? Colors.palette.m3secondaryContainer : Colors.tPalette.m3surfaceContainer
@@ -56,10 +56,10 @@ CustomRect {
if (actions.length === 1)
actions[0].invoke();
}
onEntered: root.modelData.timer.stop()
onEntered: root.modelData.pausePopup()
onExited: {
if (!pressed)
root.modelData.timer.start();
root.modelData.resumePopup();
}
onPositionChanged: event => {
if (pressed) {
@@ -69,14 +69,14 @@ CustomRect {
}
}
onPressed: event => {
root.modelData.timer.stop();
root.modelData.pausePopup();
startY = event.y;
if (event.button === Qt.MiddleButton)
root.modelData.close();
}
onReleased: event => {
if (!containsMouse)
root.modelData.timer.start();
root.modelData.resumePopup();
if (Math.abs(root.x) < root.implicitWidth * Config.notifs.clearThreshold)
root.x = 0;
@@ -200,7 +200,7 @@ CustomRect {
radiusX: progressIndicator.width / 2 - Tokens.padding.extraSmall / 2
radiusY: progressIndicator.height / 2 - Tokens.padding.extraSmall / 2
startAngle: -90
sweepAngle: ((root.modelData.hints.value ?? 0) / 100) * 360
sweepAngle: (root.modelData.progress / 100) * 360
Behavior on sweepAngle {
Anim {
@@ -477,7 +477,12 @@ CustomRect {
shapeMorph: true
text: modelData.text
onClicked: modelData.invoke()
onClicked: {
if (modelData.invokable)
modelData.invoke();
else if (!root.modelData.resident)
root.modelData.close();
}
}
}