feat: support MessageAppend event

website embeds show up right away now

Signed-off-by: Infi <wingit@geist.ga>
This commit is contained in:
Infi 2023-08-02 19:36:18 +02:00
parent b26b8bad47
commit 6a7cbc335d
2 changed files with 47 additions and 0 deletions

View File

@ -12,6 +12,7 @@ import chat.revolt.api.realtime.frames.receivable.ChannelAckFrame
import chat.revolt.api.realtime.frames.receivable.ChannelStartTypingFrame
import chat.revolt.api.realtime.frames.receivable.ChannelStopTypingFrame
import chat.revolt.api.realtime.frames.receivable.ChannelUpdateFrame
import chat.revolt.api.realtime.frames.receivable.MessageAppendFrame
import chat.revolt.api.realtime.frames.receivable.MessageFrame
import chat.revolt.api.realtime.frames.receivable.MessageUpdateFrame
import chat.revolt.api.realtime.frames.receivable.PongFrame
@ -176,6 +177,33 @@ object RealtimeSocket {
}
}
"MessageAppend" -> {
val messageAppendFrame =
RevoltJson.decodeFromString(MessageAppendFrame.serializer(), rawFrame)
Log.d(
"RealtimeSocket",
"Received message append frame for ${messageAppendFrame.id} in channel ${messageAppendFrame.channel}."
)
var message = RevoltAPI.messageCache[messageAppendFrame.id]
if (message == null) {
Log.d(
"RealtimeSocket",
"Message ${messageAppendFrame.id} not found in cache. Will not append."
)
return
}
messageAppendFrame.append.embeds?.let {
message = message!!.copy(embeds = message!!.embeds?.plus(it) ?: it)
}
RevoltAPI.messageCache[messageAppendFrame.id] = message!!
RevoltAPI.wsFrameChannel.send(messageAppendFrame)
}
"MessageUpdate" -> {
val messageUpdateFrame =
RevoltJson.decodeFromString(MessageUpdateFrame.serializer(), rawFrame)

View File

@ -19,6 +19,7 @@ import chat.revolt.api.internals.ULID
import chat.revolt.api.realtime.RealtimeSocketFrames
import chat.revolt.api.realtime.frames.receivable.ChannelStartTypingFrame
import chat.revolt.api.realtime.frames.receivable.ChannelStopTypingFrame
import chat.revolt.api.realtime.frames.receivable.MessageAppendFrame
import chat.revolt.api.realtime.frames.receivable.MessageDeleteFrame
import chat.revolt.api.realtime.frames.receivable.MessageFrame
import chat.revolt.api.realtime.frames.receivable.MessageUpdateFrame
@ -319,6 +320,24 @@ class ChannelScreenViewModel : ViewModel() {
})
}
is MessageAppendFrame -> {
if (it.channel != activeChannel?.id) return@onEach
val hasMessage = renderableMessages.any { currentMsg ->
currentMsg.id == it.id
}
if (!hasMessage) return@onEach
regroupMessages(renderableMessages.map { currentMsg ->
if (currentMsg.id == it.id) {
RevoltAPI.messageCache[it.id] ?: currentMsg
} else {
currentMsg
}
})
}
is MessageDeleteFrame -> {
if (it.channel != activeChannel?.id) return@onEach