mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 21:33:26 +00:00
Remove delivered notifications for rooms that have meantime become fully read and have messages newer than what's delivered
- this is a best effort solution to cleanup outdated notifications when using multiple clients and reading them elsewhere
This commit is contained in:
committed by
Stefan Ceriu
parent
e14672e1f6
commit
899c33a5ad
@@ -128,6 +128,28 @@ final class NotificationManager: NSObject, NotificationManagerProtocol {
|
||||
.map(\.request.identifier)
|
||||
notificationCenter.removeDeliveredNotifications(withIdentifiers: notificationsIdentifiers)
|
||||
}
|
||||
|
||||
func removeDeliveredNotificationsForFullyReadRooms(_ rooms: [RoomSummary]) async {
|
||||
let roomsToLastMessageDates = rooms
|
||||
.filter { $0.hasUnreadMessages == false }
|
||||
.reduce(into: [:]) { partialResult, roomSummary in
|
||||
partialResult[roomSummary.id] = roomSummary.lastMessageDate
|
||||
}
|
||||
|
||||
let notificationsIdentifiers = await notificationCenter
|
||||
.deliveredNotifications()
|
||||
.filter { notification in
|
||||
guard let roomID = notification.request.content.roomID,
|
||||
let lastMessageDate = roomsToLastMessageDates[roomID] else {
|
||||
return false
|
||||
}
|
||||
|
||||
return notification.date <= lastMessageDate
|
||||
}
|
||||
.map(\.request.identifier)
|
||||
|
||||
notificationCenter.removeDeliveredNotifications(withIdentifiers: notificationsIdentifiers)
|
||||
}
|
||||
|
||||
private func setPusher(with deviceToken: Data, clientProxy: ClientProxyProtocol) async -> Bool {
|
||||
do {
|
||||
|
||||
@@ -33,4 +33,6 @@ protocol NotificationManagerProtocol: AnyObject {
|
||||
func requestAuthorization()
|
||||
|
||||
func removeDeliveredMessageNotifications(for roomID: String) async
|
||||
|
||||
func removeDeliveredNotificationsForFullyReadRooms(_ rooms: [RoomSummary]) async
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user