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 e12d65a7..2901882d 100644 --- a/app/src/main/java/chat/revolt/api/realtime/RealtimeSocket.kt +++ b/app/src/main/java/chat/revolt/api/realtime/RealtimeSocket.kt @@ -39,6 +39,7 @@ object RealtimeSocket { Log.d("RealtimeSocket", "Connected to websocket.") updateDisconnectionState(DisconnectionState.Connected) + invalidateAllChannelStates() // Send authorization frame val authFrame = AuthorizationFrame("Authenticate", token) @@ -166,11 +167,18 @@ object RealtimeSocket { } } } + + private fun invalidateAllChannelStates() { + channelCallbacks.forEach { (_, callback) -> + callback.onStateInvalidate() + } + } interface ChannelCallback { fun onStartTyping(typing: ChannelStartTypingFrame) fun onStopTyping(typing: ChannelStopTypingFrame) fun onMessage(message: MessageFrame) + fun onStateInvalidate() } private val channelCallbacks: SnapshotStateMap = mutableStateMapOf() diff --git a/app/src/main/java/chat/revolt/screens/chat/views/ChannelScreen.kt b/app/src/main/java/chat/revolt/screens/chat/views/ChannelScreen.kt index 6aeb005d..2b07b87f 100644 --- a/app/src/main/java/chat/revolt/screens/chat/views/ChannelScreen.kt +++ b/app/src/main/java/chat/revolt/screens/chat/views/ChannelScreen.kt @@ -156,6 +156,11 @@ class ChannelScreenViewModel : ViewModel() { _typingUsers.remove(typing.user) } } + + override fun onStateInvalidate() { + fetchMessages() + _typingUsers.clear() + } } private fun registerCallback() {