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.ChannelStartTypingFrame
|
||||||
import chat.revolt.api.realtime.frames.receivable.ChannelStopTypingFrame
|
import chat.revolt.api.realtime.frames.receivable.ChannelStopTypingFrame
|
||||||
import chat.revolt.api.realtime.frames.receivable.ChannelUpdateFrame
|
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.MessageFrame
|
||||||
import chat.revolt.api.realtime.frames.receivable.MessageUpdateFrame
|
import chat.revolt.api.realtime.frames.receivable.MessageUpdateFrame
|
||||||
import chat.revolt.api.realtime.frames.receivable.PongFrame
|
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" -> {
|
"MessageUpdate" -> {
|
||||||
val messageUpdateFrame =
|
val messageUpdateFrame =
|
||||||
RevoltJson.decodeFromString(MessageUpdateFrame.serializer(), rawFrame)
|
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.RealtimeSocketFrames
|
||||||
import chat.revolt.api.realtime.frames.receivable.ChannelStartTypingFrame
|
import chat.revolt.api.realtime.frames.receivable.ChannelStartTypingFrame
|
||||||
import chat.revolt.api.realtime.frames.receivable.ChannelStopTypingFrame
|
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.MessageDeleteFrame
|
||||||
import chat.revolt.api.realtime.frames.receivable.MessageFrame
|
import chat.revolt.api.realtime.frames.receivable.MessageFrame
|
||||||
import chat.revolt.api.realtime.frames.receivable.MessageUpdateFrame
|
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 -> {
|
is MessageDeleteFrame -> {
|
||||||
if (it.channel != activeChannel?.id) return@onEach
|
if (it.channel != activeChannel?.id) return@onEach
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue