fix(regression/cs2): issue in which ui callbacks fire multiply

Signed-off-by: Infi <infi@infi.sh>
This commit is contained in:
Infi 2024-06-03 19:54:23 +02:00
parent 7fca8e503c
commit d119f7b47f
2 changed files with 37 additions and 31 deletions

View File

@ -170,7 +170,7 @@ fun ChannelScreen(
val context = LocalContext.current
LaunchedEffect(Unit) {
viewModel.startListening()
viewModel.startListening(createUiCallbackListener = true)
}
// Load/switch channel

View File

@ -444,7 +444,7 @@ class ChannelScreenViewModel @Inject constructor(
ackChannel(channel?.id ?: return, messageId)
}
suspend fun startListening() {
suspend fun startListening(createUiCallbackListener: Boolean = true) {
viewModelScope.launch {
withContext(RevoltAPI.realtimeContext) {
flow {
@ -633,7 +633,7 @@ class ChannelScreenViewModel @Inject constructor(
is RealtimeSocketFrames.Reconnected -> {
Log.d("ChannelScreen", "Reconnected to WS.")
loadMessages(50, ignoreExisting = true)
startListening()
startListening(createUiCallbackListener = false)
}
}
}.catch {
@ -641,6 +641,8 @@ class ChannelScreenViewModel @Inject constructor(
}.launchIn(this)
}
}
if (createUiCallbackListener) {
viewModelScope.launch {
withContext(Dispatchers.Main) {
UiCallbacks.uiCallbackFlow.onEach {
@ -654,7 +656,10 @@ class ChannelScreenViewModel @Inject constructor(
val shouldMention = kvStorage.getBoolean("mentionOnReply") ?: false
draftReplyTo.add(
SendMessageReply(message.message.id ?: return@onEach, shouldMention)
SendMessageReply(
message.message.id ?: return@onEach,
shouldMention
)
)
}
@ -675,6 +680,7 @@ class ChannelScreenViewModel @Inject constructor(
}
}
}
}
private suspend fun updateItems(newItems: List<ChannelScreenItem>) {
// Spec https://wiki.rvlt.gg/index.php/Text_Channel_(UI)#Message_Grouping_Algorithm