diff --git a/SessionMessagingKit/Sending & Receiving/Errors/MessageReceiverError.swift b/SessionMessagingKit/Sending & Receiving/Errors/MessageReceiverError.swift index 3c5ed9054..31414c728 100644 --- a/SessionMessagingKit/Sending & Receiving/Errors/MessageReceiverError.swift +++ b/SessionMessagingKit/Sending & Receiving/Errors/MessageReceiverError.swift @@ -23,6 +23,7 @@ public enum MessageReceiverError: LocalizedError { case invalidConfigMessageHandling case requiredThreadNotInConfig case outdatedMessage + case duplicatedCall public var isRetryable: Bool { switch self { @@ -72,6 +73,7 @@ public enum MessageReceiverError: LocalizedError { case .invalidConfigMessageHandling: return "Invalid handling of a config message." 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 .duplicatedCall: return "Duplicate call." } } } diff --git a/SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+Calls.swift b/SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+Calls.swift index 8afbc8046..477907e04 100644 --- a/SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+Calls.swift +++ b/SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+Calls.swift @@ -270,12 +270,15 @@ extension MessageReceiver { state: CallMessage.MessageInfo.State? = nil, using dependencies: Dependencies ) throws -> Interaction? { - guard - (try? Interaction + guard ( + try? Interaction .filter(Interaction.Columns.variant == Interaction.Variant.infoCall) .filter(Interaction.Columns.messageUuid == message.uuid) - .isEmpty(db)) - .defaulting(to: false), + .isEmpty(db) + ).defaulting(to: false) + else { throw MessageReceiverError.duplicatedCall } + + guard let sender: String = message.sender, let thread: SessionThread = try SessionThread.fetchOne(db, id: sender), !thread.isMessageRequest(db)