diff --git a/Session/Calls/Call Management/SessionCall.swift b/Session/Calls/Call Management/SessionCall.swift index 5e750c724..63c94149f 100644 --- a/Session/Calls/Call Management/SessionCall.swift +++ b/Session/Calls/Call Management/SessionCall.swift @@ -69,6 +69,7 @@ public final class SessionCall: NSObject, WebRTCSessionDelegate { case local case remote case unanswered + case answeredElsewhere } // MARK: Audio I/O mode @@ -245,6 +246,9 @@ public final class SessionCall: NSObject, WebRTCSessionDelegate { newMessageBody = self.isOutgoing ? NSLocalizedString("call_rejected", comment: "") : NSLocalizedString("call_missing", comment: "") case .unanswered: newMessageBody = NSLocalizedString("call_timeout", comment: "") + case .answeredElsewhere: + newMessageBody = messageToUpdate.body! + shouldMarkAsRead = true } } messageToUpdate.updateCall(withNewBody: newMessageBody, transaction: transaction) diff --git a/Session/Calls/Call Management/SessionCallManager.swift b/Session/Calls/Call Management/SessionCallManager.swift index 823f23477..990833cfb 100644 --- a/Session/Calls/Call Management/SessionCallManager.swift +++ b/Session/Calls/Call Management/SessionCallManager.swift @@ -105,8 +105,8 @@ public final class SessionCallManager: NSObject { guard let call = currentCall else { return } if let reason = reason { self.provider.reportCall(with: call.callID, endedAt: nil, reason: reason) - if reason == .answeredElsewhere { return } switch (reason) { + case .answeredElsewhere: call.updateCallMessage(mode: .answeredElsewhere) case .unanswered: call.updateCallMessage(mode: .unanswered) case .declinedElsewhere: call.updateCallMessage(mode: .local) default: call.updateCallMessage(mode: .remote) diff --git a/SessionMessagingKit/Sending & Receiving/MessageSender.swift b/SessionMessagingKit/Sending & Receiving/MessageSender.swift index cdfb80415..bbe0a1c56 100644 --- a/SessionMessagingKit/Sending & Receiving/MessageSender.swift +++ b/SessionMessagingKit/Sending & Receiving/MessageSender.swift @@ -132,13 +132,13 @@ public final class MessageSender : NSObject { guard message.isValid else { handleFailure(with: Error.invalidMessage, using: transaction); return promise } // Stop here if this is a self-send, unless it's: // • a configuration message - // • a sync message (visible message or expiration timer update message) + // • a sync message // • a closed group control message of type `new` // • an unsend request // • a call message of type `answer` or `endCall` - guard !isSelfSend || shouldSyncMessage(message) else { + guard !isSelfSend || isSyncMessage || shouldSyncMessage(message) else { storage.write(with: { transaction in - MessageSender.handleSuccessfulMessageSend(message, to: destination, isSyncMessage: isSyncMessage, using: transaction) + MessageSender.handleSuccessfulMessageSend(message, to: destination, using: transaction) seal.fulfill(()) }, completion: { }) return promise @@ -396,6 +396,6 @@ public final class MessageSender : NSObject { } else { return false } } ?? false - return isNewClosedGroupControlMessage || isCallControlMessage || message is ConfigurationMessage || message is UnsendRequest || message is VisibleMessage || message is ExpirationTimerUpdate + return isNewClosedGroupControlMessage || isCallControlMessage || message is ConfigurationMessage || message is UnsendRequest } }