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.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
|
||||||
|
|
|
||||||
|
|
@ -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() {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue