diff --git a/Commons/Settings.qml b/Commons/Settings.qml index 097f5e9..b595323 100644 --- a/Commons/Settings.qml +++ b/Commons/Settings.qml @@ -299,6 +299,8 @@ Singleton { property JsonObject notifications: JsonObject { property bool doNotDisturb: false property list monitors: [] + // Last time the user opened the notification history (ms since epoch) + property double lastSeenTs: 0 } // audio diff --git a/Modules/Bar/Widgets/NotificationHistory.qml b/Modules/Bar/Widgets/NotificationHistory.qml index 81ac749..cf39b52 100644 --- a/Modules/Bar/Widgets/NotificationHistory.qml +++ b/Modules/Bar/Widgets/NotificationHistory.qml @@ -74,16 +74,21 @@ NIconButton { z: 2 active: userShowUnreadBadge && (!userHideWhenZero || computeUnreadCount() > 0) sourceComponent: Rectangle { - width: 16 * scaling + id: badge + readonly property int count: computeUnreadCount() + readonly property string label: count <= 99 ? String(count) : "99+" + readonly property real pad: 8 * scaling height: 16 * scaling - radius: width / 2 + width: Math.max(height, textNode.implicitWidth + pad) + radius: height / 2 color: Color.mError border.color: Color.mSurface border.width: 1 - visible: computeUnreadCount() > 0 || !userHideWhenZero + visible: count > 0 || !userHideWhenZero NText { + id: textNode anchors.centerIn: parent - text: Math.min(computeUnreadCount(), 9) + text: badge.label font.pointSize: Style.fontSizeXXS * scaling color: Color.mOnError } diff --git a/Services/NotificationService.qml b/Services/NotificationService.qml index da6ab32..608048e 100644 --- a/Services/NotificationService.qml +++ b/Services/NotificationService.qml @@ -201,12 +201,17 @@ Singleton { const items = historyAdapter.history || [] for (var i = 0; i < items.length; i++) { const it = items[i] + // Coerce legacy second-based timestamps to milliseconds + var ts = it.timestamp + if (typeof ts === "number" && ts < 1e12) { + ts = ts * 1000 + } historyModel.append({ "summary": it.summary || "", "body": it.body || "", "appName": it.appName || "", "urgency": it.urgency, - "timestamp": it.timestamp ? new Date(it.timestamp) : new Date() + "timestamp": ts ? new Date(ts) : new Date() }) } } catch (e) { @@ -225,7 +230,10 @@ Singleton { "body": n.body, "appName": n.appName, "urgency": n.urgency, - "timestamp": (n.timestamp instanceof Date) ? n.timestamp.getTime() : n.timestamp + "timestamp"// Always persist in milliseconds + : (n.timestamp instanceof Date) ? n.timestamp.getTime( + ) : (typeof n.timestamp === "number" + && n.timestamp < 1e12 ? n.timestamp * 1000 : n.timestamp) }) } historyAdapter.history = arr