diff --git a/app/src/main/java/chat/revolt/api/realtime/RealtimeSocket.kt b/app/src/main/java/chat/revolt/api/realtime/RealtimeSocket.kt index 5cf4b8b5..4c34bc98 100644 --- a/app/src/main/java/chat/revolt/api/realtime/RealtimeSocket.kt +++ b/app/src/main/java/chat/revolt/api/realtime/RealtimeSocket.kt @@ -13,6 +13,7 @@ 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.MessageDeleteFrame import chat.revolt.api.realtime.frames.receivable.MessageFrame import chat.revolt.api.realtime.frames.receivable.MessageReactFrame import chat.revolt.api.realtime.frames.receivable.MessageUpdateFrame @@ -256,6 +257,27 @@ object RealtimeSocket { RevoltAPI.wsFrameChannel.send(messageUpdateFrame) } + "MessageDelete" -> { + val messageDeleteFrame = + RevoltJson.decodeFromString(MessageDeleteFrame.serializer(), rawFrame) + Log.d( + "RealtimeSocket", + "Received message react frame for ${messageDeleteFrame.id}." + ) + + val message = RevoltAPI.messageCache[messageDeleteFrame.id] + if (message == null) { + Log.d( + "RealtimeSocket", + "Message ${messageDeleteFrame.id} not found in cache. Will not delete." + ) + return + } + + RevoltAPI.messageCache.remove(messageDeleteFrame.id) + RevoltAPI.wsFrameChannel.send(messageDeleteFrame) + } + "MessageReact" -> { val messageReactFrame = RevoltJson.decodeFromString(MessageReactFrame.serializer(), rawFrame) diff --git a/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreenViewModel.kt b/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreenViewModel.kt index b755e959..e977331d 100644 --- a/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreenViewModel.kt +++ b/app/src/main/java/chat/revolt/screens/chat/views/channel/ChannelScreenViewModel.kt @@ -403,6 +403,10 @@ class ChannelScreenViewModel : ViewModel() { val newRenderableMessages = renderableMessages.filter { currentMsg -> currentMsg.id != it.id } + + renderableMessages.clear() + renderableMessages.addAll(newRenderableMessages) + regroupMessages(newRenderableMessages) }