forked from mirrors/linphone-iphone
Fix displayed chat room reset
This commit is contained in:
parent
4641ef680c
commit
ad54e09253
6 changed files with 72 additions and 35 deletions
|
|
@ -42,7 +42,6 @@ final class CoreContext: ObservableObject {
|
|||
@Published var loggingInProgress: Bool = false
|
||||
@Published var coreIsStarted: Bool = false
|
||||
@Published var accounts: [AccountModel] = []
|
||||
@Published var enteredForeground = false
|
||||
@Published var shortcuts: [ShortcutModel] = []
|
||||
private var mCore: Core!
|
||||
private var mIterateSuscription: AnyCancellable?
|
||||
|
|
|
|||
|
|
@ -1378,7 +1378,6 @@ struct ContentView: View {
|
|||
orientation = newOrientation
|
||||
}
|
||||
.onChange(of: scenePhase) { newPhase in
|
||||
CoreContext.shared.enteredForeground = newPhase == .active
|
||||
orientation = UIDevice.current.orientation
|
||||
if newPhase == .active {
|
||||
conversationsListViewModel.computeChatRoomsList(filter: "")
|
||||
|
|
|
|||
|
|
@ -374,10 +374,8 @@ struct ChatBubbleView: View {
|
|||
}
|
||||
}
|
||||
.onTapGesture {
|
||||
if !CoreContext.shared.enteredForeground {
|
||||
conversationViewModel.selectedMessageToDisplayDetails = eventLogMessage
|
||||
conversationViewModel.prepareBottomSheetForDeliveryStatus()
|
||||
}
|
||||
conversationViewModel.selectedMessageToDisplayDetails = eventLogMessage
|
||||
conversationViewModel.prepareBottomSheetForDeliveryStatus()
|
||||
}
|
||||
.disabled(conversationViewModel.selectedMessage != nil)
|
||||
.padding(.top, -4)
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import UniformTypeIdentifiers
|
|||
// swiftlint:disable type_body_length
|
||||
struct ConversationFragment: View {
|
||||
|
||||
@Environment(\.scenePhase) var scenePhase
|
||||
@State private var orientation = UIDevice.current.orientation
|
||||
private var idiom: UIUserInterfaceIdiom { UIDevice.current.userInterfaceIdiom }
|
||||
|
||||
|
|
@ -162,6 +163,11 @@ struct ConversationFragment: View {
|
|||
.background(Color.gray100.ignoresSafeArea(.keyboard))
|
||||
}
|
||||
}
|
||||
.onChange(of: scenePhase) { newPhase in
|
||||
if newPhase == .active {
|
||||
conversationViewModel.resetDisplayedChatRoom()
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationViewStyle(.stack)
|
||||
}
|
||||
|
|
@ -662,7 +668,7 @@ struct ConversationFragment: View {
|
|||
.focused($isMessageTextFocused)
|
||||
.padding(.vertical, 5)
|
||||
.onChange(of: conversationViewModel.messageText) { text in
|
||||
if !text.isEmpty && !CoreContext.shared.enteredForeground {
|
||||
if !text.isEmpty {
|
||||
conversationViewModel.compose()
|
||||
}
|
||||
}
|
||||
|
|
@ -675,7 +681,7 @@ struct ConversationFragment: View {
|
|||
.default_text_style(styleSize: 15)
|
||||
.focused($isMessageTextFocused)
|
||||
.onChange(of: conversationViewModel.messageText) { text in
|
||||
if !text.isEmpty && !CoreContext.shared.enteredForeground {
|
||||
if !text.isEmpty {
|
||||
conversationViewModel.compose()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -190,20 +190,13 @@ struct ConversationRow: View {
|
|||
.listRowSeparator(.hidden)
|
||||
.background(.white)
|
||||
.onReceive(pub) { _ in
|
||||
if CoreContext.shared.enteredForeground && conversationViewModel.displayedConversation != nil
|
||||
&& (navigationManager.peerAddr == nil || navigationManager.peerAddr == conversationViewModel.displayedConversation!.remoteSipUri) {
|
||||
if conversationViewModel.displayedConversation != nil {
|
||||
conversationViewModel.resetDisplayedChatRoom(conversationsList: conversationsListViewModel.conversationsList)
|
||||
}
|
||||
}
|
||||
|
||||
CoreContext.shared.enteredForeground = false
|
||||
|
||||
/*
|
||||
if navigationManager.peerAddr != nil
|
||||
&& conversation.remoteSipUri.contains(navigationManager.peerAddr!) {
|
||||
conversationViewModel.getChatRoomWithStringAddress(conversationsList: conversationsListViewModel.conversationsList, stringAddr: navigationManager.peerAddr!)
|
||||
navigationManager.peerAddr = nil
|
||||
}
|
||||
*/
|
||||
}
|
||||
.onTapGesture {
|
||||
conversationViewModel.changeDisplayedChatRoom(conversationModel: conversation)
|
||||
|
|
|
|||
|
|
@ -165,6 +165,46 @@ class ConversationViewModel: ObservableObject {
|
|||
}
|
||||
}
|
||||
|
||||
func addConversationDelegate(chatRoom: ChatRoom) {
|
||||
let chatRoomDelegate = ChatRoomDelegateStub( onIsComposingReceived: { (_: ChatRoom, _: Address, _: Bool) in
|
||||
self.computeComposingLabel()
|
||||
}, onChatMessagesReceived: { (_: ChatRoom, eventLogs: [EventLog]) in
|
||||
self.getNewMessages(eventLogs: eventLogs)
|
||||
}, onChatMessageSending: { (_: ChatRoom, eventLog: EventLog) in
|
||||
self.getNewMessages(eventLogs: [eventLog])
|
||||
}, onParticipantAdded: { (_: ChatRoom, eventLogs: EventLog) in
|
||||
self.getNewMessages(eventLogs: [eventLogs])
|
||||
self.getParticipantConversationModel()
|
||||
}, onParticipantRemoved: { (_: ChatRoom, eventLogs: EventLog) in
|
||||
self.getNewMessages(eventLogs: [eventLogs])
|
||||
self.getParticipantConversationModel()
|
||||
}, onParticipantAdminStatusChanged: { (_: ChatRoom, eventLogs: EventLog) in
|
||||
self.getNewMessages(eventLogs: [eventLogs])
|
||||
self.getParticipantConversationModel()
|
||||
}, onSubjectChanged: { (_: ChatRoom, eventLogs: EventLog) in
|
||||
self.getNewMessages(eventLogs: [eventLogs])
|
||||
}, onConferenceJoined: {(_: ChatRoom, eventLog: EventLog) in
|
||||
self.getNewMessages(eventLogs: [eventLog])
|
||||
if self.displayedConversation != nil {
|
||||
DispatchQueue.main.async {
|
||||
self.displayedConversation!.isReadOnly = false
|
||||
}
|
||||
}
|
||||
}, onConferenceLeft: {(_: ChatRoom, eventLog: EventLog) in
|
||||
self.getNewMessages(eventLogs: [eventLog])
|
||||
if self.displayedConversation != nil {
|
||||
DispatchQueue.main.async {
|
||||
self.displayedConversation!.isReadOnly = true
|
||||
}
|
||||
}
|
||||
}, onEphemeralEvent: {(_: ChatRoom, eventLogs: EventLog) in
|
||||
self.getNewMessages(eventLogs: [eventLogs])
|
||||
}, onEphemeralMessageDeleted: {(_: ChatRoom, eventLog: EventLog) in
|
||||
self.removeMessage(eventLog)
|
||||
})
|
||||
self.chatRoomDelegateHolder = ChatRoomDelegateHolder(chatroom: chatRoom, delegate: chatRoomDelegate)
|
||||
}
|
||||
|
||||
func addChatMessageDelegate(message: ChatMessage) {
|
||||
if self.displayedConversation != nil {
|
||||
var statusTmp: Message.Status? = .sending
|
||||
|
|
@ -1744,31 +1784,33 @@ class ConversationViewModel: ObservableObject {
|
|||
self.getMessages()
|
||||
}
|
||||
|
||||
func resetDisplayedChatRoom(conversationsList: [ConversationModel]) {
|
||||
func resetDisplayedChatRoom() { //(conversationsList: [ConversationModel]) {
|
||||
/*
|
||||
guard !conversationsList.isEmpty else {
|
||||
Log.info("\(ConversationViewModel.TAG) The conversation list is empty.")
|
||||
return
|
||||
}
|
||||
|
||||
*/
|
||||
if !self.conversationMessagesSection.isEmpty && !self.conversationMessagesSection[0].rows.isEmpty {
|
||||
if let displayedConversation = self.displayedConversation {
|
||||
conversationsList.forEach { conversation in
|
||||
if conversation.id == displayedConversation.id {
|
||||
self.displayedConversation = conversation
|
||||
self.computeComposingLabel()
|
||||
|
||||
if let updatedDisplayedConversation = self.displayedConversation {
|
||||
CoreContext.shared.doOnCoreQueue { _ in
|
||||
let historyEventsSizeTmp = updatedDisplayedConversation.chatRoom.historyEventsSize
|
||||
if self.displayedConversationHistorySize < historyEventsSizeTmp {
|
||||
let eventLogList = updatedDisplayedConversation.chatRoom.getHistoryRangeEvents(begin: 0, end: historyEventsSizeTmp - self.displayedConversationHistorySize)
|
||||
|
||||
if !eventLogList.isEmpty {
|
||||
self.getNewMessages(eventLogs: eventLogList)
|
||||
}
|
||||
}
|
||||
//conversationsList.forEach { conversation in
|
||||
CoreContext.shared.doOnCoreQueue { core in
|
||||
let nilParams: ConferenceParams? = nil
|
||||
if let newChatRoom = core.searchChatRoom(params: nilParams, localAddr: nil, remoteAddr: displayedConversation.chatRoom.peerAddress, participants: nil) {
|
||||
if LinphoneUtils.getChatRoomId(room: newChatRoom) == displayedConversation.id {
|
||||
self.addConversationDelegate(chatRoom: newChatRoom)
|
||||
let conversation = ConversationModel(chatRoom: newChatRoom)
|
||||
DispatchQueue.main.async {
|
||||
self.displayedConversation = conversation
|
||||
}
|
||||
self.computeComposingLabel()
|
||||
let historyEventsSizeTmp = newChatRoom.historyEventsSize
|
||||
if self.displayedConversationHistorySize < historyEventsSizeTmp {
|
||||
let eventLogList = newChatRoom.getHistoryRangeEvents(begin: 0, end: historyEventsSizeTmp - self.displayedConversationHistorySize)
|
||||
|
||||
self.addConversationDelegate()
|
||||
if !eventLogList.isEmpty {
|
||||
self.getNewMessages(eventLogs: eventLogList)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue