Fix an issue that a call might be shown after handled in background with CallKit and then opening the app

pull/1061/head
Ryan ZHAO 4 months ago
parent 370eb3e4de
commit 1e70f00976

@ -23,6 +23,7 @@ public enum MessageReceiverError: LocalizedError {
case invalidConfigMessageHandling case invalidConfigMessageHandling
case requiredThreadNotInConfig case requiredThreadNotInConfig
case outdatedMessage case outdatedMessage
case duplicatedCall
public var isRetryable: Bool { public var isRetryable: Bool {
switch self { switch self {
@ -72,6 +73,7 @@ public enum MessageReceiverError: LocalizedError {
case .invalidConfigMessageHandling: return "Invalid handling of a config message." case .invalidConfigMessageHandling: return "Invalid handling of a config message."
case .requiredThreadNotInConfig: return "Required thread not in config." case .requiredThreadNotInConfig: return "Required thread not in config."
case .outdatedMessage: return "Message was sent before a config change which would have removed the message." case .outdatedMessage: return "Message was sent before a config change which would have removed the message."
case .duplicatedCall: return "Duplicate call."
} }
} }
} }

@ -270,12 +270,15 @@ extension MessageReceiver {
state: CallMessage.MessageInfo.State? = nil, state: CallMessage.MessageInfo.State? = nil,
using dependencies: Dependencies using dependencies: Dependencies
) throws -> Interaction? { ) throws -> Interaction? {
guard guard (
(try? Interaction try? Interaction
.filter(Interaction.Columns.variant == Interaction.Variant.infoCall) .filter(Interaction.Columns.variant == Interaction.Variant.infoCall)
.filter(Interaction.Columns.messageUuid == message.uuid) .filter(Interaction.Columns.messageUuid == message.uuid)
.isEmpty(db)) .isEmpty(db)
.defaulting(to: false), ).defaulting(to: false)
else { throw MessageReceiverError.duplicatedCall }
guard
let sender: String = message.sender, let sender: String = message.sender,
let thread: SessionThread = try SessionThread.fetchOne(db, id: sender), let thread: SessionThread = try SessionThread.fetchOne(db, id: sender),
!thread.isMessageRequest(db) !thread.isMessageRequest(db)

Loading…
Cancel
Save