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

View File

@ -27,6 +27,7 @@ import chat.revolt.api.schemas.Message as MessageSchema
import chat.revolt.components.chat.Message import chat.revolt.components.chat.Message
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import chat.revolt.R import chat.revolt.R
import chat.revolt.api.routes.channel.fetchMessagesFromChannel
import chat.revolt.components.chat.MessageField import chat.revolt.components.chat.MessageField
class ChannelScreenViewModel : ViewModel() { class ChannelScreenViewModel : ViewModel() {
@ -99,6 +100,24 @@ class ChannelScreenViewModel : ViewModel() {
RealtimeSocket.registerChannelCallback(channel!!.id!!, callbacks!!) 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) { fun fetchChannel(id: String) {
if (id in RevoltAPI.channelCache) { if (id in RevoltAPI.channelCache) {
_channel = RevoltAPI.channelCache[id] _channel = RevoltAPI.channelCache[id]
@ -107,6 +126,7 @@ class ChannelScreenViewModel : ViewModel() {
} }
registerCallback() registerCallback()
fetchMessages()
} }
fun sendPendingMessage() { fun sendPendingMessage() {