load conversation from DB first, then update by request if connection is available

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
This commit is contained in:
Marcel Hibbe 2024-10-01 15:54:09 +02:00
parent 818a843143
commit b1d6086684
No known key found for this signature in database
GPG Key ID: C793F8B59F43CE7B
3 changed files with 13 additions and 11 deletions

View File

@ -225,7 +225,7 @@ class ChatViewModel @Inject constructor(
fun getRoom(user: User, token: String) {
_getRoomViewState.value = GetRoomStartState
conversationRepository.getConversationSettings(token)
conversationRepository.getRoom(token)
// chatNetworkDataSource.getRoom(user, token)
// .subscribeOn(Schedulers.io())

View File

@ -35,5 +35,5 @@ interface OfflineConversationsRepository {
* Called once onStart to emit a conversation to [conversationFlow]
* to be handled asynchronously.
*/
fun getConversationSettings(roomToken: String): Job
fun getRoom(roomToken: String): Job
}

View File

@ -56,17 +56,19 @@ class OfflineFirstConversationsRepository @Inject constructor(
override fun getRooms(): Job =
scope.launch {
val resultsFromSync = sync()
if (!resultsFromSync.isNullOrEmpty()) {
val conversations = resultsFromSync.map(ConversationEntity::asModel)
_roomListFlow.emit(conversations)
} else {
val conversationsFromDb = getListOfConversations(user.id!!)
_roomListFlow.emit(conversationsFromDb)
val initialConversationModels = getListOfConversations(user.id!!)
_roomListFlow.emit(initialConversationModels)
if (monitor.isOnline.first()) {
val conversationEntitiesFromSync = getRoomsFromServer()
if (!conversationEntitiesFromSync.isNullOrEmpty()) {
val conversationModelsFromSync = conversationEntitiesFromSync.map(ConversationEntity::asModel)
_roomListFlow.emit(conversationModelsFromSync)
}
}
}
override fun getConversationSettings(roomToken: String): Job =
override fun getRoom(roomToken: String): Job =
scope.launch {
val id = user.id!!
val model = getConversation(id, roomToken)
@ -100,7 +102,7 @@ class OfflineFirstConversationsRepository @Inject constructor(
}
}
private suspend fun sync(): List<ConversationEntity>? {
private suspend fun getRoomsFromServer(): List<ConversationEntity>? {
var conversationsFromSync: List<ConversationEntity>? = null
if (!monitor.isOnline.first()) {