core, ui: update member support chats list from events instead of reloading all members

This commit is contained in:
Narasimha-sc committed 2026-09-30 15:38:13 +00:00
1 parent 93910b80e9
commit 84ed5a9a2b
14 files changed
+118 -58

No files matched your search

@@ -381,6 +381,12 @@ object ChatModel {
fun getContactChat(contactId: Long): Chat? = chats.value.firstOrNull { it.chatInfo is ChatInfo.Direct && it.chatInfo.apiId == contactId }
fun getGroupChat(groupId: Long): Chat? = chats.value.firstOrNull { it.chatInfo is ChatInfo.Group && it.chatInfo.apiId == groupId }
suspend fun upsertSupportChatMember(rhId: Long?, cInfo: ChatInfo) {
if (cInfo !is ChatInfo.Group) return
val member = (cInfo.groupChatScope as? GroupChatScopeInfo.MemberSupport)?.groupMember_ ?: return
chatsContext.upsertGroupMember(rhId, cInfo.groupInfo, member)
}
fun populateGroupMembersIndexes() {
groupMembersIndexes.value = emptyMap()
val gmIndexes = groupMembersIndexes.value.toMutableMap()
@@ -3006,6 +3006,7 @@ object ChatController {
chatModel.chatsContext.increaseGroupReportsCounter(rhId, cInfo.id)
}
chatModel.secondaryChatsContext.value?.addChatItem(rhId, cInfo, cItem)
chatModel.upsertSupportChatMember(rhId, cInfo)
}
} else if (cItem.isRcvNew && cInfo.ntfsEnabled(cItem)) {
withContext(Dispatchers.Main) {
@@ -3087,6 +3088,7 @@ object ChatController {
if (cItem.isActiveReport) {
chatModel.chatsContext.decreaseGroupReportsCounter(rhId, cInfo.id)
}
chatModel.upsertSupportChatMember(rhId, cInfo)
}
withContext(Dispatchers.Main) {
if (toChatItem == null) {
@@ -79,6 +79,7 @@ suspend fun processLoadedChat(
withContext(Dispatchers.Main) {
chatsCtx.chatItems.replaceAll(chat.chatItems)
chatModel.chatId.value = chat.id
chatModel.upsertSupportChatMember(chat.remoteHostId, chat.chatInfo)
splits.value = newSplits
if (chat.chatItems.isNotEmpty()) {
unreadAfterItemId.value = chat.chatItems.last().id
@@ -762,6 +762,7 @@ fun ChatView(
)
if (updatedChatInfo != null) {
chatModel.chatsContext.updateChatInfo(chatRh, updatedChatInfo)
chatModel.upsertSupportChatMember(chatRh, updatedChatInfo)
}
}
withContext(Dispatchers.Main) {
@@ -599,6 +599,7 @@ fun ComposeView(
chatItems.forEach { aChatItem ->
withContext(Dispatchers.Main) {
chatsCtx.addChatItem(chat.remoteHostId, aChatItem.chatInfo, aChatItem.chatItem)
chatModel.upsertSupportChatMember(chat.remoteHostId, aChatItem.chatInfo)
}
}
return chatItems.first().chatItem
@@ -42,12 +42,11 @@ fun ModalData.MemberSupportView(
ModalManager.end.closeModals()
}
LaunchedEffect(Unit) {
setGroupMembers(rhId, groupInfo, chatModel)
if (!chatModel.membersLoaded.value) {
setGroupMembers(rhId, groupInfo, chatModel)
}
}
ModalView(
close = close,
endButtons = { RefreshMembersButton(rhId, groupInfo) }
) {
ModalView(close = close) {
MemberSupportViewLayout(
chat,
groupInfo,
@@ -56,26 +55,6 @@ fun ModalData.MemberSupportView(
}
}
@Composable
fun RefreshMembersButton(
rhId: Long?,
groupInfo: GroupInfo
) {
IconButton(
onClick = {
withBGApi {
setGroupMembers(rhId, groupInfo, chatModel)
}
}
) {
Icon(
painterResource(MR.images.ic_refresh),
contentDescription = null,
tint = MaterialTheme.colors.primary
)
}
}
@Composable
private fun ModalData.MemberSupportViewLayout(
chat: Chat,