@@ -1,10 +1,10 @@
// SPDX-FileCopyrightText: 2022 Akito <the@akito.ooo>
// SPDX-FileCopyrightText: 2023 Robin Lindén <dev@robinlinden.eu>
//
// SPDX-License-Identifier: GPL-3.0-only
package ltd.evilcorp.domain.feature
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
@@ -13,24 +13,36 @@ import kotlinx.coroutines.flow.first
import kotlinx.coroutines.runBlocking
import ltd.evilcorp.core.repository.MessageRepository
import ltd.evilcorp.core.vo.Message
import org.json.JSONArray
import org.json.JSONObject
class ExportManager @Inject constructor(
private val messageRepository: MessageRepository,
) {
// TODO @Akito: Increment version programmatically on major changes.
private fun List<Message>.generateExportMessages(): ExportMessages {
return ExportMessages(
version = 1,
timestamp = SimpleDateFormat(
"""yyyy-MM-dd'T'HH-mm-ss""",
Locale.getDefault(),
).format(Date()),
entries = this,
private fun generateExportMessagesJString(messages: List<Message>): String {
val root = JSONObject()
root.put("version", 1)
root.put(
"timestamp",
SimpleDateFormat("""yyyy-MM-dd'T'HH-mm-ss""", Locale.getDefault()).format(Date()),
)
}
private fun generateExportMessagesJString(messages: List<Message>): String =
jacksonObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(messages.generateExportMessages())
val entries = JSONArray()
for (message in messages) {
val jsonMessage = JSONObject().apply {
put("publicKey", message.publicKey)
put("message", message.message)
put("sender", message.sender.toString())
put("type", message.type.toString())
put("correlationId", message.correlationId)
put("timestamp", message.timestamp)
put("id", message.id)
}
entries.put(jsonMessage)
}
root.put("entries", entries)
return root.toString(2)
}
private fun getMessages(publicKey: String): List<Message> = runBlocking {
messageRepository.get(publicKey).first()
@@ -40,9 +52,3 @@ class ExportManager @Inject constructor(
getMessages(publicKey),
)
}
data class ExportMessages(
val version: Int,
val timestamp: String,
val entries: List<Message>,
)