fix: export chat messages crash

This commit is contained in:
rhunk
2023-10-11 16:09:32 +02:00
parent 13d6ae7554
commit 3c13f14c07

View File

@ -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) val callback = CallbackBuilder(fetchConversationWithMessagesCallbackClass)
.override("onFetchConversationWithMessagesComplete") { param -> .override("onFetchConversationWithMessagesComplete") { param ->
val messagesList = param.arg<List<*>>(1).map { Message(it) } val messagesList = param.arg<List<*>>(1).map { Message(it) }
@ -203,7 +203,7 @@ class ExportChatMessages : AbstractAction() {
conversationManagerInstance, conversationManagerInstance,
SnapUUID.fromString(conversationId).instanceNonNull(), SnapUUID.fromString(conversationId).instanceNonNull(),
lastMessageId, lastMessageId,
500, amount,
callback callback
) )
} }
@ -219,23 +219,23 @@ class ExportChatMessages : AbstractAction() {
logDialog(context.translation.format("chat_export.exporting_message", "conversation" to conversationName)) 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 { var lastMessageId = foundMessages.firstOrNull()?.messageDescriptor?.messageId ?: run {
logDialog(context.translation["chat_export.no_messages_found"]) logDialog(context.translation["chat_export.no_messages_found"])
return return
} }
while (true) { while (true) {
val messages = fetchMessagesPaginated(conversationId, lastMessageId) val fetchedMessages = fetchMessagesPaginated(conversationId, lastMessageId, amount = 500)
if (messages.isEmpty()) break if (fetchedMessages.isEmpty()) break
if (amountOfMessages != null && messages.size + foundMessages.size >= amountOfMessages!!) { foundMessages.addAll(fetchedMessages)
foundMessages.addAll(messages.take(amountOfMessages!! - foundMessages.size)) if (amountOfMessages != null && foundMessages.size >= amountOfMessages!!) {
foundMessages.subList(amountOfMessages!!, foundMessages.size).clear()
break break
} }
foundMessages.addAll(messages) fetchedMessages.firstOrNull()?.let {
messages.firstOrNull()?.let {
lastMessageId = it.messageDescriptor.messageId lastMessageId = it.messageDescriptor.messageId
} }
setStatus("Exporting (${foundMessages.size} / ${foundMessages.firstOrNull()?.orderKey})") setStatus("Exporting (${foundMessages.size} / ${foundMessages.firstOrNull()?.orderKey})")