android: lookup group members via map (#4432)

This commit is contained in:
spaced4ndy
2024-07-10 18:50:23 +04:00
committed by GitHub
parent f41c04735b
commit f84ac713d7
3 changed files with 24 additions and 3 deletions
@@ -65,6 +65,7 @@ object ChatModel {
val deletedChats = mutableStateOf<List<Pair<Long?, String>>>(emptyList())
val chatItemStatuses = mutableMapOf<Long, CIStatus>()
val groupMembers = mutableStateListOf<GroupMember>()
val groupMembersIndexes = mutableStateMapOf<Long, Int>()
val terminalItems = mutableStateOf<List<TerminalItem>>(listOf())
val userAddress = mutableStateOf<UserContactLinkRec?>(null)
@@ -170,7 +171,23 @@ object ChatModel {
fun getChat(id: String): Chat? = chats.toList().firstOrNull { it.id == id }
fun getContactChat(contactId: Long): Chat? = chats.toList().firstOrNull { it.chatInfo is ChatInfo.Direct && it.chatInfo.apiId == contactId }
fun getGroupChat(groupId: Long): Chat? = chats.toList().firstOrNull { it.chatInfo is ChatInfo.Group && it.chatInfo.apiId == groupId }
fun getGroupMember(groupMemberId: Long): GroupMember? = groupMembers.firstOrNull { it.groupMemberId == groupMemberId }
fun populateGroupMembersIndexes() {
groupMembersIndexes.clear()
groupMembers.forEachIndexed { i, member ->
groupMembersIndexes[member.groupMemberId] = i
}
}
fun getGroupMember(groupMemberId: Long): GroupMember? {
val memberIndex = groupMembersIndexes[groupMemberId]
return if (memberIndex != null) {
groupMembers[memberIndex]
} else {
null
}
}
private fun getChatIndex(rhId: Long?, id: String): Int = chats.toList().indexOfFirst { it.id == id && it.remoteHostId == rhId }
fun addChat(chat: Chat) = chats.add(index = 0, chat)
@@ -620,12 +637,13 @@ object ChatModel {
}
// update current chat
return if (chatId.value == groupInfo.id) {
val memberIndex = groupMembers.indexOfFirst { it.groupMemberId == member.groupMemberId }
if (memberIndex >= 0) {
val memberIndex = groupMembersIndexes[member.groupMemberId]
if (memberIndex != null) {
groupMembers[memberIndex] = member
false
} else {
groupMembers.add(member)
groupMembersIndexes[member.groupMemberId] = groupMembers.size - 1
true
}
} else {
@@ -159,6 +159,7 @@ fun ChatView(chatId: String, chatModel: ChatModel, onComposed: suspend (chatId:
AudioPlayer.stop()
chatModel.chatId.value = null
chatModel.groupMembers.clear()
chatModel.groupMembersIndexes.clear()
},
info = {
if (ModalManager.end.hasModalsOpen()) {
@@ -253,7 +253,9 @@ suspend fun setGroupMembers(rhId: Long?, groupInfo: GroupInfo, chatModel: ChatMo
}
}
chatModel.groupMembers.clear()
chatModel.groupMembersIndexes.clear()
chatModel.groupMembers.addAll(newMembers)
chatModel.populateGroupMembersIndexes()
}
@Composable