From 4658e76d461ce0a2e202e4566095dc6e30b4dc35 Mon Sep 17 00:00:00 2001 From: Ryan Zhao Date: Mon, 6 Dec 2021 16:02:54 +1100 Subject: [PATCH] fix linked device answering/ending call issues --- .../Calls/Call Management/SessionCall.swift | 18 +++++++++++------- .../MessageReceiver+Handling.swift | 5 +++-- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/Session/Calls/Call Management/SessionCall.swift b/Session/Calls/Call Management/SessionCall.swift index 3f7602199..0f9890ad4 100644 --- a/Session/Calls/Call Management/SessionCall.swift +++ b/Session/Calls/Call Management/SessionCall.swift @@ -240,13 +240,17 @@ public final class SessionCall: NSObject, WebRTCSessionDelegate { shouldMarkAsRead = true } else { switch mode { - case .local: shouldMarkAsRead = true - case .remote: break - case .unanswered: break - case .answeredElsewhere: shouldMarkAsRead = true - } - if messageToUpdate.callState == .incoming { - messageToUpdate.updateCallInfoMessage(.missed, using: transaction) + case .local: + shouldMarkAsRead = true + fallthrough + case .remote: + fallthrough + case .unanswered: + if messageToUpdate.callState == .incoming { + messageToUpdate.updateCallInfoMessage(.missed, using: transaction) + } + case .answeredElsewhere: + shouldMarkAsRead = true } } if shouldMarkAsRead { diff --git a/SessionMessagingKit/Sending & Receiving/MessageReceiver+Handling.swift b/SessionMessagingKit/Sending & Receiving/MessageReceiver+Handling.swift index d40222e21..bf9b74793 100644 --- a/SessionMessagingKit/Sending & Receiving/MessageReceiver+Handling.swift +++ b/SessionMessagingKit/Sending & Receiving/MessageReceiver+Handling.swift @@ -269,11 +269,12 @@ extension MessageReceiver { public static func handleCallMessage(_ message: CallMessage, using transaction: Any) { let transaction = transaction as! YapDatabaseReadWriteTransaction - // Ignore call messages from threads without outgoing messages - guard let sender = message.sender, let thread = TSContactThread.fetch(for: sender, using: transaction), thread.hasOutgoingInteraction(with: transaction) else { return } switch message.kind! { case .preOffer: print("[Calls] Received pre-offer message.") + // It is enough just ignoring the pre offers, other call messages + // for this call would be dropped because of no Session call instance + guard let sender = message.sender, let thread = TSContactThread.fetch(for: sender, using: transaction), thread.hasOutgoingInteraction(with: transaction) else { return } handleNewCallOfferMessageIfNeeded?(message, transaction) case .offer: print("[Calls] Received offer message.")