aboutsummaryrefslogtreecommitdiff
path: root/syncapi/streams/stream_notificationdata.go
diff options
context:
space:
mode:
authorTill <2353100+S7evinK@users.noreply.github.com>2022-09-27 15:01:34 +0200
committerGitHub <noreply@github.com>2022-09-27 15:01:34 +0200
commit249b32c4f3ee2e01e6f89435e0c7a5786d2ae3a1 (patch)
tree1fc229f6a4bafa88afd7c1db3eda3ff3a59b021e /syncapi/streams/stream_notificationdata.go
parentf18bce93cc3e7e5f57ebc55d309360b7f8703553 (diff)
Refactor notifications (#2688)
This PR changes the handling of notifications - removes the `StreamEvent` and `ReadUpdate` stream - listens on the `OutputRoomEvent` stream in the UserAPI to inform the SyncAPI about unread notifications - listens on the `OutputReceiptEvent` stream in the UserAPI to set receipts/update notifications - sets the `read_markers` directly from within the internal UserAPI Co-authored-by: Neil Alexander <neilalexander@users.noreply.github.com>
Diffstat (limited to 'syncapi/streams/stream_notificationdata.go')
-rw-r--r--syncapi/streams/stream_notificationdata.go23
1 files changed, 13 insertions, 10 deletions
diff --git a/syncapi/streams/stream_notificationdata.go b/syncapi/streams/stream_notificationdata.go
index 8ba9e07c..33872734 100644
--- a/syncapi/streams/stream_notificationdata.go
+++ b/syncapi/streams/stream_notificationdata.go
@@ -30,26 +30,29 @@ func (p *NotificationDataStreamProvider) CompleteSync(
func (p *NotificationDataStreamProvider) IncrementalSync(
ctx context.Context,
req *types.SyncRequest,
- from, to types.StreamPosition,
+ from, _ types.StreamPosition,
) types.StreamPosition {
- // We want counts for all possible rooms, so always start from zero.
- countsByRoom, err := p.DB.GetUserUnreadNotificationCounts(ctx, req.Device.UserID, from, to)
+ // Get the unread notifications for rooms in our join response.
+ // This is to ensure clients always have an unread notification section
+ // and can display the correct numbers.
+ countsByRoom, err := p.DB.GetUserUnreadNotificationCountsForRooms(ctx, req.Device.UserID, req.Rooms)
if err != nil {
- req.Log.WithError(err).Error("GetUserUnreadNotificationCounts failed")
+ req.Log.WithError(err).Error("GetUserUnreadNotificationCountsForRooms failed")
return from
}
- // We're merely decorating existing rooms. Note that the Join map
- // values are not pointers.
+ // We're merely decorating existing rooms.
for roomID, jr := range req.Response.Rooms.Join {
counts := countsByRoom[roomID]
if counts == nil {
continue
}
-
- jr.UnreadNotifications.HighlightCount = counts.UnreadHighlightCount
- jr.UnreadNotifications.NotificationCount = counts.UnreadNotificationCount
+ jr.UnreadNotifications = &types.UnreadNotifications{
+ HighlightCount: counts.UnreadHighlightCount,
+ NotificationCount: counts.UnreadNotificationCount,
+ }
req.Response.Rooms.Join[roomID] = jr
}
- return to
+
+ return p.LatestPosition(ctx)
}