From c3e3af65b5906426696dc49c8090bbd330ed7e73 Mon Sep 17 00:00:00 2001 From: Benoit Martins Date: Thu, 24 Jul 2025 11:25:24 +0200 Subject: [PATCH] Fix PopupLoadingView for one-to-one and group calls --- .../Fragments/StartConversationFragment.swift | 2 +- .../StartGroupConversationFragment.swift | 2 +- .../StartConversationViewModel.swift | 32 +++++++++++-------- .../ViewModel/StartCallViewModel.swift | 3 +- 4 files changed, 22 insertions(+), 17 deletions(-) diff --git a/Linphone/UI/Main/Conversations/Fragments/StartConversationFragment.swift b/Linphone/UI/Main/Conversations/Fragments/StartConversationFragment.swift index f42802a9d..428fef85c 100644 --- a/Linphone/UI/Main/Conversations/Fragments/StartConversationFragment.swift +++ b/Linphone/UI/Main/Conversations/Fragments/StartConversationFragment.swift @@ -203,7 +203,7 @@ struct StartConversationFragment: View { } .background(.white) - if startConversationViewModel.operationInProgress { + if startConversationViewModel.operationOneToOneInProgress { PopupLoadingView() .background(.black.opacity(0.65)) .onDisappear { diff --git a/Linphone/UI/Main/Conversations/Fragments/StartGroupConversationFragment.swift b/Linphone/UI/Main/Conversations/Fragments/StartGroupConversationFragment.swift index 988884997..03860bd39 100644 --- a/Linphone/UI/Main/Conversations/Fragments/StartGroupConversationFragment.swift +++ b/Linphone/UI/Main/Conversations/Fragments/StartGroupConversationFragment.swift @@ -48,7 +48,7 @@ struct StartGroupConversationFragment: View { } } - if startConversationViewModel.operationInProgress { + if startConversationViewModel.operationGroupInProgress { PopupLoadingView() .background(.black.opacity(0.65)) .onDisappear { diff --git a/Linphone/UI/Main/Conversations/ViewModel/StartConversationViewModel.swift b/Linphone/UI/Main/Conversations/ViewModel/StartConversationViewModel.swift index aad5c8471..702c81e71 100644 --- a/Linphone/UI/Main/Conversations/ViewModel/StartConversationViewModel.swift +++ b/Linphone/UI/Main/Conversations/ViewModel/StartConversationViewModel.swift @@ -36,7 +36,8 @@ class StartConversationViewModel: ObservableObject { @Published var participants: [SelectedAddressModel] = [] - @Published var operationInProgress: Bool = false + @Published var operationOneToOneInProgress: Bool = false + @Published var operationGroupInProgress: Bool = false @Published var displayedConversation: ConversationModel? private var chatRoomDelegate: ChatRoomDelegate? @@ -74,7 +75,7 @@ class StartConversationViewModel: ObservableObject { } DispatchQueue.main.async { - self.operationInProgress = true + self.operationGroupInProgress = true } let groupChatRoomSubject = self.messageText @@ -113,7 +114,7 @@ class StartConversationViewModel: ObservableObject { let model = ConversationModel(chatRoom: chatRoom) DispatchQueue.main.async { self.displayedConversation = model - self.operationInProgress = false + self.operationGroupInProgress = false } } else { Log.info( @@ -128,7 +129,7 @@ class StartConversationViewModel: ObservableObject { let model = ConversationModel(chatRoom: chatRoom) DispatchQueue.main.async { self.displayedConversation = model - self.operationInProgress = false + self.operationGroupInProgress = false } } } @@ -137,7 +138,7 @@ class StartConversationViewModel: ObservableObject { Log.error("\(StartConversationViewModel.TAG) \(error)") DispatchQueue.main.async { - self.operationInProgress = false + self.operationGroupInProgress = false ToastViewModel.shared.toastMessage = "Failed_to_create_conversation_error" ToastViewModel.shared.displayToast = true } @@ -156,7 +157,7 @@ class StartConversationViewModel: ObservableObject { } DispatchQueue.main.async { - self.operationInProgress = true + self.operationOneToOneInProgress = true } do { @@ -194,7 +195,7 @@ class StartConversationViewModel: ObservableObject { ) DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - self.operationInProgress = false + self.operationOneToOneInProgress = false ToastViewModel.shared.toastMessage = "Failed_to_create_conversation_error" ToastViewModel.shared.displayToast = true } @@ -220,7 +221,7 @@ class StartConversationViewModel: ObservableObject { let model = ConversationModel(chatRoom: chatRoom) DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { self.displayedConversation = model - self.operationInProgress = false + self.operationOneToOneInProgress = false } } else { Log.info("\(StartConversationViewModel.TAG) Conversation isn't in Created state yet (state is \(state)), wait for it") @@ -233,14 +234,14 @@ class StartConversationViewModel: ObservableObject { let model = ConversationModel(chatRoom: chatRoom) DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { self.displayedConversation = model - self.operationInProgress = false + self.operationOneToOneInProgress = false } } } catch { Log.error("\(StartConversationViewModel.TAG) Failed to create 1-1 conversation with \(remote.asStringUriOnly())") DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - self.operationInProgress = false + self.operationOneToOneInProgress = false ToastViewModel.shared.toastMessage = "Failed_to_create_conversation_error" ToastViewModel.shared.displayToast = true } @@ -252,7 +253,7 @@ class StartConversationViewModel: ObservableObject { let model = ConversationModel(chatRoom: existingChatRoom!) DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { self.displayedConversation = model - self.operationInProgress = false + self.operationOneToOneInProgress = false } } } catch { @@ -271,7 +272,8 @@ class StartConversationViewModel: ObservableObject { } self.chatRoomDelegate = nil DispatchQueue.main.async { - self.operationInProgress = false + self.operationOneToOneInProgress = false + self.operationGroupInProgress = false ToastViewModel.shared.toastMessage = "Failed_to_create_conversation_error" ToastViewModel.shared.displayToast = true } @@ -290,7 +292,8 @@ class StartConversationViewModel: ObservableObject { let model = ConversationModel(chatRoom: chatRoom) DispatchQueue.main.async { self.displayedConversation = model - self.operationInProgress = false + self.operationOneToOneInProgress = false + self.operationGroupInProgress = false } } else if state == ChatRoom.State.CreationFailed { Log.error("\(StartConversationViewModel.TAG) Conversation \(id) creation has failed!") @@ -299,7 +302,8 @@ class StartConversationViewModel: ObservableObject { } self.chatRoomDelegate = nil DispatchQueue.main.async { - self.operationInProgress = false + self.operationOneToOneInProgress = false + self.operationGroupInProgress = false ToastViewModel.shared.toastMessage = "Failed_to_create_conversation_error" ToastViewModel.shared.displayToast = true } diff --git a/Linphone/UI/Main/History/ViewModel/StartCallViewModel.swift b/Linphone/UI/Main/History/ViewModel/StartCallViewModel.swift index 9efe8afe2..736f79aeb 100644 --- a/Linphone/UI/Main/History/ViewModel/StartCallViewModel.swift +++ b/Linphone/UI/Main/History/ViewModel/StartCallViewModel.swift @@ -91,7 +91,6 @@ class StartCallViewModel: ObservableObject { ) if let conference = LinphoneUtils.createGroupCall(core: core, account: account, subject: self.messageText) { - self.conferenceAddDelegate(core: core, conference: conference) let callParams = try? core.createCallParams(call: nil) if let callParams = callParams { callParams.videoEnabled = true @@ -99,6 +98,8 @@ class StartCallViewModel: ObservableObject { Log.info("\(ConversationModel.TAG) Inviting \(participantsList.count) participant(s) into newly created conference") + self.conferenceAddDelegate(core: core, conference: conference) + try conference.inviteParticipants(addresses: participantsList, params: callParams) DispatchQueue.main.async {