@@ -50,7 +50,6 @@ import kotlinx.coroutines.flow.take
5050import retrofit2.HttpException
5151import java.io.IOException
5252import javax.inject.Inject
53- import kotlin.collections.map
5453
5554@Suppress(" LargeClass" , " TooManyFunctions" )
5655class OfflineFirstChatRepository @Inject constructor(
@@ -104,6 +103,11 @@ class OfflineFirstChatRepository @Inject constructor(
104103
105104 private val _roomRefreshFlow : MutableSharedFlow <Unit > = MutableSharedFlow ()
106105
106+ override val incomingMessageFlow: Flow <Unit >
107+ get() = _incomingMessageFlow
108+
109+ private val _incomingMessageFlow : MutableSharedFlow <Unit > = MutableSharedFlow ()
110+
107111 private var newXChatLastCommonRead: Int? = null
108112 private var itIsPaused = false
109113
@@ -493,7 +497,8 @@ class OfflineFirstChatRepository @Inject constructor(
493497 lookIntoFuture : Boolean ,
494498 hasHistory : Boolean
495499 ) {
496- val chatMessageEntities = persistChatMessagesAndHandleSystemMessages(chatMessagesJson)
500+ val chatMessageEntities =
501+ persistChatMessagesAndHandleSystemMessages(chatMessagesJson, emitOnIncoming = lookIntoFuture)
497502
498503 val oldestIdFromSync = chatMessageEntities.minByOrNull { it.id }!! .id
499504 val newestIdFromSync = chatMessageEntities.maxByOrNull { it.id }!! .id
@@ -950,7 +955,7 @@ class OfflineFirstChatRepository @Inject constructor(
950955 }
951956
952957 override suspend fun onSignalingChatMessageReceived (chatMessages : List <ChatMessageJson >) {
953- persistChatMessagesAndHandleSystemMessages(chatMessages)
958+ persistChatMessagesAndHandleSystemMessages(chatMessages, emitOnIncoming = true )
954959
955960 // we assume that the signaling messages are on top of the latest chatblock and include them inside it.
956961 // If for whatever reason the assume was not correct and there would be messages in between, the
@@ -963,7 +968,8 @@ class OfflineFirstChatRepository @Inject constructor(
963968 }
964969
965970 suspend fun persistChatMessagesAndHandleSystemMessages (
966- chatMessages : List <ChatMessageJson >
971+ chatMessages : List <ChatMessageJson >,
972+ emitOnIncoming : Boolean = false
967973 ): List <ChatMessageEntity > {
968974 handleSystemMessagesThatAffectDatabase(chatMessages)
969975
@@ -973,6 +979,16 @@ class OfflineFirstChatRepository @Inject constructor(
973979
974980 chatDao.upsertChatMessagesAndDeleteTemp(internalConversationId, chatMessageEntities)
975981
982+ if (emitOnIncoming) {
983+ val hasIncomingFromOther = chatMessages.any { msg ->
984+ msg.systemMessageType == ChatMessage .SystemMessageType .DUMMY &&
985+ msg.actorId != currentUser.userId
986+ }
987+ if (hasIncomingFromOther) {
988+ _incomingMessageFlow .emit(Unit )
989+ }
990+ }
991+
976992 return chatMessageEntities
977993 }
978994
0 commit comments