feat: fetch latest 50 messages on channel load

just something temporary so i have stuff to test with
This commit is contained in:
Infi 2022-12-27 05:16:15 +01:00
parent 2a14f5fdc9
commit af4e3aa12f
2 changed files with 39 additions and 4 deletions

View File

@ -5,10 +5,12 @@ import chat.revolt.api.RevoltHttp
import chat.revolt.api.RevoltJson
import chat.revolt.api.internals.ULID
import chat.revolt.api.schemas.Embed
import chat.revolt.api.schemas.Message
import chat.revolt.api.schemas.MessagesInChannel
import io.ktor.client.request.*
import io.ktor.client.statement.*
import io.ktor.http.*
import kotlinx.serialization.builtins.ListSerializer
suspend fun fetchMessagesFromChannel(
channelId: String,
@ -32,10 +34,23 @@ suspend fun fetchMessagesFromChannel(
}
.bodyAsText()
return RevoltJson.decodeFromString(
MessagesInChannel.serializer(),
response
)
if (include_users) {
return RevoltJson.decodeFromString(
MessagesInChannel.serializer(),
response
)
} else {
val messages = RevoltJson.decodeFromString(
ListSerializer(Message.serializer()),
response
)
return MessagesInChannel(
messages = messages,
users = emptyList(),
members = emptyList()
)
}
}
@kotlinx.serialization.Serializable

View File

@ -27,6 +27,7 @@ import chat.revolt.api.schemas.Message as MessageSchema
import chat.revolt.components.chat.Message
import kotlinx.coroutines.launch
import chat.revolt.R
import chat.revolt.api.routes.channel.fetchMessagesFromChannel
import chat.revolt.components.chat.MessageField
class ChannelScreenViewModel : ViewModel() {
@ -99,6 +100,24 @@ class ChannelScreenViewModel : ViewModel() {
RealtimeSocket.registerChannelCallback(channel!!.id!!, callbacks!!)
}
fun fetchMessages() {
if (channel == null) {
return
}
viewModelScope.launch {
fetchMessagesFromChannel(channel!!.id!!, limit = 50, false).let {
it.messages!!.reversed().forEach { message ->
addUserIfUnknown(message.author!!)
if (!RevoltAPI.messageCache.containsKey(message.id)) {
RevoltAPI.messageCache[message.id!!] = message
}
_renderableMessages.add(message)
}
}
}
}
fun fetchChannel(id: String) {
if (id in RevoltAPI.channelCache) {
_channel = RevoltAPI.channelCache[id]
@ -107,6 +126,7 @@ class ChannelScreenViewModel : ViewModel() {
}
registerCallback()
fetchMessages()
}
fun sendPendingMessage() {