mirror of
https://github.com/rhunk/SnapEnhance.git
synced 2025-06-13 13:47:47 +02:00
fix: export chat messages crash
This commit is contained in:
@ -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})")
|
||||||
|
Reference in New Issue
Block a user