mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 21:33:26 +00:00
Stop relying on the NotificationCenter for removing delivered push notifications:
- this will improve the architecture but more importantly will remove some very flakey unit tests
This commit is contained in:
committed by
Stefan Ceriu
parent
891315ef04
commit
4d513f9ed1
@@ -33,7 +33,6 @@ final class NotificationManager: NSObject, NotificationManagerProtocol {
|
||||
self.notificationCenter = notificationCenter
|
||||
self.appSettings = appSettings
|
||||
super.init()
|
||||
addObservers()
|
||||
}
|
||||
|
||||
// MARK: NotificationManagerProtocol
|
||||
@@ -100,8 +99,8 @@ final class NotificationManager: NSObject, NotificationManagerProtocol {
|
||||
guard let self else { return }
|
||||
|
||||
if await notificationCenter.authorizationStatus() == .authorized {
|
||||
await MainActor.run {
|
||||
delegate?.registerForRemoteNotifications()
|
||||
await MainActor.run { [weak self] in
|
||||
self?.delegate?.registerForRemoteNotifications()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -128,6 +127,22 @@ final class NotificationManager: NSObject, NotificationManagerProtocol {
|
||||
}
|
||||
}
|
||||
|
||||
func removeDeliveredMessageNotifications(for roomID: String) async {
|
||||
let notificationsIdentifiers = await notificationCenter
|
||||
.deliveredNotifications()
|
||||
.filter { $0.request.content.roomID == roomID }
|
||||
.map(\.request.identifier)
|
||||
notificationCenter.removeDeliveredNotifications(withIdentifiers: notificationsIdentifiers)
|
||||
}
|
||||
|
||||
func removeDeliveredInviteNotifications() async {
|
||||
let notificationsIdentifiers = await notificationCenter
|
||||
.deliveredNotifications()
|
||||
.filter { $0.request.content.categoryIdentifier == NotificationConstants.Category.invite }
|
||||
.map(\.request.identifier)
|
||||
notificationCenter.removeDeliveredNotifications(withIdentifiers: notificationsIdentifiers)
|
||||
}
|
||||
|
||||
private func setPusher(with deviceToken: Data, clientProxy: ClientProxyProtocol) async -> Bool {
|
||||
do {
|
||||
let defaultPayload = APNSPayload(aps: APSInfo(mutableContent: 1,
|
||||
@@ -177,47 +192,6 @@ final class NotificationManager: NSObject, NotificationManagerProtocol {
|
||||
delegate?.unregisterForRemoteNotifications()
|
||||
}
|
||||
}
|
||||
|
||||
private func addObservers() {
|
||||
NotificationCenter
|
||||
.default
|
||||
.publisher(for: .roomMarkedAsRead)
|
||||
.sink { [weak self] notification in
|
||||
guard let roomID = notification.object as? String else {
|
||||
return
|
||||
}
|
||||
self?.removeMessageNotifications(for: roomID)
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
|
||||
NotificationCenter
|
||||
.default
|
||||
.publisher(for: .invitesScreenAppeared)
|
||||
.sink { [weak self] _ in
|
||||
self?.removeInviteNotifications()
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
}
|
||||
|
||||
private func removeMessageNotifications(for roomID: String) {
|
||||
Task {
|
||||
let notificationsIdentifiers = await notificationCenter
|
||||
.deliveredNotifications()
|
||||
.filter { $0.request.content.roomID == roomID }
|
||||
.map(\.request.identifier)
|
||||
notificationCenter.removeDeliveredNotifications(withIdentifiers: notificationsIdentifiers)
|
||||
}
|
||||
}
|
||||
|
||||
private func removeInviteNotifications() {
|
||||
Task {
|
||||
let notificationsIdentifiers = await notificationCenter
|
||||
.deliveredNotifications()
|
||||
.filter { $0.request.content.categoryIdentifier == NotificationConstants.Category.invite }
|
||||
.map(\.request.identifier)
|
||||
notificationCenter.removeDeliveredNotifications(withIdentifiers: notificationsIdentifiers)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - UNUserNotificationCenterDelegate
|
||||
|
||||
@@ -40,4 +40,7 @@ protocol NotificationManagerProtocol: AnyObject {
|
||||
func setUserSession(_ userSession: UserSessionProtocol?)
|
||||
|
||||
func requestAuthorization()
|
||||
|
||||
func removeDeliveredMessageNotifications(for roomID: String) async
|
||||
func removeDeliveredInviteNotifications() async
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user