feat: support MessageAppend event
website embeds show up right away now Signed-off-by: Infi <wingit@geist.ga>
This commit is contained in:
parent
b26b8bad47
commit
6a7cbc335d
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue