session-ios/Session/Calls/Call Management/SessionCallManager+Action.s...

67 lines
2.0 KiB
Swift

// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
import UIKit
import GRDB
extension SessionCallManager {
@discardableResult
public func startCallAction() -> Bool {
guard let call: CurrentCallProtocol = self.currentCall else { return false }
Storage.shared.writeAsync { db in
call.startSessionCall(db)
}
return true
}
@discardableResult
public func answerCallAction() -> Bool {
guard let call: SessionCall = (self.currentCall as? SessionCall) else { return false }
if let _ = CurrentAppContext().frontmostViewController() as? CallVC {
call.answerSessionCall()
}
else {
guard let presentingVC = CurrentAppContext().frontmostViewController() else { return false } // FIXME: Handle more gracefully
let callVC = CallVC(for: call)
if let conversationVC = presentingVC as? ConversationVC {
callVC.conversationVC = conversationVC
conversationVC.inputAccessoryView?.isHidden = true
conversationVC.inputAccessoryView?.alpha = 0
}
presentingVC.present(callVC, animated: true) {
call.answerSessionCall()
}
}
return true
}
@discardableResult
public func endCallAction() -> Bool {
guard let call: SessionCall = (self.currentCall as? SessionCall) else { return false }
call.endSessionCall()
if call.didTimeout {
reportCurrentCallEnded(reason: .unanswered)
}
else {
reportCurrentCallEnded(reason: nil)
}
return true
}
@discardableResult
public func setMutedCallAction(isMuted: Bool) -> Bool {
guard let call: SessionCall = (self.currentCall as? SessionCall) else { return false }
call.isMuted = isMuted
return true
}
}