From 675c4c3a072b30f9b412e109da627ef7e6405d99 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sun, 25 May 2025 20:36:52 +0200 Subject: [PATCH] notification service: add groups --- .config/quickshell/services/Notifications.qml | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/.config/quickshell/services/Notifications.qml b/.config/quickshell/services/Notifications.qml index c2cdc9f76..81161dab5 100644 --- a/.config/quickshell/services/Notifications.qml +++ b/.config/quickshell/services/Notifications.qml @@ -19,6 +19,36 @@ Singleton { // can already contain higher IDs. This is for avoiding id collisions property int idOffset + function appNameListForGroups(groups) { + return Object.keys(groups).sort((a, b) => { + // Sort by time, descending + return groups[b].time - groups[a].time; + }); + } + + function groupsForList(list) { + const groups = {}; + list.forEach((notif) => { + if (!groups[notif.appName]) { + groups[notif.appName] = { + appName: notif.appName, + appIcon: notif.appIcon, + notifications: [], + time: 0 + }; + } + groups[notif.appName].notifications.push(notif); + // Always set to the latest time in the group + groups[notif.appName].time = notif.time; + }); + return groups; + } + + property var groupsByAppName: groupsForList(root.list) + property var popupGroupsByAppName: groupsForList(root.popupList) + property var appNameList: appNameListForGroups(root.groupsByAppName) + property var popupAppNameList: appNameListForGroups(root.popupGroupsByAppName) + signal initDone(); signal notify(notification: var); signal discard(id: var);