feat: fetch latest 50 messages on channel load
just something temporary so i have stuff to test with
This commit is contained in:
parent
2a14f5fdc9
commit
af4e3aa12f
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
Loading…
Reference in New Issue