From cfcd52c5bbf05693ce045e0c6f40b781e0fdbe0e Mon Sep 17 00:00:00 2001 From: Ryan Zhao Date: Thu, 2 Dec 2021 14:41:29 +1100 Subject: [PATCH] minor refactoring to prevent crash after making a call --- .../Calls/Call Management/SessionCall.swift | 18 ++++++++++++++---- SessionMessagingKit/Calls/WebRTCSession.swift | 14 +++----------- .../Messages/Signal/TSInfoMessage+Calls.swift | 2 +- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/Session/Calls/Call Management/SessionCall.swift b/Session/Calls/Call Management/SessionCall.swift index cfdb8bed0..3f7602199 100644 --- a/Session/Calls/Call Management/SessionCall.swift +++ b/Session/Calls/Call Management/SessionCall.swift @@ -182,12 +182,22 @@ public final class SessionCall: NSObject, WebRTCSessionDelegate { // MARK: Actions func startSessionCall() { guard case .offer = mode else { return } - var promise: Promise! + guard let thread = TSContactThread.fetch(uniqueId: TSContactThread.threadID(fromContactSessionID: sessionID)) else { return } + + let message = CallMessage() + message.sender = getUserHexEncodedPublicKey() + message.sentTimestamp = NSDate.millisecondTimestamp() + message.uuid = self.uuid + message.kind = .preOffer + let infoMessage = TSInfoMessage.from(message, associatedWith: thread) + infoMessage.save() + self.callMessageID = infoMessage.uniqueId + + var promise: Promise! Storage.write(with: { transaction in - promise = self.webRTCSession.sendPreOffer(to: self.sessionID, using: transaction) + promise = self.webRTCSession.sendPreOffer(message, in: thread, using: transaction) }, completion: { [weak self] in - let _ = promise.done { messageID in - self?.callMessageID = messageID + let _ = promise.done { Storage.shared.write { transaction in self?.webRTCSession.sendOffer(to: self!.sessionID, using: transaction as! YapDatabaseReadWriteTransaction).retainUntilComplete() } diff --git a/SessionMessagingKit/Calls/WebRTCSession.swift b/SessionMessagingKit/Calls/WebRTCSession.swift index 17fa4ec19..c2312cebc 100644 --- a/SessionMessagingKit/Calls/WebRTCSession.swift +++ b/SessionMessagingKit/Calls/WebRTCSession.swift @@ -117,21 +117,13 @@ public final class WebRTCSession : NSObject, RTCPeerConnectionDelegate { } // MARK: Signaling - public func sendPreOffer(to sessionID: String, using transaction: YapDatabaseReadWriteTransaction) -> Promise { + public func sendPreOffer(_ message: CallMessage, in thread: TSThread, using transaction: YapDatabaseReadWriteTransaction) -> Promise { print("[Calls] Sending pre-offer message.") - guard let thread = TSContactThread.fetch(for: sessionID, using: transaction) else { return Promise(error: Error.noThread) } - let (promise, seal) = Promise.pending() + let (promise, seal) = Promise.pending() DispatchQueue.main.async { - let message = CallMessage() - message.sender = getUserHexEncodedPublicKey() - message.sentTimestamp = NSDate.millisecondTimestamp() - message.uuid = self.uuid - message.kind = .preOffer - let infoMessage = TSInfoMessage.from(message, associatedWith: thread) - infoMessage.save(with: transaction) MessageSender.sendNonDurably(message, in: thread, using: transaction).done2 { print("[Calls] Pre-offer message has been sent.") - seal.fulfill((infoMessage.uniqueId)) + seal.fulfill(()) }.catch2 { error in seal.reject(error) } diff --git a/SessionMessagingKit/Messages/Signal/TSInfoMessage+Calls.swift b/SessionMessagingKit/Messages/Signal/TSInfoMessage+Calls.swift index 05cb4184d..12b8241f9 100644 --- a/SessionMessagingKit/Messages/Signal/TSInfoMessage+Calls.swift +++ b/SessionMessagingKit/Messages/Signal/TSInfoMessage+Calls.swift @@ -12,7 +12,7 @@ } else { callState = .incoming } - let infoMessage = TSInfoMessage.init(timestamp: timestamp, in: thread, messageType: .call) + let infoMessage = TSInfoMessage(timestamp: timestamp, in: thread, messageType: .call) infoMessage.callState = callState return infoMessage }