commit 3c13f14c07e3a95d2aef66d954c69e733b260cfd
parent 13d6ae75542e0e29c41e8ba0c35d913f5ecde95c
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date:   Wed, 11 Oct 2023 16:09:32 +0200

fix: export chat messages crash

Diffstat:
Mcore/src/main/kotlin/me/rhunk/snapenhance/core/action/impl/ExportChatMessages.kt | 18+++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/action/impl/ExportChatMessages.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/action/impl/ExportChatMessages.kt @@ -188,7 +188,7 @@ class ExportChatMessages : AbstractAction() { } } - private suspend fun fetchMessagesPaginated(conversationId: String, lastMessageId: Long) = suspendCancellableCoroutine { continuation -> + private suspend fun fetchMessagesPaginated(conversationId: String, lastMessageId: Long, amount: Int) = suspendCancellableCoroutine { continuation -> val callback = CallbackBuilder(fetchConversationWithMessagesCallbackClass) .override("onFetchConversationWithMessagesComplete") { param -> val messagesList = param.arg<List<*>>(1).map { Message(it) } @@ -203,7 +203,7 @@ class ExportChatMessages : AbstractAction() { conversationManagerInstance, SnapUUID.fromString(conversationId).instanceNonNull(), lastMessageId, - 500, + amount, callback ) } @@ -219,23 +219,23 @@ class ExportChatMessages : AbstractAction() { logDialog(context.translation.format("chat_export.exporting_message", "conversation" to conversationName)) - val foundMessages = fetchMessagesPaginated(conversationId, Long.MAX_VALUE).toMutableList() + val foundMessages = fetchMessagesPaginated(conversationId, Long.MAX_VALUE, amount = 1).toMutableList() var lastMessageId = foundMessages.firstOrNull()?.messageDescriptor?.messageId ?: run { logDialog(context.translation["chat_export.no_messages_found"]) return } while (true) { - val messages = fetchMessagesPaginated(conversationId, lastMessageId) - if (messages.isEmpty()) break + val fetchedMessages = fetchMessagesPaginated(conversationId, lastMessageId, amount = 500) + if (fetchedMessages.isEmpty()) break - if (amountOfMessages != null && messages.size + foundMessages.size >= amountOfMessages!!) { - foundMessages.addAll(messages.take(amountOfMessages!! - foundMessages.size)) + foundMessages.addAll(fetchedMessages) + if (amountOfMessages != null && foundMessages.size >= amountOfMessages!!) { + foundMessages.subList(amountOfMessages!!, foundMessages.size).clear() break } - foundMessages.addAll(messages) - messages.firstOrNull()?.let { + fetchedMessages.firstOrNull()?.let { lastMessageId = it.messageDescriptor.messageId } setStatus("Exporting (${foundMessages.size} / ${foundMessages.firstOrNull()?.orderKey})")