fix notification service extension creates duplicated call info message
This commit is contained in:
parent
db71664feb
commit
0237df8023
|
@ -63,7 +63,7 @@ extension AppDelegate {
|
||||||
let thread = TSContactThread.getOrCreateThread(withContactSessionID: message.sender!, transaction: transaction)
|
let thread = TSContactThread.getOrCreateThread(withContactSessionID: message.sender!, transaction: transaction)
|
||||||
let infoMessage = TSInfoMessage.from(message, associatedWith: thread)
|
let infoMessage = TSInfoMessage.from(message, associatedWith: thread)
|
||||||
infoMessage.save(with: transaction)
|
infoMessage.save(with: transaction)
|
||||||
receivedCalls.insert(message.uuid!)
|
receivedCalls.insert(uuid)
|
||||||
Storage.shared.setReceivedCalls(to: receivedCalls, for: sender, using: transaction)
|
Storage.shared.setReceivedCalls(to: receivedCalls, for: sender, using: transaction)
|
||||||
return infoMessage
|
return infoMessage
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,9 +78,7 @@ public final class NotificationServiceExtension : UNNotificationServiceExtension
|
||||||
guard case .preOffer = callMessage.kind else { return self.completeSilenty() }
|
guard case .preOffer = callMessage.kind else { return self.completeSilenty() }
|
||||||
if !SSKPreferences.areCallsEnabled {
|
if !SSKPreferences.areCallsEnabled {
|
||||||
if let sender = callMessage.sender, let thread = TSContactThread.fetch(for: sender, using: transaction), !thread.isMessageRequest(using: transaction) {
|
if let sender = callMessage.sender, let thread = TSContactThread.fetch(for: sender, using: transaction), !thread.isMessageRequest(using: transaction) {
|
||||||
let infoMessage = TSInfoMessage.from(callMessage, associatedWith: thread)
|
self.insertCallInfoMessage(for: callMessage, in: thread, reason: .permissionDenied, using: transaction)
|
||||||
infoMessage.updateCallInfoMessage(.permissionDenied, using: transaction)
|
|
||||||
SSKEnvironment.shared.notificationsManager?.notifyUser(forIncomingCall: infoMessage, in: thread, transaction: transaction)
|
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@ -92,9 +90,7 @@ public final class NotificationServiceExtension : UNNotificationServiceExtension
|
||||||
message.kind = .endCall
|
message.kind = .endCall
|
||||||
SNLog("[Calls] Sending end call message because there is an ongoing call.")
|
SNLog("[Calls] Sending end call message because there is an ongoing call.")
|
||||||
MessageSender.sendNonDurably(message, in: thread, using: transaction).retainUntilComplete()
|
MessageSender.sendNonDurably(message, in: thread, using: transaction).retainUntilComplete()
|
||||||
let infoMessage = TSInfoMessage.from(callMessage, associatedWith: thread)
|
self.insertCallInfoMessage(for: callMessage, in: thread, reason: .missed, using: transaction)
|
||||||
infoMessage.updateCallInfoMessage(.missed, using: transaction)
|
|
||||||
SSKEnvironment.shared.notificationsManager?.notifyUser(forIncomingCall: infoMessage, in: thread, transaction: transaction)
|
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@ -112,6 +108,18 @@ public final class NotificationServiceExtension : UNNotificationServiceExtension
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func insertCallInfoMessage(for message: CallMessage, in thread: TSThread, reason: TSInfoMessageCallState, using transaction: YapDatabaseReadWriteTransaction) {
|
||||||
|
guard let sender = message.sender, let uuid = message.uuid else { return }
|
||||||
|
var receivedCalls = Storage.shared.getReceivedCalls(for: sender, using: transaction)
|
||||||
|
if !receivedCalls.contains(uuid) {
|
||||||
|
let infoMessage = TSInfoMessage.from(message, associatedWith: thread)
|
||||||
|
infoMessage.updateCallInfoMessage(reason, using: transaction)
|
||||||
|
SSKEnvironment.shared.notificationsManager?.notifyUser(forIncomingCall: infoMessage, in: thread, transaction: transaction)
|
||||||
|
receivedCalls.insert(uuid)
|
||||||
|
Storage.shared.setReceivedCalls(to: receivedCalls, for: sender, using: transaction)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// MARK: Setup
|
// MARK: Setup
|
||||||
|
|
||||||
|
@ -263,6 +271,7 @@ public final class NotificationServiceExtension : UNNotificationServiceExtension
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: Poll for open groups
|
// MARK: Poll for open groups
|
||||||
|
|
||||||
private func pollForOpenGroups() -> [Promise<Void>] {
|
private func pollForOpenGroups() -> [Promise<Void>] {
|
||||||
var promises: [Promise<Void>] = []
|
var promises: [Promise<Void>] = []
|
||||||
let servers = Set(Storage.shared.getAllV2OpenGroups().values.map { $0.server })
|
let servers = Set(Storage.shared.getAllV2OpenGroups().values.map { $0.server })
|
||||||
|
|
Loading…
Reference in New Issue