diff --git a/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationScreen.kt b/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationScreen.kt index 29618666a31b89e010c632849e1332d90c9c8fa3..de2d26119794712fd402afd096cf4651af952835 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationScreen.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationScreen.kt @@ -75,6 +75,11 @@ fun ConversationScreen( ) }, content = { padding -> + if (viewModel.loadingMessages.value) { + Loader() + return@Scaffold + } + LazyColumn( state = scrollState, // reverseLayout to display most recent message (index 0) at the bottom diff --git a/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationViewModel.kt b/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationViewModel.kt index f716ff85ca8d57db78ecdfeffd69ecbc4473a03a..7bad51e4e63a783bff1a785dd8d060758bbe1aa0 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationViewModel.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationViewModel.kt @@ -73,6 +73,7 @@ constructor( private val _contactId = mutableStateOf<ContactId?>(null) private val _contactItem = mutableStateOf<ContactItem?>(null) private val _messages = mutableStateListOf<ConversationItem>() + private val _loadingMessages = mutableStateOf(false) private val _newMessage = mutableStateOf("") @@ -80,6 +81,7 @@ constructor( val contactItem = _contactItem.asState() val messages = _messages.asList() + val loadingMessages = _loadingMessages.asState() val newMessage = _newMessage.asState() @@ -201,6 +203,7 @@ constructor( } private fun loadMessages(txn: Transaction, contact: ContactItem) { + _loadingMessages.value = true try { var start = LogUtils.now() val headers = conversationManager.getMessageHeaders(txn, contact.idWrapper.contactId) @@ -215,6 +218,8 @@ constructor( } catch (e: NoSuchContactException) { // todo: handle this properly LOG.warn(e) {} + } finally { + _loadingMessages.value = false } } @@ -306,11 +311,12 @@ constructor( } fun deleteAllMessages() = runOnDbThread { + _loadingMessages.value = true try { val result = conversationManager.deleteAllMessages(_contactId.value!!) reloadConversationAfterDeletingMessages(result) } finally { - // todo: + _loadingMessages.value = false } }