fix: new messages not coming in when an edit comes in

Signed-off-by: Infi <wingit@geist.ga>
This commit is contained in:
Infi 2023-06-03 18:01:20 +02:00
parent 82c352191b
commit 1b9e458640
1 changed files with 13 additions and 3 deletions

View File

@ -10,6 +10,7 @@ import androidx.lifecycle.viewModelScope
import chat.revolt.api.RevoltAPI
import chat.revolt.api.RevoltJson
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.MessageDeleteFrame
@ -283,9 +284,12 @@ class ChannelScreenViewModel : ViewModel() {
currentMsg.id == it.id
} ?: return@onEach // Message not found, ignore.
if (messageFrame.author != null)
addUserIfUnknown(messageFrame.author)
regroupMessages(renderableMessages.map { currentMsg ->
if (currentMsg.id == it.id) {
messageFrame
currentMsg.mergeWithPartial(messageFrame)
} else {
currentMsg
}
@ -295,9 +299,10 @@ class ChannelScreenViewModel : ViewModel() {
is MessageDeleteFrame -> {
if (it.channel != channel?.id) return@onEach
regroupMessages(renderableMessages.filter { currentMsg ->
val newRenderableMessages = renderableMessages.filter { currentMsg ->
currentMsg.id != it.id
})
}
regroupMessages(newRenderableMessages)
}
is ChannelStartTypingFrame -> {
@ -314,6 +319,11 @@ class ChannelScreenViewModel : ViewModel() {
_typingUsers.remove(it.user)
}
is RealtimeSocketFrames.Reconnected -> {
Log.d("ChannelScreen", "Reconnected to WS.")
listenForWsFrame()
}
}
}.catch {
Log.e("ChannelScreen", "Failed to receive WS frame", it)