@@ -448,7 +448,7 @@ class OfflineFirstChatRepository @Inject constructor(
448448 return @flow
449449 }
450450
451- getAndPersistMessages(bundle )
451+ fetchAndPersistSingleMessage(messageId )
452452
453453 emitAll(
454454 observeMessageNonNull(internalConversationId, messageId)
@@ -457,6 +457,18 @@ class OfflineFirstChatRepository @Inject constructor(
457457 )
458458 }
459459
460+ private suspend fun fetchAndPersistSingleMessage (messageId : Long ) {
461+ val messages = network.getContextForChatMessage(
462+ credentials = credentials,
463+ baseUrl = currentUser.baseUrl!! ,
464+ token = roomToken,
465+ messageId = messageId.toString(),
466+ limit = 1 ,
467+ threadId = threadId?.toInt()
468+ )
469+ persistChatMessagesAndHandleSystemMessages(messages)
470+ }
471+
460472 @Suppress(" Detekt.TooGenericExceptionCaught" )
461473 override suspend fun loadMessageContext (
462474 messageId : Long ,
@@ -542,8 +554,12 @@ class OfflineFirstChatRepository @Inject constructor(
542554 }
543555 }
544556
557+ // Callers must put a KEY_FIELD_MAP (see getFieldMap/syncer.buildFieldMap) into bundle before
558+ // calling this.
545559 private suspend fun getAndPersistMessages (bundle : Bundle ): Boolean {
546- val fieldMap = bundle.getSerializable(BundleKeys .KEY_FIELD_MAP ) as HashMap <String , Int >
560+ val fieldMap = requireNotNull(bundle.getSerializable(BundleKeys .KEY_FIELD_MAP ) as ? HashMap <String , Int >) {
561+ " getAndPersistMessages requires bundle to carry KEY_FIELD_MAP"
562+ }
547563 val outcome = syncer.pullAndPersistMessages(syncTarget, fieldMap, syncEvents)
548564 return outcome.persistedNewMessages
549565 }
0 commit comments