84 lines
2.8 KiB
Kotlin
84 lines
2.8 KiB
Kotlin
package dev.lonami.talaria.data
|
|
|
|
import dev.lonami.talaria.models.Dialog
|
|
import dev.lonami.talaria.models.MessagePreview
|
|
import uniffi.talaria.*
|
|
import java.time.LocalDateTime
|
|
import java.time.format.DateTimeFormatter
|
|
|
|
interface DialogRepository {
|
|
fun loadDialogs(): List<Dialog>
|
|
}
|
|
|
|
class NativeDialogRepository : DialogRepository {
|
|
override fun loadDialogs(): List<Dialog> {
|
|
val dialogs = mutableListOf<Dialog>()
|
|
|
|
val dialogPtr = getDialogs()
|
|
try {
|
|
val dialogCount = dialogCount(dialogPtr)
|
|
for (i in 0U until dialogCount) {
|
|
dialogs.add(
|
|
Dialog(
|
|
id = dialogPacked(dialogPtr, i),
|
|
title = dialogTitle(dialogPtr, i),
|
|
lastMessage = MessagePreview(
|
|
sender = dialogSender(dialogPtr, i),
|
|
text = dialogText(dialogPtr, i),
|
|
date = LocalDateTime.parse(
|
|
dialogTime(dialogPtr, i),
|
|
DateTimeFormatter.ISO_OFFSET_DATE_TIME
|
|
),
|
|
ack = dialogAck(dialogPtr, i),
|
|
),
|
|
pinned = dialogPin(dialogPtr, i) != 0U
|
|
)
|
|
)
|
|
}
|
|
} finally {
|
|
freeDialogs(dialogPtr)
|
|
}
|
|
|
|
return dialogs
|
|
}
|
|
}
|
|
|
|
class MockDialogRepository : DialogRepository {
|
|
override fun loadDialogs(): List<Dialog> {
|
|
val dialogs = mutableListOf<Dialog>()
|
|
for (i in 0 until 10) {
|
|
dialogs.add(
|
|
Dialog(
|
|
id = "$i",
|
|
title = "Sample Dialog $i",
|
|
lastMessage = if (i % 4 == 3) {
|
|
null
|
|
} else {
|
|
MessagePreview(
|
|
sender = if (i % 2 == 0) {
|
|
"Sender A"
|
|
} else {
|
|
"Sender B"
|
|
},
|
|
text = if (i % 3 == 2) {
|
|
"Very Long Sample Message $i, with a Lot of Text, which makes it hard to Preview"
|
|
} else {
|
|
"Sample Message $i"
|
|
},
|
|
date = LocalDateTime.now(),
|
|
ack = when (i % 3) {
|
|
0 -> MessageAck.RECEIVED
|
|
1 -> MessageAck.SENT
|
|
2 -> MessageAck.SEEN
|
|
else -> throw RuntimeException()
|
|
}
|
|
)
|
|
},
|
|
pinned = i < 4
|
|
)
|
|
)
|
|
}
|
|
return dialogs
|
|
}
|
|
}
|