desktop: fix freeze in some situations (#2820)

* desktop: fix freeze in some situations

* old fashion

* small change
This commit is contained in:
Stanislav Dmitrenko 2023-08-01 16:58:26 +03:00 committed by GitHub
parent f0d64a30e9
commit 6268f0a32b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 9 additions and 5 deletions

View File

@ -49,7 +49,7 @@ object ChatModel {
val chatDbStatus = mutableStateOf<DBMigrationResult?>(null)
val chats = mutableStateListOf<Chat>()
// map of connections network statuses, key is agent connection id
val networkStatuses = mutableStateMapOf<String, NetworkStatus>()
val networkStatuses = mutableStateOf<Map<String, NetworkStatus>>(mapOf())
// current chat
val chatId = mutableStateOf<String?>(null)
@ -477,11 +477,13 @@ object ChatModel {
}
fun setContactNetworkStatus(contact: Contact, status: NetworkStatus) {
networkStatuses[contact.activeConn.agentConnId] = status
val statuses = networkStatuses.value.toMutableMap()
statuses[contact.activeConn.agentConnId] = status
networkStatuses.value = statuses
}
fun contactNetworkStatus(contact: Contact): NetworkStatus =
networkStatuses[contact.activeConn.agentConnId] ?: NetworkStatus.Unknown()
networkStatuses.value[contact.activeConn.agentConnId] ?: NetworkStatus.Unknown()
fun addTerminalItem(item: TerminalItem) {
if (terminalItems.value.size >= 500) {

View File

@ -1678,9 +1678,11 @@ object ChatController {
}
private fun updateContactsStatus(contactRefs: List<ContactRef>, status: NetworkStatus) {
val statuses = chatModel.networkStatuses.value.toMutableMap()
for (c in contactRefs) {
chatModel.networkStatuses[c.agentConnId] = status
statuses[c.agentConnId] = status
}
chatModel.networkStatuses.value = statuses
}
private fun processContactSubError(contact: Contact, chatError: ChatError) {

View File

@ -55,7 +55,7 @@ fun ChatInfoView(
val connStats = remember { mutableStateOf(connectionStats) }
val developerTools = chatModel.controller.appPrefs.developerTools.get()
if (chat != null && currentUser != null) {
val contactNetworkStatus = remember(chatModel.networkStatuses.toMap()) {
val contactNetworkStatus = remember(chatModel.networkStatuses.value) {
mutableStateOf(chatModel.contactNetworkStatus(contact))
}
val sendReceipts = remember { mutableStateOf(SendReceipts.fromBool(contact.chatSettings.sendRcpts, currentUser.sendRcptsContacts)) }