session-ios/Session/Calls/Call Management/SessionCallManager+CXCallCo...

83 lines
2.6 KiB
Swift
Raw Normal View History

// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
import Foundation
2021-11-07 23:12:18 +01:00
import CallKit
import SessionUtilitiesKit
extension SessionCallManager {
2021-11-09 01:53:38 +01:00
public func startCall(_ call: SessionCall, completion: ((Error?) -> Void)?) {
2021-11-07 23:12:18 +01:00
guard case .offer = call.mode else { return }
guard !call.hasConnected else { return }
2021-11-07 23:12:18 +01:00
reportOutgoingCall(call)
if callController != nil {
let handle = CXHandle(type: .generic, value: call.sessionId)
let startCallAction = CXStartCallAction(call: call.callId, handle: handle)
startCallAction.isVideo = false
let transaction = CXTransaction()
transaction.addAction(startCallAction)
requestTransaction(transaction, completion: completion)
}
else {
startCallAction()
completion?(nil)
}
2021-11-09 01:53:38 +01:00
}
public func answerCall(_ call: SessionCall, completion: ((Error?) -> Void)?) {
if callController != nil {
let answerCallAction = CXAnswerCallAction(call: call.callId)
let transaction = CXTransaction()
transaction.addAction(answerCallAction)
2021-11-09 01:53:38 +01:00
requestTransaction(transaction, completion: completion)
}
else {
answerCallAction()
completion?(nil)
}
2021-11-07 23:12:18 +01:00
}
2021-11-09 01:53:38 +01:00
public func endCall(_ call: SessionCall, completion: ((Error?) -> Void)?) {
if callController != nil {
let endCallAction = CXEndCallAction(call: call.callId)
let transaction = CXTransaction()
transaction.addAction(endCallAction)
2021-11-07 23:12:18 +01:00
requestTransaction(transaction, completion: completion)
}
else {
endCallAction()
completion?(nil)
}
2021-11-07 23:12:18 +01:00
}
// Not currently in use
public func setOnHoldStatus(for call: SessionCall) {
if callController != nil {
let setHeldCallAction = CXSetHeldCallAction(call: call.callId, onHold: true)
let transaction = CXTransaction()
transaction.addAction(setHeldCallAction)
2021-11-07 23:12:18 +01:00
requestTransaction(transaction)
}
2021-11-07 23:12:18 +01:00
}
2021-11-09 01:53:38 +01:00
private func requestTransaction(_ transaction: CXTransaction, completion: ((Error?) -> Void)? = nil) {
callController?.request(transaction) { error in
2021-11-07 23:12:18 +01:00
if let error = error {
SNLog("Error requesting transaction: \(error)")
}
else {
2021-11-07 23:12:18 +01:00
SNLog("Requested transaction successfully")
}
2021-11-09 01:53:38 +01:00
completion?(error)
2021-11-07 23:12:18 +01:00
}
}
}