Various fixes in view model update propagation

This commit is contained in:
Christophe Deschamps 2022-11-23 08:59:42 +01:00
parent c09519bcc1
commit 6a4ef41ab5
4 changed files with 23 additions and 9 deletions

View file

@ -199,5 +199,13 @@ class CallData {
isPaused.value = isCallPaused()
}
func isOngoingSingleCall() -> Bool {
return !isOutGoing() && !isInComing() && call.conference == nil && call.callLog?.wasConference() != true
}
func isOngoingConference() -> Bool {
return !isOutGoing() && !isInComing() && (call.conference != nil || call.callLog?.wasConference() == true)
}
}

View file

@ -39,6 +39,9 @@ import linphonesw
currentCallView = ActiveCallView()
fullScreenMutableContainerView.addSubview(currentCallView!)
CallsViewModel.shared.currentCallData.readCurrentAndObserve { (currentCallData) in
guard currentCallData??.isOngoingSingleCall() == true else {
return
}
self.currentCallView!.callData = currentCallData != nil ? currentCallData! : nil
currentCallData??.isRemotelyPaused.readCurrentAndObserve { remotelyPaused in
self.callPausedByRemoteView?.isHidden = remotelyPaused != true

View file

@ -57,8 +57,11 @@ class ActiveCallView: UIView { // = currentCall
var callData: CallData? = nil {
didSet {
duration.call = callData?.call
callData?.call.remoteAddress.map {
guard let callData = callData else {
return
}
duration.call = callData.call
callData.call.remoteAddress.map {
avatar.fillFromAddress(address: $0)
if let displayName = $0.addressBookEnhancedDisplayName() {
displayNameTop.text = displayName+" - "
@ -66,13 +69,13 @@ class ActiveCallView: UIView { // = currentCall
}
sipAddress.text = $0.asStringUriOnly()
}
self.remotelyRecordedIndicator.isRemotelyRecorded = callData?.isRemotelyRecorded
callData?.isRecording.readCurrentAndObserve { (selected) in
self.remotelyRecordedIndicator.isRemotelyRecorded = callData.isRemotelyRecorded
callData.isRecording.readCurrentAndObserve { (selected) in
self.recordCallButtons.forEach {
$0.isSelected = selected == true
}
}
callData?.isPaused.readCurrentAndObserve { (paused) in
callData.isPaused.readCurrentAndObserve { (paused) in
self.pauseCallButtons.forEach {
$0.isSelected = paused == true
}
@ -80,13 +83,11 @@ class ActiveCallView: UIView { // = currentCall
self.localVideo.isHidden = true
}
}
callData?.isRemotelyRecorded.readCurrentAndObserve { (remotelyRecorded) in
callData.isRemotelyRecorded.readCurrentAndObserve { (remotelyRecorded) in
self.centerSection.removeConstraints().matchParentSideBorders().alignUnder(view:remotelyRecorded == true ? self.remotelyRecordedIndicator : self.upperSection ,withMargin: ActiveCallView.center_view_margin_top).alignParentBottom().done()
self.setNeedsLayout()
}
Core.get().nativeVideoWindow = remoteVideo
Core.get().nativePreviewWindowId = UnsafeMutableRawPointer(Unmanaged.passRetained(localVideo).toOpaque())

View file

@ -63,6 +63,8 @@ class VoipConferenceActiveSpeakerView: UIView, UICollectionViewDataSource, UICol
var conferenceViewModel: ConferenceViewModel? = nil {
didSet {
if let model = conferenceViewModel {
self.activeSpeakerVideoView.isHidden = true
self.activeSpeakerVideoViewAlone.isHidden = true
self.setJoininngSpeakerState(enabled: false)
self.activeSpeakerAvatar.showAsAvatarIcon()
model.subject.readCurrentAndObserve { (subject) in