diff --git a/app/src/main/java/chat/revolt/api/routes/channel/Channel.kt b/app/src/main/java/chat/revolt/api/routes/channel/Channel.kt index 549c1170..1e191e9d 100644 --- a/app/src/main/java/chat/revolt/api/routes/channel/Channel.kt +++ b/app/src/main/java/chat/revolt/api/routes/channel/Channel.kt @@ -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 diff --git a/app/src/main/java/chat/revolt/screens/chat/views/ChannelScreen.kt b/app/src/main/java/chat/revolt/screens/chat/views/ChannelScreen.kt index e7bd255d..00e93f4a 100644 --- a/app/src/main/java/chat/revolt/screens/chat/views/ChannelScreen.kt +++ b/app/src/main/java/chat/revolt/screens/chat/views/ChannelScreen.kt @@ -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() {