mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-17 11:08:06 +00:00
Refactored ConversationsView
This commit is contained in:
parent
44f8ee4ae1
commit
dcd80e14bc
8 changed files with 333 additions and 312 deletions
|
|
@ -39,13 +39,12 @@ struct ContentView: View {
|
|||
|
||||
@State private var contactsListViewModel: ContactsListViewModel?
|
||||
@State private var historyListViewModel: HistoryListViewModel?
|
||||
@State private var conversationsListViewModel: ConversationsListViewModel?
|
||||
//@ObservedObject var conversationViewModel: ConversationViewModel
|
||||
|
||||
//@ObservedObject var startConversationViewModel: StartConversationViewModel
|
||||
|
||||
//@ObservedObject var meetingWaitingRoomViewModel: MeetingWaitingRoomViewModel
|
||||
|
||||
//@ObservedObject var conversationsListViewModel: ConversationsListViewModel
|
||||
//@ObservedObject var conversationViewModel: ConversationViewModel
|
||||
|
||||
//@ObservedObject var meetingsListViewModel: MeetingsListViewModel
|
||||
//@ObservedObject var meetingViewModel: MeetingViewModel
|
||||
|
|
@ -170,12 +169,12 @@ struct ContentView: View {
|
|||
.frame(height: geometry.size.height/4)
|
||||
|
||||
ZStack {
|
||||
if historyListViewModel != nil && historyListViewModel!.missedCallsCount > 0 {
|
||||
if let historyListVM = historyListViewModel, historyListVM.missedCallsCount > 0 {
|
||||
VStack {
|
||||
HStack {
|
||||
Text(
|
||||
historyListViewModel!.missedCallsCount < 99
|
||||
? String(historyListViewModel!.missedCallsCount)
|
||||
historyListVM.missedCallsCount < 99
|
||||
? String(historyListVM.missedCallsCount)
|
||||
: "99+"
|
||||
)
|
||||
.foregroundStyle(.white)
|
||||
|
|
@ -189,13 +188,14 @@ struct ContentView: View {
|
|||
.padding(.bottom, 30)
|
||||
.padding(.leading, 30)
|
||||
}
|
||||
|
||||
Button(action: {
|
||||
sharedMainViewModel.changeIndexView(indexViewInt: 1)
|
||||
sharedMainViewModel.displayedFriend = nil
|
||||
sharedMainViewModel.displayedConversation = nil
|
||||
sharedMainViewModel.displayedMeeting = nil
|
||||
if historyListViewModel != nil && historyListViewModel!.missedCallsCount > 0 {
|
||||
historyListViewModel!.resetMissedCallsCount()
|
||||
if let historyListVM = historyListViewModel, historyListVM.missedCallsCount > 0 {
|
||||
historyListVM.resetMissedCallsCount()
|
||||
}
|
||||
}, label: {
|
||||
VStack {
|
||||
|
|
@ -218,13 +218,12 @@ struct ContentView: View {
|
|||
.frame(height: geometry.size.height/4)
|
||||
|
||||
ZStack {
|
||||
/*
|
||||
if conversationsListViewModel.unreadMessages > 0 {
|
||||
if let contactsListVM = conversationsListViewModel, contactsListVM.unreadMessages > 0 {
|
||||
VStack {
|
||||
HStack {
|
||||
Text(
|
||||
conversationsListViewModel.unreadMessages < 99
|
||||
? String(conversationsListViewModel.unreadMessages)
|
||||
contactsListVM.unreadMessages < 99
|
||||
? String(contactsListVM.unreadMessages)
|
||||
: "99+"
|
||||
)
|
||||
.foregroundStyle(.white)
|
||||
|
|
@ -238,7 +237,7 @@ struct ContentView: View {
|
|||
.padding(.bottom, 30)
|
||||
.padding(.leading, 30)
|
||||
}
|
||||
*/
|
||||
|
||||
Button(action: {
|
||||
sharedMainViewModel.changeIndexView(indexViewInt: 2)
|
||||
sharedMainViewModel.displayedFriend = nil
|
||||
|
|
@ -514,10 +513,10 @@ struct ContentView: View {
|
|||
magicSearch.currentFilter = ""
|
||||
magicSearch.searchForContacts(
|
||||
sourceFlags: MagicSearch.Source.Friends.rawValue | MagicSearch.Source.LdapServers.rawValue)
|
||||
} else if sharedMainViewModel.indexView == 1 && historyListViewModel != nil {
|
||||
historyListViewModel!.resetFilterCallLogs()
|
||||
} else if sharedMainViewModel.indexView == 2 {
|
||||
//conversationsListViewModel.resetFilterConversations()
|
||||
} else if let historyListVM = historyListViewModel, sharedMainViewModel.indexView == 1 {
|
||||
historyListVM.resetFilterCallLogs()
|
||||
} else if let conversationsListVM = conversationsListViewModel, sharedMainViewModel.indexView == 2 {
|
||||
conversationsListVM.resetFilterConversations()
|
||||
} else if sharedMainViewModel.indexView == 3 {
|
||||
//meetingsListViewModel.currentFilter = ""
|
||||
//meetingsListViewModel.computeMeetingsList()
|
||||
|
|
@ -560,17 +559,17 @@ struct ContentView: View {
|
|||
magicSearch.currentFilter = newValue
|
||||
magicSearch.searchForContacts(
|
||||
sourceFlags: MagicSearch.Source.Friends.rawValue | MagicSearch.Source.LdapServers.rawValue)
|
||||
} else if sharedMainViewModel.indexView == 1 {
|
||||
if text.isEmpty && historyListViewModel != nil {
|
||||
historyListViewModel!.resetFilterCallLogs()
|
||||
} else if historyListViewModel != nil {
|
||||
historyListViewModel!.filterCallLogs(filter: text)
|
||||
}
|
||||
} else if sharedMainViewModel.indexView == 2 {
|
||||
} else if let historyListVM = historyListViewModel, sharedMainViewModel.indexView == 1 {
|
||||
if text.isEmpty {
|
||||
//conversationsListViewModel.resetFilterConversations()
|
||||
historyListVM.resetFilterCallLogs()
|
||||
} else {
|
||||
//conversationsListViewModel.filterConversations(filter: text)
|
||||
historyListVM.filterCallLogs(filter: text)
|
||||
}
|
||||
} else if let conversationsListVM = conversationsListViewModel, sharedMainViewModel.indexView == 2 {
|
||||
if text.isEmpty {
|
||||
conversationsListVM.resetFilterConversations()
|
||||
} else {
|
||||
conversationsListVM.filterConversations(filter: text)
|
||||
}
|
||||
} else if sharedMainViewModel.indexView == 3 {
|
||||
//meetingsListViewModel.currentFilter = text
|
||||
|
|
@ -603,10 +602,10 @@ struct ContentView: View {
|
|||
magicSearch.currentFilter = newValue
|
||||
magicSearch.searchForContacts(
|
||||
sourceFlags: MagicSearch.Source.Friends.rawValue | MagicSearch.Source.LdapServers.rawValue)
|
||||
} else if sharedMainViewModel.indexView == 1 && historyListViewModel != nil {
|
||||
historyListViewModel!.filterCallLogs(filter: text)
|
||||
} else if sharedMainViewModel.indexView == 2 {
|
||||
//conversationsListViewModel.filterConversations(filter: text)
|
||||
} else if let historyListVM = historyListViewModel, sharedMainViewModel.indexView == 1 {
|
||||
historyListVM.filterCallLogs(filter: text)
|
||||
} else if let conversationsListVM = conversationsListViewModel, sharedMainViewModel.indexView == 2 {
|
||||
conversationsListVM.filterConversations(filter: text)
|
||||
} else if sharedMainViewModel.indexView == 3 {
|
||||
//meetingsListViewModel.currentFilter = text
|
||||
//meetingsListViewModel.computeMeetingsList()
|
||||
|
|
@ -700,29 +699,36 @@ struct ContentView: View {
|
|||
}
|
||||
}
|
||||
} else if sharedMainViewModel.indexView == 2 {
|
||||
//TODO a changer
|
||||
NavigationView {
|
||||
ZStack(alignment: .bottomTrailing) {
|
||||
if let conversationsListVM = conversationsListViewModel {
|
||||
ConversationsView(
|
||||
text: $text,
|
||||
isShowStartConversationFragment: $isShowStartConversationFragment
|
||||
)
|
||||
.environmentObject(conversationsListVM)
|
||||
.roundedCorner(25, corners: [.topRight, .topLeft])
|
||||
.shadow(
|
||||
color: (orientation == .landscapeLeft
|
||||
|| orientation == .landscapeRight
|
||||
|| UIScreen.main.bounds.size.width > UIScreen.main.bounds.size.height)
|
||||
? .white.opacity(0.0)
|
||||
: .black.opacity(0.2),
|
||||
radius: 25
|
||||
)
|
||||
} else {
|
||||
NavigationView {
|
||||
VStack {
|
||||
Spacer()
|
||||
|
||||
ProgressView()
|
||||
.controlSize(.large)
|
||||
|
||||
Spacer()
|
||||
}
|
||||
.onAppear {
|
||||
conversationsListViewModel = ConversationsListViewModel()
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationViewStyle(.stack)
|
||||
/*
|
||||
ConversationsView(
|
||||
conversationViewModel: conversationViewModel,
|
||||
conversationsListViewModel: conversationsListViewModel,
|
||||
text: $text,
|
||||
isShowStartConversationFragment: $isShowStartConversationFragment
|
||||
)
|
||||
.roundedCorner(25, corners: [.topRight, .topLeft])
|
||||
.shadow(
|
||||
color: (orientation == .landscapeLeft
|
||||
|| orientation == .landscapeRight
|
||||
|| UIScreen.main.bounds.size.width > UIScreen.main.bounds.size.height)
|
||||
? .white.opacity(0.0)
|
||||
: .black.opacity(0.2),
|
||||
radius: 25
|
||||
)
|
||||
*/
|
||||
} else if sharedMainViewModel.indexView == 3 {
|
||||
//TODO a changer
|
||||
NavigationView {
|
||||
|
|
@ -805,12 +811,12 @@ struct ContentView: View {
|
|||
Spacer()
|
||||
|
||||
ZStack {
|
||||
if historyListViewModel != nil && historyListViewModel!.missedCallsCount > 0 {
|
||||
if let historyListVM = historyListViewModel, historyListVM.missedCallsCount > 0 {
|
||||
VStack {
|
||||
HStack {
|
||||
Text(
|
||||
historyListViewModel!.missedCallsCount < 99
|
||||
? String(historyListViewModel!.missedCallsCount)
|
||||
historyListVM.missedCallsCount < 99
|
||||
? String(historyListVM.missedCallsCount)
|
||||
: "99+"
|
||||
)
|
||||
.foregroundStyle(.white)
|
||||
|
|
@ -824,13 +830,14 @@ struct ContentView: View {
|
|||
.padding(.bottom, 30)
|
||||
.padding(.leading, 30)
|
||||
}
|
||||
|
||||
Button(action: {
|
||||
sharedMainViewModel.changeIndexView(indexViewInt: 1)
|
||||
sharedMainViewModel.displayedFriend = nil
|
||||
sharedMainViewModel.displayedConversation = nil
|
||||
sharedMainViewModel.displayedMeeting = nil
|
||||
if historyListViewModel != nil && historyListViewModel!.missedCallsCount > 0 {
|
||||
historyListViewModel!.resetMissedCallsCount()
|
||||
if let historyListVM = historyListViewModel, historyListVM.missedCallsCount > 0 {
|
||||
historyListVM.resetMissedCallsCount()
|
||||
}
|
||||
}, label: {
|
||||
VStack {
|
||||
|
|
@ -855,13 +862,12 @@ struct ContentView: View {
|
|||
Spacer()
|
||||
|
||||
ZStack {
|
||||
/*
|
||||
if conversationsListViewModel.unreadMessages > 0 {
|
||||
if let conversationsListVM = conversationsListViewModel, conversationsListVM.unreadMessages > 0 {
|
||||
VStack {
|
||||
HStack {
|
||||
Text(
|
||||
conversationsListViewModel.unreadMessages < 99
|
||||
? String(conversationsListViewModel.unreadMessages)
|
||||
conversationsListVM.unreadMessages < 99
|
||||
? String(conversationsListVM.unreadMessages)
|
||||
: "99+"
|
||||
)
|
||||
.foregroundStyle(.white)
|
||||
|
|
@ -875,7 +881,7 @@ struct ContentView: View {
|
|||
.padding(.bottom, 30)
|
||||
.padding(.leading, 30)
|
||||
}
|
||||
*/
|
||||
|
||||
Button(action: {
|
||||
sharedMainViewModel.changeIndexView(indexViewInt: 2)
|
||||
sharedMainViewModel.displayedFriend = nil
|
||||
|
|
@ -950,7 +956,7 @@ struct ContentView: View {
|
|||
? (geometry.size.width/100*40) + 75
|
||||
: 0
|
||||
)
|
||||
if sharedMainViewModel.indexView == 0 && sharedMainViewModel.displayedFriend != nil && contactsListViewModel != nil {
|
||||
if let contactsListVM = contactsListViewModel, let displayedFriend = sharedMainViewModel.displayedFriend, sharedMainViewModel.indexView == 0 {
|
||||
ContactFragment(
|
||||
isShowDeletePopup: $isShowDeleteContactPopup,
|
||||
isShowDismissPopup: $isShowDismissPopup,
|
||||
|
|
@ -958,19 +964,19 @@ struct ContentView: View {
|
|||
isShowSipAddressesPopupType: $isShowSipAddressesPopupType,
|
||||
isShowEditContactFragmentInContactDetails: $isShowEditContactFragmentInContactDetails
|
||||
)
|
||||
.environmentObject(contactsListViewModel!)
|
||||
.environmentObject(sharedMainViewModel.displayedFriend!)
|
||||
.environmentObject(contactsListVM)
|
||||
.environmentObject(displayedFriend)
|
||||
.frame(maxWidth: .infinity)
|
||||
.background(Color.gray100)
|
||||
.ignoresSafeArea(.keyboard)
|
||||
} else if sharedMainViewModel.indexView == 1 && sharedMainViewModel.displayedCall != nil && historyListViewModel != nil {
|
||||
} else if let historyListVM = historyListViewModel, let displayedFriend = sharedMainViewModel.displayedFriend, sharedMainViewModel.indexView == 1 {
|
||||
HistoryContactFragment(
|
||||
isShowDeleteAllHistoryPopup: $isShowDeleteAllHistoryPopup,
|
||||
isShowEditContactFragment: $isShowEditContactFragment,
|
||||
isShowEditContactFragmentAddress: $isShowEditContactFragmentAddress
|
||||
)
|
||||
.environmentObject(historyListViewModel!)
|
||||
.environmentObject(sharedMainViewModel.displayedCall!)
|
||||
.environmentObject(historyListVM)
|
||||
.environmentObject(displayedFriend)
|
||||
.frame(maxWidth: .infinity)
|
||||
.background(Color.gray100)
|
||||
.ignoresSafeArea(.keyboard)
|
||||
|
|
@ -1096,13 +1102,13 @@ struct ContentView: View {
|
|||
}
|
||||
*/
|
||||
|
||||
if isShowDeleteContactPopup {
|
||||
if let contactsListVM = contactsListViewModel, isShowDeleteContactPopup {
|
||||
PopupView(
|
||||
isShowPopup: $isShowDeleteContactPopup,
|
||||
title: Text(
|
||||
String(
|
||||
format: String(localized: "contact_dialog_delete_title"),
|
||||
contactsListViewModel!.selectedFriend?.name
|
||||
contactsListVM.selectedFriend?.name
|
||||
?? (SharedMainViewModel.shared.displayedFriend!.name ?? "Unknown Contact")
|
||||
)
|
||||
),
|
||||
|
|
@ -1112,7 +1118,7 @@ struct ContentView: View {
|
|||
self.isShowDeleteContactPopup.toggle()},
|
||||
titleSecondButton: Text("dialog_ok"),
|
||||
actionSecondButton: {
|
||||
self.contactsListViewModel!.deleteSelectedContact()
|
||||
contactsListVM.deleteSelectedContact()
|
||||
self.isShowDeleteContactPopup.toggle()
|
||||
})
|
||||
.background(.black.opacity(0.65))
|
||||
|
|
@ -1121,7 +1127,7 @@ struct ContentView: View {
|
|||
self.isShowDeleteContactPopup.toggle()
|
||||
}
|
||||
.onAppear {
|
||||
self.contactsListViewModel!.changeSelectedFriendToDelete()
|
||||
contactsListVM.changeSelectedFriendToDelete()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1132,14 +1138,14 @@ struct ContentView: View {
|
|||
titleFirstButton: Text("dialog_cancel"),
|
||||
actionFirstButton: {
|
||||
self.isShowDeleteAllHistoryPopup.toggle()
|
||||
if historyListViewModel != nil {
|
||||
historyListViewModel!.callLogsAddressToDelete = ""
|
||||
if let historyListVM = historyListViewModel {
|
||||
historyListVM.callLogsAddressToDelete = ""
|
||||
}
|
||||
},
|
||||
titleSecondButton: Text("dialog_ok"),
|
||||
actionSecondButton: {
|
||||
if historyListViewModel != nil {
|
||||
historyListViewModel!.removeCallLogs()
|
||||
if let historyListVM = historyListViewModel {
|
||||
historyListVM.removeCallLogs()
|
||||
}
|
||||
self.isShowDeleteAllHistoryPopup.toggle()
|
||||
sharedMainViewModel.displayedCall = nil
|
||||
|
|
@ -1176,13 +1182,13 @@ struct ContentView: View {
|
|||
}
|
||||
}
|
||||
|
||||
if isShowSipAddressesPopup && sharedMainViewModel.displayedFriend != nil {
|
||||
if let contactsListVM = contactsListViewModel, let displayedFriend = sharedMainViewModel.displayedFriend, isShowSipAddressesPopup {
|
||||
SipAddressesPopup(
|
||||
isShowSipAddressesPopup: $isShowSipAddressesPopup,
|
||||
isShowSipAddressesPopupType: $isShowSipAddressesPopupType
|
||||
)
|
||||
.environmentObject(contactsListViewModel!)
|
||||
.environmentObject(sharedMainViewModel.displayedFriend!)
|
||||
.environmentObject(contactsListVM)
|
||||
.environmentObject(displayedFriend)
|
||||
.background(.black.opacity(0.65))
|
||||
.zIndex(3)
|
||||
.onTapGesture {
|
||||
|
|
@ -1380,13 +1386,18 @@ struct ContentView: View {
|
|||
}
|
||||
}
|
||||
.onReceive(contactLoaded) { _ in
|
||||
//conversationsListViewModel.updateChatRoomsList()
|
||||
if historyListViewModel != nil {
|
||||
historyListViewModel!.refreshHistoryAvatarModel()
|
||||
if let conversationsListVM = conversationsListViewModel {
|
||||
conversationsListVM.updateChatRoomsList()
|
||||
}
|
||||
|
||||
if let historyListVM = historyListViewModel {
|
||||
historyListVM.refreshHistoryAvatarModel()
|
||||
}
|
||||
}
|
||||
.onReceive(contactAdded) { address in
|
||||
//conversationsListViewModel.updateChatRoom(address: address)
|
||||
if let conversationsListVM = conversationsListViewModel {
|
||||
conversationsListVM.updateChatRoom(address: address)
|
||||
}
|
||||
}
|
||||
.onReceive(coreStarted) { _ in
|
||||
accountProfileViewModel.setAvatarModel()
|
||||
|
|
@ -1413,7 +1424,9 @@ struct ContentView: View {
|
|||
.onChange(of: scenePhase) { newPhase in
|
||||
orientation = UIDevice.current.orientation
|
||||
if newPhase == .active {
|
||||
//conversationsListViewModel.computeChatRoomsList()
|
||||
if let conversationsListVM = conversationsListViewModel {
|
||||
conversationsListVM.computeChatRoomsList()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,8 +21,8 @@ import SwiftUI
|
|||
|
||||
struct ConversationsView: View {
|
||||
|
||||
@ObservedObject var conversationViewModel: ConversationViewModel
|
||||
@ObservedObject var conversationsListViewModel: ConversationsListViewModel
|
||||
@EnvironmentObject var conversationsListViewModel: ConversationsListViewModel
|
||||
|
||||
@Binding var text: String
|
||||
|
||||
@Binding var isShowStartConversationFragment: Bool
|
||||
|
|
@ -30,7 +30,7 @@ struct ConversationsView: View {
|
|||
var body: some View {
|
||||
NavigationView {
|
||||
ZStack(alignment: .bottomTrailing) {
|
||||
ConversationsFragment(conversationViewModel: conversationViewModel, conversationsListViewModel: conversationsListViewModel, text: $text)
|
||||
ConversationsFragment(text: $text)
|
||||
|
||||
Button {
|
||||
withAnimation {
|
||||
|
|
@ -59,8 +59,6 @@ struct ConversationsView: View {
|
|||
|
||||
#Preview {
|
||||
ConversationsListFragment(
|
||||
conversationViewModel: ConversationViewModel(),
|
||||
conversationsListViewModel: ConversationsListViewModel(),
|
||||
showingSheet: .constant(false),
|
||||
text: .constant("")
|
||||
)
|
||||
|
|
|
|||
|
|
@ -21,8 +21,7 @@ import SwiftUI
|
|||
|
||||
struct ConversationsFragment: View {
|
||||
|
||||
@ObservedObject var conversationViewModel: ConversationViewModel
|
||||
@ObservedObject var conversationsListViewModel: ConversationsListViewModel
|
||||
@EnvironmentObject var conversationsListViewModel: ConversationsListViewModel
|
||||
|
||||
private var idiom: UIUserInterfaceIdiom { UIDevice.current.userInterfaceIdiom }
|
||||
|
||||
|
|
@ -32,11 +31,9 @@ struct ConversationsFragment: View {
|
|||
var body: some View {
|
||||
ZStack {
|
||||
if #available(iOS 16.0, *), idiom != .pad {
|
||||
ConversationsListFragment(conversationViewModel: conversationViewModel,
|
||||
conversationsListViewModel: conversationsListViewModel, showingSheet: $showingSheet, text: $text)
|
||||
ConversationsListFragment(showingSheet: $showingSheet, text: $text)
|
||||
.sheet(isPresented: $showingSheet) {
|
||||
ConversationsListBottomSheet(
|
||||
conversationsListViewModel: conversationsListViewModel,
|
||||
showingSheet: $showingSheet
|
||||
)
|
||||
.presentationDetents(
|
||||
|
|
@ -46,11 +43,9 @@ struct ConversationsFragment: View {
|
|||
)
|
||||
}
|
||||
} else {
|
||||
ConversationsListFragment(conversationViewModel: conversationViewModel,
|
||||
conversationsListViewModel: conversationsListViewModel, showingSheet: $showingSheet, text: $text)
|
||||
ConversationsListFragment(showingSheet: $showingSheet, text: $text)
|
||||
.halfSheet(showSheet: $showingSheet) {
|
||||
ConversationsListBottomSheet(
|
||||
conversationsListViewModel: conversationsListViewModel,
|
||||
showingSheet: $showingSheet
|
||||
)
|
||||
} onDismiss: {}
|
||||
|
|
@ -60,5 +55,5 @@ struct ConversationsFragment: View {
|
|||
}
|
||||
|
||||
#Preview {
|
||||
ConversationsFragment(conversationViewModel: ConversationViewModel(), conversationsListViewModel: ConversationsListViewModel(), text: .constant(""))
|
||||
ConversationsFragment(text: .constant(""))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,8 +27,8 @@ struct ConversationsListBottomSheet: View {
|
|||
private var idiom: UIUserInterfaceIdiom { UIDevice.current.userInterfaceIdiom }
|
||||
|
||||
@State private var orientation = UIDevice.current.orientation
|
||||
|
||||
@ObservedObject var conversationsListViewModel: ConversationsListViewModel
|
||||
|
||||
@EnvironmentObject var conversationsListViewModel: ConversationsListViewModel
|
||||
|
||||
@Binding var showingSheet: Bool
|
||||
|
||||
|
|
@ -54,12 +54,10 @@ struct ConversationsListBottomSheet: View {
|
|||
|
||||
Spacer()
|
||||
|
||||
if conversationsListViewModel.selectedConversation != nil && !conversationsListViewModel.selectedConversation!.isReadOnly {
|
||||
if let selectedConversation = conversationsListViewModel.selectedConversation, !selectedConversation.isReadOnly {
|
||||
Button {
|
||||
if conversationsListViewModel.selectedConversation != nil {
|
||||
conversationsListViewModel.markAsReadSelectedConversation()
|
||||
conversationsListViewModel.updateUnreadMessagesCount()
|
||||
}
|
||||
conversationsListViewModel.markAsReadSelectedConversation()
|
||||
conversationsListViewModel.updateUnreadMessagesCount()
|
||||
|
||||
if #available(iOS 16.0, *) {
|
||||
if idiom != .pad {
|
||||
|
|
@ -95,9 +93,7 @@ struct ConversationsListBottomSheet: View {
|
|||
.frame(maxWidth: .infinity)
|
||||
|
||||
Button {
|
||||
if conversationsListViewModel.selectedConversation != nil {
|
||||
conversationsListViewModel.selectedConversation!.toggleMute()
|
||||
}
|
||||
selectedConversation.toggleMute()
|
||||
|
||||
if #available(iOS 16.0, *) {
|
||||
if idiom != .pad {
|
||||
|
|
@ -112,13 +108,13 @@ struct ConversationsListBottomSheet: View {
|
|||
}
|
||||
} label: {
|
||||
HStack {
|
||||
Image(conversationsListViewModel.selectedConversation!.isMuted ? "bell" : "bell-slash")
|
||||
Image(selectedConversation.isMuted ? "bell" : "bell-slash")
|
||||
.renderingMode(.template)
|
||||
.resizable()
|
||||
.foregroundStyle(Color.grayMain2c500)
|
||||
.frame(width: 25, height: 25, alignment: .leading)
|
||||
.padding(.all, 10)
|
||||
Text(conversationsListViewModel.selectedConversation!.isMuted ? "conversation_action_unmute" : "conversation_action_mute")
|
||||
Text(selectedConversation.isMuted ? "conversation_action_unmute" : "conversation_action_mute")
|
||||
.default_text_style(styleSize: 16)
|
||||
Spacer()
|
||||
}
|
||||
|
|
@ -132,11 +128,10 @@ struct ConversationsListBottomSheet: View {
|
|||
}
|
||||
.frame(maxWidth: .infinity)
|
||||
|
||||
if conversationsListViewModel.selectedConversation != nil
|
||||
&& !conversationsListViewModel.selectedConversation!.isGroup {
|
||||
if !selectedConversation.isGroup {
|
||||
Button {
|
||||
if !conversationsListViewModel.selectedConversation!.isGroup {
|
||||
conversationsListViewModel.selectedConversation!.call()
|
||||
if !selectedConversation.isGroup {
|
||||
selectedConversation.call()
|
||||
}
|
||||
|
||||
if #available(iOS 16.0, *) {
|
||||
|
|
@ -173,79 +168,77 @@ struct ConversationsListBottomSheet: View {
|
|||
}
|
||||
.frame(maxWidth: .infinity)
|
||||
}
|
||||
}
|
||||
|
||||
Button {
|
||||
conversationsListViewModel.selectedConversation!.deleteChatRoom()
|
||||
|
||||
if #available(iOS 16.0, *) {
|
||||
if idiom != .pad {
|
||||
showingSheet.toggle()
|
||||
} else {
|
||||
showingSheet.toggle()
|
||||
dismiss()
|
||||
}
|
||||
} else {
|
||||
showingSheet.toggle()
|
||||
dismiss()
|
||||
}
|
||||
} label: {
|
||||
HStack {
|
||||
Image("trash-simple")
|
||||
.renderingMode(.template)
|
||||
.resizable()
|
||||
.foregroundStyle(Color.redDanger500)
|
||||
.frame(width: 25, height: 25, alignment: .leading)
|
||||
.padding(.all, 10)
|
||||
Text("conversation_action_delete")
|
||||
.foregroundStyle(Color.redDanger500)
|
||||
.default_text_style(styleSize: 16)
|
||||
Spacer()
|
||||
}
|
||||
.frame(maxHeight: .infinity)
|
||||
}
|
||||
.padding(.horizontal, 30)
|
||||
.background(Color.gray100)
|
||||
|
||||
if conversationsListViewModel.selectedConversation != nil && !conversationsListViewModel.selectedConversation!.isReadOnly {
|
||||
VStack {
|
||||
Divider()
|
||||
}
|
||||
.frame(maxWidth: .infinity)
|
||||
|
||||
Button {
|
||||
if conversationsListViewModel.selectedConversation != nil {
|
||||
conversationsListViewModel.selectedConversation!.leave()
|
||||
conversationsListViewModel.selectedConversation!.isReadOnly = true
|
||||
}
|
||||
|
||||
if #available(iOS 16.0, *) {
|
||||
if idiom != .pad {
|
||||
showingSheet.toggle()
|
||||
} else {
|
||||
showingSheet.toggle()
|
||||
dismiss()
|
||||
}
|
||||
} else {
|
||||
showingSheet.toggle()
|
||||
dismiss()
|
||||
}
|
||||
} label: {
|
||||
HStack {
|
||||
Image("sign-out")
|
||||
.renderingMode(.template)
|
||||
.resizable()
|
||||
.foregroundStyle(Color.grayMain2c500)
|
||||
.frame(width: 25, height: 25, alignment: .leading)
|
||||
.padding(.all, 10)
|
||||
Text("conversation_action_leave_group")
|
||||
.default_text_style(styleSize: 16)
|
||||
Spacer()
|
||||
}
|
||||
.frame(maxHeight: .infinity)
|
||||
}
|
||||
.padding(.horizontal, 30)
|
||||
.background(Color.gray100)
|
||||
|
||||
Button {
|
||||
selectedConversation.deleteChatRoom()
|
||||
|
||||
if #available(iOS 16.0, *) {
|
||||
if idiom != .pad {
|
||||
showingSheet.toggle()
|
||||
} else {
|
||||
showingSheet.toggle()
|
||||
dismiss()
|
||||
}
|
||||
} else {
|
||||
showingSheet.toggle()
|
||||
dismiss()
|
||||
}
|
||||
} label: {
|
||||
HStack {
|
||||
Image("trash-simple")
|
||||
.renderingMode(.template)
|
||||
.resizable()
|
||||
.foregroundStyle(Color.redDanger500)
|
||||
.frame(width: 25, height: 25, alignment: .leading)
|
||||
.padding(.all, 10)
|
||||
Text("conversation_action_delete")
|
||||
.foregroundStyle(Color.redDanger500)
|
||||
.default_text_style(styleSize: 16)
|
||||
Spacer()
|
||||
}
|
||||
.frame(maxHeight: .infinity)
|
||||
}
|
||||
.padding(.horizontal, 30)
|
||||
.background(Color.gray100)
|
||||
|
||||
if !selectedConversation.isReadOnly {
|
||||
VStack {
|
||||
Divider()
|
||||
}
|
||||
.frame(maxWidth: .infinity)
|
||||
|
||||
Button {
|
||||
selectedConversation.leave()
|
||||
selectedConversation.isReadOnly = true
|
||||
|
||||
if #available(iOS 16.0, *) {
|
||||
if idiom != .pad {
|
||||
showingSheet.toggle()
|
||||
} else {
|
||||
showingSheet.toggle()
|
||||
dismiss()
|
||||
}
|
||||
} else {
|
||||
showingSheet.toggle()
|
||||
dismiss()
|
||||
}
|
||||
} label: {
|
||||
HStack {
|
||||
Image("sign-out")
|
||||
.renderingMode(.template)
|
||||
.resizable()
|
||||
.foregroundStyle(Color.grayMain2c500)
|
||||
.frame(width: 25, height: 25, alignment: .leading)
|
||||
.padding(.all, 10)
|
||||
Text("conversation_action_leave_group")
|
||||
.default_text_style(styleSize: 16)
|
||||
Spacer()
|
||||
}
|
||||
.frame(maxHeight: .infinity)
|
||||
}
|
||||
.padding(.horizontal, 30)
|
||||
.background(Color.gray100)
|
||||
}
|
||||
}
|
||||
}
|
||||
.background(Color.gray100)
|
||||
|
|
@ -257,5 +250,5 @@ struct ConversationsListBottomSheet: View {
|
|||
}
|
||||
|
||||
#Preview {
|
||||
ConversationsListBottomSheet(conversationsListViewModel: ConversationsListViewModel(), showingSheet: .constant(true))
|
||||
ConversationsListBottomSheet(showingSheet: .constant(true))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,8 +26,7 @@ struct ConversationsListFragment: View {
|
|||
|
||||
@EnvironmentObject var navigationManager: NavigationManager
|
||||
|
||||
@ObservedObject var conversationViewModel: ConversationViewModel
|
||||
@ObservedObject var conversationsListViewModel: ConversationsListViewModel
|
||||
@EnvironmentObject var conversationsListViewModel: ConversationsListViewModel
|
||||
|
||||
@Binding var showingSheet: Bool
|
||||
@Binding var text: String
|
||||
|
|
@ -39,8 +38,6 @@ struct ConversationsListFragment: View {
|
|||
ConversationRow(
|
||||
navigationManager: _navigationManager,
|
||||
conversation: conversation,
|
||||
conversationViewModel: conversationViewModel,
|
||||
conversationsListViewModel: conversationsListViewModel,
|
||||
showingSheet: $showingSheet,
|
||||
text: $text
|
||||
)
|
||||
|
|
@ -74,7 +71,7 @@ struct ConversationsListFragment: View {
|
|||
.onChange(of: scenePhase) { newPhase in
|
||||
if newPhase == .active {
|
||||
if navigationManager.peerAddr != nil {
|
||||
conversationViewModel.getChatRoomWithStringAddress(conversationsList: conversationsListViewModel.conversationsList, stringAddr: navigationManager.peerAddr!)
|
||||
conversationsListViewModel.getChatRoomWithStringAddress(stringAddr: navigationManager.peerAddr!)
|
||||
navigationManager.peerAddr = nil
|
||||
}
|
||||
}
|
||||
|
|
@ -85,9 +82,9 @@ struct ConversationsListFragment: View {
|
|||
struct ConversationRow: View {
|
||||
@EnvironmentObject var navigationManager: NavigationManager
|
||||
|
||||
@EnvironmentObject var conversationsListViewModel: ConversationsListViewModel
|
||||
|
||||
@ObservedObject var conversation: ConversationModel
|
||||
@ObservedObject var conversationViewModel: ConversationViewModel
|
||||
@ObservedObject var conversationsListViewModel: ConversationsListViewModel
|
||||
|
||||
@Binding var showingSheet: Bool
|
||||
@Binding var text: String
|
||||
|
|
@ -196,7 +193,7 @@ struct ConversationRow: View {
|
|||
.listRowSeparator(.hidden)
|
||||
.background(.white)
|
||||
.onTapGesture {
|
||||
conversationViewModel.changeDisplayedChatRoom(conversationModel: conversation)
|
||||
conversationsListViewModel.changeDisplayedChatRoom(conversationModel: conversation)
|
||||
}
|
||||
.onLongPressGesture(minimumDuration: 0.2) {
|
||||
conversationsListViewModel.selectedConversation = conversation
|
||||
|
|
@ -207,8 +204,6 @@ struct ConversationRow: View {
|
|||
|
||||
#Preview {
|
||||
ConversationsListFragment(
|
||||
conversationViewModel: ConversationViewModel(),
|
||||
conversationsListViewModel: ConversationsListViewModel(),
|
||||
showingSheet: .constant(false),
|
||||
text: .constant("")
|
||||
)
|
||||
|
|
|
|||
|
|
@ -376,7 +376,7 @@ struct UIList: UIViewRepresentable {
|
|||
guard !self.sections.isEmpty,
|
||||
let firstSection = self.sections.first,
|
||||
let firstConversationSection = parent.conversationViewModel.conversationMessagesSection.first,
|
||||
let displayedConversation = parent.conversationViewModel.displayedConversation,
|
||||
let displayedConversation = SharedMainViewModel.shared.displayedConversation,
|
||||
let tableView = self.tableView,
|
||||
firstSection.chatRoomID == displayedConversation.id,
|
||||
firstSection.rows.count == firstConversationSection.rows.count else {
|
||||
|
|
@ -391,8 +391,8 @@ struct UIList: UIViewRepresentable {
|
|||
if !self.sections.isEmpty {
|
||||
if self.sections.first != nil
|
||||
&& parent.conversationViewModel.conversationMessagesSection.first != nil
|
||||
&& parent.conversationViewModel.displayedConversation != nil
|
||||
&& self.sections.first!.chatRoomID == parent.conversationViewModel.displayedConversation!.id
|
||||
&& SharedMainViewModel.shared.displayedConversation != nil
|
||||
&& self.sections.first!.chatRoomID == SharedMainViewModel.shared.displayedConversation!.id
|
||||
&& self.sections.first!.rows.count == parent.conversationViewModel.conversationMessagesSection.first!.rows.count {
|
||||
if let dict = notification.userInfo as NSDictionary? {
|
||||
if let index = dict["index"] as? Int {
|
||||
|
|
|
|||
|
|
@ -32,8 +32,8 @@ class ConversationViewModel: ObservableObject {
|
|||
static let TAG = "[ConversationViewModel]"
|
||||
|
||||
private var coreContext = CoreContext.shared
|
||||
private var sharedMainViewModel = SharedMainViewModel.shared
|
||||
|
||||
@Published var displayedConversation: ConversationModel?
|
||||
@Published var displayedConversationHistorySize: Int = 0
|
||||
@Published var displayedConversationUnreadMessagesCount: Int = 0
|
||||
|
||||
|
|
@ -119,11 +119,20 @@ class ConversationViewModel: ObservableObject {
|
|||
var isMe: Bool = false
|
||||
}
|
||||
|
||||
init() {}
|
||||
init() {
|
||||
// TODO a check si utile
|
||||
/*
|
||||
self.selectedMessage = nil
|
||||
self.resetMessage()
|
||||
self.removeConversationDelegate()
|
||||
self.addConversationDelegate(chatRoom: newChatRoom)
|
||||
self.getMessages()
|
||||
*/
|
||||
}
|
||||
|
||||
func addConversationDelegate() {
|
||||
coreContext.doOnCoreQueue { _ in
|
||||
if let chatroom = self.displayedConversation?.chatRoom {
|
||||
if let chatroom = self.sharedMainViewModel.displayedConversation?.chatRoom {
|
||||
let chatRoomDelegate = ChatRoomDelegateStub( onIsComposingReceived: { (_: ChatRoom, _: Address, _: Bool) in
|
||||
self.computeComposingLabel()
|
||||
}, onChatMessagesReceived: { (_: ChatRoom, eventLogs: [EventLog]) in
|
||||
|
|
@ -143,16 +152,16 @@ class ConversationViewModel: ObservableObject {
|
|||
self.getNewMessages(eventLogs: [eventLogs])
|
||||
}, onConferenceJoined: {(_: ChatRoom, eventLog: EventLog) in
|
||||
self.getNewMessages(eventLogs: [eventLog])
|
||||
if self.displayedConversation != nil {
|
||||
if self.sharedMainViewModel.displayedConversation != nil {
|
||||
DispatchQueue.main.async {
|
||||
self.displayedConversation!.isReadOnly = false
|
||||
self.sharedMainViewModel.displayedConversation!.isReadOnly = false
|
||||
}
|
||||
}
|
||||
}, onConferenceLeft: {(_: ChatRoom, eventLog: EventLog) in
|
||||
self.getNewMessages(eventLogs: [eventLog])
|
||||
if self.displayedConversation != nil {
|
||||
if self.sharedMainViewModel.displayedConversation != nil {
|
||||
DispatchQueue.main.async {
|
||||
self.displayedConversation!.isReadOnly = true
|
||||
self.sharedMainViewModel.displayedConversation!.isReadOnly = true
|
||||
}
|
||||
}
|
||||
}, onEphemeralEvent: {(_: ChatRoom, eventLogs: EventLog) in
|
||||
|
|
@ -189,16 +198,16 @@ class ConversationViewModel: ObservableObject {
|
|||
self.getEventMessage(eventLog: eventLog)
|
||||
}, onConferenceJoined: {(_: ChatRoom, eventLog: EventLog) in
|
||||
self.getEventMessage(eventLog: eventLog)
|
||||
if self.displayedConversation != nil {
|
||||
if self.sharedMainViewModel.displayedConversation != nil {
|
||||
DispatchQueue.main.async {
|
||||
self.displayedConversation!.isReadOnly = false
|
||||
self.sharedMainViewModel.displayedConversation!.isReadOnly = false
|
||||
}
|
||||
}
|
||||
}, onConferenceLeft: {(_: ChatRoom, eventLog: EventLog) in
|
||||
self.getEventMessage(eventLog: eventLog)
|
||||
if self.displayedConversation != nil {
|
||||
if self.sharedMainViewModel.displayedConversation != nil {
|
||||
DispatchQueue.main.async {
|
||||
self.displayedConversation!.isReadOnly = true
|
||||
self.sharedMainViewModel.displayedConversation!.isReadOnly = true
|
||||
}
|
||||
}
|
||||
}, onEphemeralEvent: {(_: ChatRoom, eventLog: EventLog) in
|
||||
|
|
@ -210,7 +219,7 @@ class ConversationViewModel: ObservableObject {
|
|||
}
|
||||
|
||||
func addChatMessageDelegate(message: ChatMessage) {
|
||||
if self.displayedConversation != nil {
|
||||
if self.sharedMainViewModel.displayedConversation != nil {
|
||||
var statusTmp: Message.Status? = .sending
|
||||
switch message.state {
|
||||
case .InProgress:
|
||||
|
|
@ -452,8 +461,8 @@ class ConversationViewModel: ObservableObject {
|
|||
}
|
||||
|
||||
func getHistorySize() {
|
||||
if self.displayedConversation != nil {
|
||||
let historySize = self.displayedConversation!.chatRoom.historyEventsSize
|
||||
if self.sharedMainViewModel.displayedConversation != nil {
|
||||
let historySize = self.sharedMainViewModel.displayedConversation!.chatRoom.historyEventsSize
|
||||
DispatchQueue.main.async {
|
||||
self.displayedConversationHistorySize = historySize
|
||||
}
|
||||
|
|
@ -461,8 +470,8 @@ class ConversationViewModel: ObservableObject {
|
|||
}
|
||||
|
||||
func getUnreadMessagesCount() {
|
||||
if self.displayedConversation != nil {
|
||||
let unreadMessagesCount = self.displayedConversation!.chatRoom.unreadMessagesCount
|
||||
if self.sharedMainViewModel.displayedConversation != nil {
|
||||
let unreadMessagesCount = self.sharedMainViewModel.displayedConversation!.chatRoom.unreadMessagesCount
|
||||
DispatchQueue.main.async {
|
||||
self.displayedConversationUnreadMessagesCount = unreadMessagesCount
|
||||
}
|
||||
|
|
@ -471,11 +480,11 @@ class ConversationViewModel: ObservableObject {
|
|||
|
||||
func markAsRead() {
|
||||
coreContext.doOnCoreQueue { _ in
|
||||
if self.displayedConversation != nil {
|
||||
let unreadMessagesCount = self.displayedConversation!.chatRoom.unreadMessagesCount
|
||||
if self.sharedMainViewModel.displayedConversation != nil {
|
||||
let unreadMessagesCount = self.sharedMainViewModel.displayedConversation!.chatRoom.unreadMessagesCount
|
||||
|
||||
if unreadMessagesCount > 0 {
|
||||
self.displayedConversation!.chatRoom.markAsRead()
|
||||
self.sharedMainViewModel.displayedConversation!.chatRoom.markAsRead()
|
||||
|
||||
DispatchQueue.main.async {
|
||||
self.displayedConversationUnreadMessagesCount = 0
|
||||
|
|
@ -486,13 +495,13 @@ class ConversationViewModel: ObservableObject {
|
|||
}
|
||||
|
||||
func getParticipantConversationModel() {
|
||||
if self.displayedConversation != nil {
|
||||
if self.sharedMainViewModel.displayedConversation != nil {
|
||||
DispatchQueue.main.async {
|
||||
self.isUserAdmin = false
|
||||
self.participantConversationModelAdmin.removeAll()
|
||||
self.participantConversationModel.removeAll()
|
||||
}
|
||||
self.displayedConversation!.chatRoom.participants.forEach { participant in
|
||||
self.sharedMainViewModel.displayedConversation!.chatRoom.participants.forEach { participant in
|
||||
if participant.address != nil {
|
||||
ContactAvatarModel.getAvatarModelFromAddress(address: participant.address!) { avatarResult in
|
||||
let avatarModelTmp = avatarResult
|
||||
|
|
@ -510,8 +519,8 @@ class ConversationViewModel: ObservableObject {
|
|||
}
|
||||
}
|
||||
|
||||
if !self.displayedConversation!.isReadOnly {
|
||||
if let currentUser = self.displayedConversation?.chatRoom.me,
|
||||
if !self.sharedMainViewModel.displayedConversation!.isReadOnly {
|
||||
if let currentUser = self.sharedMainViewModel.displayedConversation?.chatRoom.me,
|
||||
let address = currentUser.address {
|
||||
ContactAvatarModel.getAvatarModelFromAddress(address: address) { avatarResult in
|
||||
let avatarModelTmp = avatarResult
|
||||
|
|
@ -546,7 +555,7 @@ class ConversationViewModel: ObservableObject {
|
|||
self.mediasToSend.removeAll()
|
||||
self.messageToReply = nil
|
||||
|
||||
self.conversationInfoPopupText = displayedConversation?.subject ?? ""
|
||||
self.conversationInfoPopupText = self.sharedMainViewModel.displayedConversation?.subject ?? ""
|
||||
|
||||
self.attachments.removeAll()
|
||||
|
||||
|
|
@ -557,8 +566,8 @@ class ConversationViewModel: ObservableObject {
|
|||
self.computeComposingLabel()
|
||||
self.getEphemeralTime()
|
||||
|
||||
if self.displayedConversation != nil {
|
||||
let historyEvents = self.displayedConversation!.chatRoom.getHistoryRangeEvents(begin: 0, end: 30)
|
||||
if self.sharedMainViewModel.displayedConversation != nil {
|
||||
let historyEvents = self.sharedMainViewModel.displayedConversation!.chatRoom.getHistoryRangeEvents(begin: 0, end: 30)
|
||||
|
||||
var conversationMessage: [EventLogMessage] = []
|
||||
historyEvents.enumerated().forEach { index, eventLog in
|
||||
|
|
@ -789,9 +798,9 @@ class ConversationViewModel: ObservableObject {
|
|||
}
|
||||
|
||||
DispatchQueue.main.async {
|
||||
if self.conversationMessagesSection.isEmpty && self.displayedConversation != nil {
|
||||
if self.conversationMessagesSection.isEmpty && self.sharedMainViewModel.displayedConversation != nil {
|
||||
Log.info("[ConversationViewModel] Get Messages \(self.conversationMessagesSection.count)")
|
||||
self.conversationMessagesSection.append(MessagesSection(date: Date(), chatRoomID: self.displayedConversation!.id, rows: conversationMessage.reversed()))
|
||||
self.conversationMessagesSection.append(MessagesSection(date: Date(), chatRoomID: self.sharedMainViewModel.displayedConversation!.id, rows: conversationMessage.reversed()))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -800,10 +809,10 @@ class ConversationViewModel: ObservableObject {
|
|||
|
||||
func getOldMessages() {
|
||||
coreContext.doOnCoreQueue { _ in
|
||||
if self.displayedConversation != nil && !self.conversationMessagesSection.isEmpty
|
||||
if self.sharedMainViewModel.displayedConversation != nil && !self.conversationMessagesSection.isEmpty
|
||||
&& self.displayedConversationHistorySize > self.conversationMessagesSection[0].rows.count && !self.oldMessageReceived {
|
||||
self.oldMessageReceived = true
|
||||
let historyEvents = self.displayedConversation!.chatRoom.getHistoryRangeEvents(begin: self.conversationMessagesSection[0].rows.count, end: self.conversationMessagesSection[0].rows.count + 30)
|
||||
let historyEvents = self.sharedMainViewModel.displayedConversation!.chatRoom.getHistoryRangeEvents(begin: self.conversationMessagesSection[0].rows.count, end: self.conversationMessagesSection[0].rows.count + 30)
|
||||
var conversationMessagesTmp: [EventLogMessage] = []
|
||||
|
||||
historyEvents.enumerated().reversed().forEach { index, eventLog in
|
||||
|
|
@ -1058,7 +1067,7 @@ class ConversationViewModel: ObservableObject {
|
|||
|
||||
var conversationMessagesTmp: [EventLogMessage] = []
|
||||
|
||||
let unreadMessagesCount = self.displayedConversation != nil ? self.displayedConversation!.chatRoom.unreadMessagesCount : 0
|
||||
let unreadMessagesCount = self.sharedMainViewModel.displayedConversation != nil ? self.sharedMainViewModel.displayedConversation!.chatRoom.unreadMessagesCount : 0
|
||||
|
||||
if let firstEventLogId = self.conversationMessagesSection[0].rows.first?.eventModel.eventLogId,
|
||||
let lastMessageId = eventLogs.last?.chatMessage?.messageId,
|
||||
|
|
@ -1317,8 +1326,8 @@ class ConversationViewModel: ObservableObject {
|
|||
self.conversationMessagesSection[0].rows[0].message.isFirstMessage = false
|
||||
}
|
||||
|
||||
if self.conversationMessagesSection.isEmpty && self.displayedConversation != nil {
|
||||
self.conversationMessagesSection.append(MessagesSection(date: Date(), chatRoomID: self.displayedConversation!.id, rows: conversationMessagesTmp))
|
||||
if self.conversationMessagesSection.isEmpty && self.sharedMainViewModel.displayedConversation != nil {
|
||||
self.conversationMessagesSection.append(MessagesSection(date: Date(), chatRoomID: self.sharedMainViewModel.displayedConversation!.id, rows: conversationMessagesTmp))
|
||||
} else {
|
||||
self.conversationMessagesSection[0].rows.insert(contentsOf: conversationMessagesTmp, at: 0)
|
||||
}
|
||||
|
|
@ -1337,7 +1346,7 @@ class ConversationViewModel: ObservableObject {
|
|||
func sendFirstMessage(eventLog: EventLog) {
|
||||
var conversationMessagesTmp: [EventLogMessage] = []
|
||||
|
||||
let unreadMessagesCount = self.displayedConversation != nil ? self.displayedConversation!.chatRoom.unreadMessagesCount : 0
|
||||
let unreadMessagesCount = self.sharedMainViewModel.displayedConversation != nil ? self.sharedMainViewModel.displayedConversation!.chatRoom.unreadMessagesCount : 0
|
||||
var attachmentNameList: String = ""
|
||||
var attachmentList: [Attachment] = []
|
||||
var contentText = ""
|
||||
|
|
@ -1539,8 +1548,8 @@ class ConversationViewModel: ObservableObject {
|
|||
if let eventLogMessage = conversationMessagesTmp.last {
|
||||
DispatchQueue.main.async {
|
||||
Log.info("[ConversationViewModel] Send first message")
|
||||
if self.conversationMessagesSection.isEmpty && self.displayedConversation != nil {
|
||||
self.conversationMessagesSection.append(MessagesSection(date: Date(), chatRoomID: self.displayedConversation!.id, rows: conversationMessagesTmp))
|
||||
if self.conversationMessagesSection.isEmpty && self.sharedMainViewModel.displayedConversation != nil {
|
||||
self.conversationMessagesSection.append(MessagesSection(date: Date(), chatRoomID: self.sharedMainViewModel.displayedConversation!.id, rows: conversationMessagesTmp))
|
||||
} else {
|
||||
self.conversationMessagesSection[0].rows.append(eventLogMessage)
|
||||
}
|
||||
|
|
@ -1569,8 +1578,8 @@ class ConversationViewModel: ObservableObject {
|
|||
|
||||
DispatchQueue.main.async {
|
||||
Log.info("[ConversationViewModel] Get event message")
|
||||
if self.conversationMessagesSection.isEmpty && self.displayedConversation != nil {
|
||||
self.conversationMessagesSection.append(MessagesSection(date: Date(), chatRoomID: self.displayedConversation!.id, rows: [eventLogMessage]))
|
||||
if self.conversationMessagesSection.isEmpty && self.sharedMainViewModel.displayedConversation != nil {
|
||||
self.conversationMessagesSection.append(MessagesSection(date: Date(), chatRoomID: self.sharedMainViewModel.displayedConversation!.id, rows: [eventLogMessage]))
|
||||
} else {
|
||||
self.conversationMessagesSection[0].rows.insert(eventLogMessage, at: 0)
|
||||
}
|
||||
|
|
@ -1601,19 +1610,19 @@ class ConversationViewModel: ObservableObject {
|
|||
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "onScrollToIndex"), object: nil, userInfo: ["index": indexMessage, "animated": true])
|
||||
} else {
|
||||
if self.conversationMessagesSection[0].rows.last != nil {
|
||||
let firstEventLog = self.displayedConversation?.chatRoom.getHistoryRangeEvents(
|
||||
let firstEventLog = self.sharedMainViewModel.displayedConversation?.chatRoom.getHistoryRangeEvents(
|
||||
begin: self.conversationMessagesSection[0].rows.count - 1,
|
||||
end: self.conversationMessagesSection[0].rows.count
|
||||
)
|
||||
let lastEventLog = self.displayedConversation!.chatRoom.findEventLog(messageId: message.replyMessage!.id)
|
||||
let lastEventLog = self.sharedMainViewModel.displayedConversation!.chatRoom.findEventLog(messageId: message.replyMessage!.id)
|
||||
|
||||
var historyEvents = self.displayedConversation!.chatRoom.getHistoryRangeBetween(
|
||||
var historyEvents = self.sharedMainViewModel.displayedConversation!.chatRoom.getHistoryRangeBetween(
|
||||
firstEvent: firstEventLog!.first,
|
||||
lastEvent: lastEventLog,
|
||||
filters: UInt(ChatRoom.HistoryFilter([.ChatMessage, .InfoNoDevice]).rawValue)
|
||||
)
|
||||
|
||||
let historyEventsAfter = self.displayedConversation!.chatRoom.getHistoryRangeEvents(
|
||||
let historyEventsAfter = self.sharedMainViewModel.displayedConversation!.chatRoom.getHistoryRangeEvents(
|
||||
begin: self.conversationMessagesSection[0].rows.count + historyEvents.count + 1,
|
||||
end: self.conversationMessagesSection[0].rows.count + historyEvents.count + 30
|
||||
)
|
||||
|
|
@ -1884,17 +1893,17 @@ class ConversationViewModel: ObservableObject {
|
|||
}
|
||||
|
||||
func sendMessage(audioRecorder: AudioRecorder? = nil) {
|
||||
if self.displayedConversation != nil {
|
||||
if self.sharedMainViewModel.displayedConversation != nil {
|
||||
coreContext.doOnCoreQueue { _ in
|
||||
do {
|
||||
var message: ChatMessage?
|
||||
if self.messageToReply != nil {
|
||||
let chatMessageToReply = self.displayedConversation!.chatRoom.findEventLog(messageId: self.messageToReply!.eventModel.eventLogId)?.chatMessage
|
||||
let chatMessageToReply = self.sharedMainViewModel.displayedConversation!.chatRoom.findEventLog(messageId: self.messageToReply!.eventModel.eventLogId)?.chatMessage
|
||||
if chatMessageToReply != nil {
|
||||
message = try self.displayedConversation!.chatRoom.createReplyMessage(message: chatMessageToReply!)
|
||||
message = try self.sharedMainViewModel.displayedConversation!.chatRoom.createReplyMessage(message: chatMessageToReply!)
|
||||
}
|
||||
} else {
|
||||
message = try self.displayedConversation!.chatRoom.createEmptyMessage()
|
||||
message = try self.sharedMainViewModel.displayedConversation!.chatRoom.createEmptyMessage()
|
||||
}
|
||||
|
||||
let toSend = self.messageText.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
|
|
@ -2015,7 +2024,7 @@ class ConversationViewModel: ObservableObject {
|
|||
self.addConversationDelegate(chatRoom: newChatRoom)
|
||||
DispatchQueue.main.async {
|
||||
withAnimation {
|
||||
self.displayedConversation = conversationModel
|
||||
self.sharedMainViewModel.displayedConversation = conversationModel
|
||||
}
|
||||
self.getMessages()
|
||||
}
|
||||
|
|
@ -2026,7 +2035,7 @@ class ConversationViewModel: ObservableObject {
|
|||
|
||||
func resetDisplayedChatRoom() {
|
||||
if !self.conversationMessagesSection.isEmpty && !self.conversationMessagesSection[0].rows.isEmpty {
|
||||
if let displayedConversation = self.displayedConversation {
|
||||
if let displayedConversation = self.sharedMainViewModel.displayedConversation {
|
||||
CoreContext.shared.doOnCoreQueue { core in
|
||||
let nilParams: ConferenceParams? = nil
|
||||
if let newChatRoom = core.searchChatRoom(params: nilParams, localAddr: nil, remoteAddr: displayedConversation.chatRoom.peerAddress, participants: nil) {
|
||||
|
|
@ -2034,7 +2043,7 @@ class ConversationViewModel: ObservableObject {
|
|||
self.addConversationDelegate(chatRoom: newChatRoom)
|
||||
let conversation = ConversationModel(chatRoom: newChatRoom)
|
||||
DispatchQueue.main.async {
|
||||
self.displayedConversation = conversation
|
||||
self.sharedMainViewModel.displayedConversation = conversation
|
||||
}
|
||||
self.computeComposingLabel()
|
||||
let historyEventsSizeTmp = newChatRoom.historyEventsSize
|
||||
|
|
@ -2054,7 +2063,7 @@ class ConversationViewModel: ObservableObject {
|
|||
|
||||
func downloadContent(chatMessage: ChatMessage, content: Content) {
|
||||
// Log.debug("[ConversationViewModel] Starting downloading content for file \(model.fileName)")
|
||||
if self.displayedConversation != nil {
|
||||
if self.sharedMainViewModel.displayedConversation != nil {
|
||||
if let contentName = content.name {
|
||||
var file = FileUtil.sharedContainerUrl().appendingPathComponent("Library/Images").absoluteString + (contentName.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) ?? "")
|
||||
var fileExists = FileUtil.sharedContainerUrl()
|
||||
|
|
@ -2076,7 +2085,7 @@ class ConversationViewModel: ObservableObject {
|
|||
Log.info(
|
||||
"[ConversationViewModel] File \(contentName) will be downloaded at \(content.filePath ?? "NIL")"
|
||||
)
|
||||
self.displayedConversation!.downloadContent(chatMessage: chatMessage, content: content)
|
||||
self.sharedMainViewModel.displayedConversation!.downloadContent(chatMessage: chatMessage, content: content)
|
||||
} else {
|
||||
Log.error("[ConversationViewModel] Content name is null, can't download it!")
|
||||
}
|
||||
|
|
@ -2158,11 +2167,11 @@ class ConversationViewModel: ObservableObject {
|
|||
}
|
||||
|
||||
func removeReaction() {
|
||||
if self.displayedConversation != nil {
|
||||
if self.sharedMainViewModel.displayedConversation != nil {
|
||||
coreContext.doOnCoreQueue { _ in
|
||||
if self.selectedMessageToDisplayDetails != nil {
|
||||
Log.info("[ConversationViewModel] Remove reaction to message with ID \(self.selectedMessageToDisplayDetails!.message.id)")
|
||||
let messageToSendReaction = self.displayedConversation!.chatRoom.findEventLog(messageId: self.selectedMessageToDisplayDetails!.eventModel.eventLogId)?.chatMessage
|
||||
let messageToSendReaction = self.sharedMainViewModel.displayedConversation!.chatRoom.findEventLog(messageId: self.selectedMessageToDisplayDetails!.eventModel.eventLogId)?.chatMessage
|
||||
if messageToSendReaction != nil {
|
||||
do {
|
||||
let reaction = try messageToSendReaction!.createReaction(utf8Reaction: "")
|
||||
|
|
@ -2190,7 +2199,7 @@ class ConversationViewModel: ObservableObject {
|
|||
coreContext.doOnCoreQueue { _ in
|
||||
if self.selectedMessage != nil {
|
||||
Log.info("[ConversationViewModel] Sending reaction \(emoji) to message with ID \(self.selectedMessage!.message.id)")
|
||||
let messageToSendReaction = self.displayedConversation!.chatRoom.findEventLog(messageId: self.selectedMessage!.eventModel.eventLogId)?.chatMessage
|
||||
let messageToSendReaction = self.sharedMainViewModel.displayedConversation!.chatRoom.findEventLog(messageId: self.selectedMessage!.eventModel.eventLogId)?.chatMessage
|
||||
if messageToSendReaction != nil {
|
||||
do {
|
||||
let reaction = try messageToSendReaction!.createReaction(utf8Reaction: messageToSendReaction?.ownReaction?.body == emoji ? "" : emoji)
|
||||
|
|
@ -2214,7 +2223,7 @@ class ConversationViewModel: ObservableObject {
|
|||
|
||||
func resend() {
|
||||
coreContext.doOnCoreQueue { _ in
|
||||
let chatMessageToResend = self.displayedConversation!.chatRoom.findEventLog(messageId: self.selectedMessage!.eventModel.eventLogId)?.chatMessage
|
||||
let chatMessageToResend = self.sharedMainViewModel.displayedConversation!.chatRoom.findEventLog(messageId: self.selectedMessage!.eventModel.eventLogId)?.chatMessage
|
||||
if self.selectedMessage != nil && chatMessageToResend != nil {
|
||||
Log.info("[ConversationViewModel] Re-sending message with ID \(chatMessageToResend!)")
|
||||
chatMessageToResend!.send()
|
||||
|
|
@ -2225,7 +2234,7 @@ class ConversationViewModel: ObservableObject {
|
|||
func prepareBottomSheetForDeliveryStatus() {
|
||||
self.sheetCategories.removeAll()
|
||||
coreContext.doOnCoreQueue { _ in
|
||||
let chatMessageToDisplay = self.displayedConversation!.chatRoom.findEventLog(messageId: self.selectedMessageToDisplayDetails!.eventModel.eventLogId)?.chatMessage
|
||||
let chatMessageToDisplay = self.sharedMainViewModel.displayedConversation!.chatRoom.findEventLog(messageId: self.selectedMessageToDisplayDetails!.eventModel.eventLogId)?.chatMessage
|
||||
if self.selectedMessageToDisplayDetails != nil && chatMessageToDisplay != nil {
|
||||
|
||||
let participantsImdnDisplayed = chatMessageToDisplay!.getParticipantsByImdnState(state: .Displayed)
|
||||
|
|
@ -2287,7 +2296,7 @@ class ConversationViewModel: ObservableObject {
|
|||
func prepareBottomSheetForReactions() {
|
||||
self.sheetCategories.removeAll()
|
||||
coreContext.doOnCoreQueue { core in
|
||||
let chatMessageToDisplay = self.displayedConversation!.chatRoom.findEventLog(messageId: self.selectedMessageToDisplayDetails!.eventModel.eventLogId)?.chatMessage
|
||||
let chatMessageToDisplay = self.sharedMainViewModel.displayedConversation!.chatRoom.findEventLog(messageId: self.selectedMessageToDisplayDetails!.eventModel.eventLogId)?.chatMessage
|
||||
if self.selectedMessageToDisplayDetails != nil && chatMessageToDisplay != nil {
|
||||
let dispatchGroup = DispatchGroup()
|
||||
|
||||
|
|
@ -2388,15 +2397,15 @@ class ConversationViewModel: ObservableObject {
|
|||
|
||||
func compose() {
|
||||
coreContext.doOnCoreQueue { _ in
|
||||
if self.displayedConversation != nil {
|
||||
self.displayedConversation!.chatRoom.compose()
|
||||
if self.sharedMainViewModel.displayedConversation != nil {
|
||||
self.sharedMainViewModel.displayedConversation!.chatRoom.compose()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func computeComposingLabel() {
|
||||
if self.displayedConversation != nil {
|
||||
let composing = self.displayedConversation!.chatRoom.isRemoteComposing
|
||||
if self.sharedMainViewModel.displayedConversation != nil {
|
||||
let composing = self.sharedMainViewModel.displayedConversation!.chatRoom.isRemoteComposing
|
||||
|
||||
if !composing {
|
||||
DispatchQueue.main.async {
|
||||
|
|
@ -2410,7 +2419,7 @@ class ConversationViewModel: ObservableObject {
|
|||
var composingFriends: [String] = []
|
||||
var label = ""
|
||||
|
||||
for address in self.displayedConversation!.chatRoom.composingAddresses {
|
||||
for address in self.sharedMainViewModel.displayedConversation!.chatRoom.composingAddresses {
|
||||
if let addressCleaned = address.clone() {
|
||||
addressCleaned.clean()
|
||||
|
||||
|
|
@ -2444,29 +2453,6 @@ class ConversationViewModel: ObservableObject {
|
|||
}
|
||||
}
|
||||
|
||||
func getChatRoomWithStringAddress(conversationsList: [ConversationModel], stringAddr: String) {
|
||||
CoreContext.shared.doOnCoreQueue { _ in
|
||||
do {
|
||||
let stringAddrCleaned = stringAddr.components(separatedBy: ";gr=")
|
||||
let address = try Factory.Instance.createAddress(addr: stringAddrCleaned[0])
|
||||
if let dispChatRoom = conversationsList.first(where: {$0.chatRoom.peerAddress != nil && $0.chatRoom.peerAddress!.equal(address2: address)}) {
|
||||
if self.displayedConversation != nil {
|
||||
if dispChatRoom.id != self.displayedConversation!.id {
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
|
||||
self.changeDisplayedChatRoom(conversationModel: dispChatRoom)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
DispatchQueue.main.async {
|
||||
self.changeDisplayedChatRoom(conversationModel: dispChatRoom)
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func parseConferenceInvite(content: Content) -> MessageConferenceInfo? {
|
||||
var meetingConferenceUriTmp: String = ""
|
||||
var meetingSubjectTmp: String = ""
|
||||
|
|
@ -2549,7 +2535,7 @@ class ConversationViewModel: ObservableObject {
|
|||
|
||||
func setEphemeralTime(lifetimeString: String) {
|
||||
coreContext.doOnCoreQueue { _ in
|
||||
if self.displayedConversation != nil {
|
||||
if self.sharedMainViewModel.displayedConversation != nil {
|
||||
var lifetime: Int = 0
|
||||
|
||||
switch lifetimeString {
|
||||
|
|
@ -2568,11 +2554,11 @@ class ConversationViewModel: ObservableObject {
|
|||
}
|
||||
|
||||
if lifetime == 0 {
|
||||
self.displayedConversation!.chatRoom.ephemeralEnabled = false
|
||||
self.displayedConversation!.chatRoom.ephemeralLifetime = lifetime
|
||||
self.sharedMainViewModel.displayedConversation!.chatRoom.ephemeralEnabled = false
|
||||
self.sharedMainViewModel.displayedConversation!.chatRoom.ephemeralLifetime = lifetime
|
||||
} else {
|
||||
self.displayedConversation!.chatRoom.ephemeralEnabled = true
|
||||
self.displayedConversation!.chatRoom.ephemeralLifetime = lifetime
|
||||
self.sharedMainViewModel.displayedConversation!.chatRoom.ephemeralEnabled = true
|
||||
self.sharedMainViewModel.displayedConversation!.chatRoom.ephemeralLifetime = lifetime
|
||||
}
|
||||
|
||||
self.getEphemeralTime()
|
||||
|
|
@ -2581,9 +2567,9 @@ class ConversationViewModel: ObservableObject {
|
|||
}
|
||||
|
||||
func getEphemeralTime() {
|
||||
if self.displayedConversation != nil {
|
||||
if self.sharedMainViewModel.displayedConversation != nil {
|
||||
|
||||
let lifetime = self.displayedConversation!.chatRoom.ephemeralLifetime
|
||||
let lifetime = self.sharedMainViewModel.displayedConversation!.chatRoom.ephemeralLifetime
|
||||
DispatchQueue.main.async {
|
||||
switch lifetime {
|
||||
case 60:
|
||||
|
|
@ -2610,17 +2596,17 @@ class ConversationViewModel: ObservableObject {
|
|||
}
|
||||
|
||||
func setNewChatRoomSubject() {
|
||||
if self.displayedConversation != nil && self.conversationInfoPopupText != self.displayedConversation!.subject {
|
||||
if self.sharedMainViewModel.displayedConversation != nil && self.conversationInfoPopupText != self.sharedMainViewModel.displayedConversation!.subject {
|
||||
|
||||
coreContext.doOnCoreQueue { _ in
|
||||
self.displayedConversation!.chatRoom.subject = self.conversationInfoPopupText
|
||||
self.sharedMainViewModel.displayedConversation!.chatRoom.subject = self.conversationInfoPopupText
|
||||
}
|
||||
|
||||
self.displayedConversation!.subject = self.conversationInfoPopupText
|
||||
self.displayedConversation!.avatarModel = ContactAvatarModel(
|
||||
friend: self.displayedConversation!.avatarModel.friend,
|
||||
self.sharedMainViewModel.displayedConversation!.subject = self.conversationInfoPopupText
|
||||
self.sharedMainViewModel.displayedConversation!.avatarModel = ContactAvatarModel(
|
||||
friend: self.sharedMainViewModel.displayedConversation!.avatarModel.friend,
|
||||
name: self.conversationInfoPopupText,
|
||||
address: self.displayedConversation!.avatarModel.address,
|
||||
address: self.sharedMainViewModel.displayedConversation!.avatarModel.address,
|
||||
withPresence: false
|
||||
)
|
||||
self.isShowConversationInfoPopup = false
|
||||
|
|
@ -2638,7 +2624,7 @@ class ConversationViewModel: ObservableObject {
|
|||
continue
|
||||
}
|
||||
|
||||
if self.displayedConversation!.chatRoom.me != nil && self.displayedConversation!.chatRoom.me!.address != nil && !self.displayedConversation!.chatRoom.me!.address!.weakEqual(address2: addr!) {
|
||||
if self.sharedMainViewModel.displayedConversation!.chatRoom.me != nil && self.sharedMainViewModel.displayedConversation!.chatRoom.me!.address != nil && !self.sharedMainViewModel.displayedConversation!.chatRoom.me!.address!.weakEqual(address2: addr!) {
|
||||
list.append(SelectedAddressModel(addr: addr!, avModel: participant))
|
||||
Log.info("\(ConversationViewModel.TAG) Added participant \(addr!.asStringUriOnly())")
|
||||
}
|
||||
|
|
@ -2662,7 +2648,7 @@ class ConversationViewModel: ObservableObject {
|
|||
Log.info("\(ConversationViewModel.TAG) Added participant \(selectedAddr.address.asStringUriOnly())")
|
||||
}
|
||||
|
||||
let participantsAddress = self.displayedConversation!.chatRoom.participants.map { $0.address?.asStringUriOnly() }
|
||||
let participantsAddress = self.sharedMainViewModel.displayedConversation!.chatRoom.participants.map { $0.address?.asStringUriOnly() }
|
||||
let listAddress = list.map { $0.address.asStringUriOnly() }
|
||||
|
||||
let differences = participantsAddress.difference(from: listAddress)
|
||||
|
|
@ -2675,17 +2661,17 @@ class ConversationViewModel: ObservableObject {
|
|||
}
|
||||
}
|
||||
|
||||
let filteredParticipants = self.displayedConversation!.chatRoom.participants.filter { participant in
|
||||
let filteredParticipants = self.sharedMainViewModel.displayedConversation!.chatRoom.participants.filter { participant in
|
||||
differenceAddresses.contains(participant.address!.asStringUriOnly())
|
||||
}
|
||||
|
||||
coreContext.doOnCoreQueue { _ in
|
||||
_ = self.displayedConversation!.chatRoom.addParticipants(addresses: list.map { $0.address })
|
||||
self.displayedConversation!.chatRoom.removeParticipants(participants: filteredParticipants)
|
||||
_ = self.sharedMainViewModel.displayedConversation!.chatRoom.addParticipants(addresses: list.map { $0.address })
|
||||
self.sharedMainViewModel.displayedConversation!.chatRoom.removeParticipants(participants: filteredParticipants)
|
||||
}
|
||||
} else {
|
||||
coreContext.doOnCoreQueue { _ in
|
||||
_ = self.displayedConversation!.chatRoom.addParticipants(addresses: list.map { $0.address })
|
||||
_ = self.sharedMainViewModel.displayedConversation!.chatRoom.addParticipants(addresses: list.map { $0.address })
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2693,10 +2679,10 @@ class ConversationViewModel: ObservableObject {
|
|||
}
|
||||
|
||||
func toggleAdminRights(address: String) {
|
||||
if self.displayedConversation != nil {
|
||||
if self.sharedMainViewModel.displayedConversation != nil {
|
||||
coreContext.doOnCoreQueue { _ in
|
||||
if let participant = self.displayedConversation!.chatRoom.participants.first(where: {$0.address?.asStringUriOnly() == address}) {
|
||||
self.displayedConversation!.chatRoom.setParticipantAdminStatus(participant: participant, isAdmin: !participant.isAdmin)
|
||||
if let participant = self.sharedMainViewModel.displayedConversation!.chatRoom.participants.first(where: {$0.address?.asStringUriOnly() == address}) {
|
||||
self.sharedMainViewModel.displayedConversation!.chatRoom.setParticipantAdminStatus(participant: participant, isAdmin: !participant.isAdmin)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -2704,10 +2690,10 @@ class ConversationViewModel: ObservableObject {
|
|||
}
|
||||
|
||||
func removeParticipant(address: String) {
|
||||
if self.displayedConversation != nil {
|
||||
if self.sharedMainViewModel.displayedConversation != nil {
|
||||
coreContext.doOnCoreQueue { _ in
|
||||
if let participant = self.displayedConversation!.chatRoom.participants.first(where: {$0.address?.asStringUriOnly() == address}) {
|
||||
self.displayedConversation!.chatRoom.removeParticipant(participant: participant)
|
||||
if let participant = self.sharedMainViewModel.displayedConversation!.chatRoom.participants.first(where: {$0.address?.asStringUriOnly() == address}) {
|
||||
self.sharedMainViewModel.displayedConversation!.chatRoom.removeParticipant(participant: participant)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -2720,7 +2706,7 @@ class ConversationViewModel: ObservableObject {
|
|||
|
||||
func deleteMessage() {
|
||||
coreContext.doOnCoreQueue { _ in
|
||||
if let displayedConversation = self.displayedConversation,
|
||||
if let displayedConversation = self.sharedMainViewModel.displayedConversation,
|
||||
let selectedMessage = self.selectedMessage,
|
||||
let chatMessage = selectedMessage.eventModel.eventLog.chatMessage {
|
||||
displayedConversation.chatRoom.deleteMessage(message: chatMessage)
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ class ConversationsListViewModel: ObservableObject {
|
|||
|
||||
private var coreContext = CoreContext.shared
|
||||
private var contactsManager = ContactsManager.shared
|
||||
private var sharedMainViewModel = SharedMainViewModel.shared
|
||||
|
||||
private var coreConversationDelegate: CoreDelegate?
|
||||
|
||||
|
|
@ -402,7 +403,9 @@ class ConversationsListViewModel: ObservableObject {
|
|||
|
||||
if unreadMessagesCount > 0 {
|
||||
self.selectedConversation!.chatRoom.markAsRead()
|
||||
self.selectedConversation!.unreadMessagesCount = 0
|
||||
DispatchQueue.main.async {
|
||||
self.selectedConversation!.unreadMessagesCount = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -428,5 +431,43 @@ class ConversationsListViewModel: ObservableObject {
|
|||
func resetFilterConversations() {
|
||||
filterConversations(filter: "")
|
||||
}
|
||||
|
||||
func getChatRoomWithStringAddress(stringAddr: String) {
|
||||
CoreContext.shared.doOnCoreQueue { _ in
|
||||
do {
|
||||
let stringAddrCleaned = stringAddr.components(separatedBy: ";gr=")
|
||||
let address = try Factory.Instance.createAddress(addr: stringAddrCleaned[0])
|
||||
if let dispChatRoom = self.conversationsList.first(where: {$0.chatRoom.peerAddress != nil && $0.chatRoom.peerAddress!.equal(address2: address)}) {
|
||||
if self.sharedMainViewModel.displayedConversation != nil {
|
||||
if dispChatRoom.id != self.sharedMainViewModel.displayedConversation!.id {
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
|
||||
self.changeDisplayedChatRoom(conversationModel: dispChatRoom)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
DispatchQueue.main.async {
|
||||
self.changeDisplayedChatRoom(conversationModel: dispChatRoom)
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func changeDisplayedChatRoom(conversationModel: ConversationModel) {
|
||||
CoreContext.shared.doOnCoreQueue { core in
|
||||
let nilParams: ConferenceParams? = nil
|
||||
if let newChatRoom = core.searchChatRoom(params: nilParams, localAddr: nil, remoteAddr: conversationModel.chatRoom.peerAddress, participants: nil) {
|
||||
if LinphoneUtils.getChatRoomId(room: newChatRoom) == conversationModel.id {
|
||||
DispatchQueue.main.async {
|
||||
withAnimation {
|
||||
self.sharedMainViewModel.displayedConversation = conversationModel
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// swiftlint:enable line_length
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue