// 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 } }