Fix participant list in meeting details view : if myself isn't the organizer, then I was displayed twice and the actual organizer was missing

This commit is contained in:
QuentinArguillere 2024-06-21 18:07:36 +02:00
parent e74b2dd4f3
commit 282310f6c2
2 changed files with 28 additions and 13 deletions

View file

@ -216,7 +216,7 @@ struct MeetingFragment: View {
ScrollView {
VStack(alignment: .leading, spacing: 0) {
if meetingViewModel.myself != nil {
if meetingViewModel.myself != nil && meetingViewModel.myself!.isOrganizer {
getParticipantLine(participant: meetingViewModel.myself!)
}
ForEach(0..<meetingViewModel.participants.count, id: \.self) { index in

View file

@ -263,28 +263,43 @@ class MeetingViewModel: ObservableObject {
self.toDate = meeting.endDate
self.participants = []
let organizer = meeting.confInfo.organizer
CoreContext.shared.doOnCoreQueue { core in
let organizer = meeting.confInfo.organizer
var organizerFound = false
if let myAddr = core.defaultAccount?.contactAddress {
let isOrganizer = (organizer != nil) ? myAddr.weakEqual(address2: organizer!) : false
organizerFound = organizerFound || isOrganizer
ContactAvatarModel.getAvatarModelFromAddress(address: myAddr) { avatarResult in
DispatchQueue.main.async {
let isOrganizer = (organizer != nil) ? myAddr.weakEqual(address2: organizer!) : false
self.myself = SelectedAddressModel(addr: myAddr, avModel: avatarResult, isOrg: isOrganizer)
}
}
}
for pInfo in meeting.confInfo.participantInfos {
if let addr = pInfo.address {
let isOrganizer = (organizer != nil) ? addr.weakEqual(address2: organizer!) : false
organizerFound = organizerFound || isOrganizer
ContactAvatarModel.getAvatarModelFromAddress(address: addr) { avatarResult in
DispatchQueue.main.async {
self.participants.append(SelectedAddressModel(addr: addr, avModel: avatarResult, isOrg:isOrganizer))
}
}
}
}
// if didn't find organizer, add him
if !organizerFound, let org = organizer {
ContactAvatarModel.getAvatarModelFromAddress(address: org) { avatarResult in
DispatchQueue.main.async {
self.participants.append(SelectedAddressModel(addr: org, avModel: avatarResult, isOrg: true))
}
}
}
}
for pInfo in meeting.confInfo.participantInfos {
if let addr = pInfo.address {
ContactAvatarModel.getAvatarModelFromAddress(address: addr) { avatarResult in
DispatchQueue.main.async {
let isOrganizer = (organizer != nil) ? addr.weakEqual(address2: organizer!) : false
self.participants.append(SelectedAddressModel(addr: addr, avModel: avatarResult, isOrg:isOrganizer))
}
}
}
}
self.conferenceUri = meeting.confInfo.uri?.asStringUriOnly() ?? ""
self.computeDateLabels()
self.computeTimeLabels()