Commit 5f2696ac authored by Leonardo Aramaki's avatar Leonardo Aramaki

Fix loading same page always on chat

parent e605713a
...@@ -6,8 +6,6 @@ import chat.rocket.android.chatroom.adapter.AutoCompleteType ...@@ -6,8 +6,6 @@ import chat.rocket.android.chatroom.adapter.AutoCompleteType
import chat.rocket.android.chatroom.adapter.PEOPLE import chat.rocket.android.chatroom.adapter.PEOPLE
import chat.rocket.android.chatroom.adapter.ROOMS import chat.rocket.android.chatroom.adapter.ROOMS
import chat.rocket.android.chatroom.domain.UriInteractor import chat.rocket.android.chatroom.domain.UriInteractor
import chat.rocket.android.chatroom.viewmodel.BaseViewModel
import chat.rocket.android.chatroom.viewmodel.MessageViewModel
import chat.rocket.android.chatroom.viewmodel.ViewModelMapper import chat.rocket.android.chatroom.viewmodel.ViewModelMapper
import chat.rocket.android.chatroom.viewmodel.suggestion.ChatRoomSuggestionViewModel import chat.rocket.android.chatroom.viewmodel.suggestion.ChatRoomSuggestionViewModel
import chat.rocket.android.chatroom.viewmodel.suggestion.CommandSuggestionViewModel import chat.rocket.android.chatroom.viewmodel.suggestion.CommandSuggestionViewModel
...@@ -75,19 +73,17 @@ class ChatRoomPresenter @Inject constructor(private val view: ChatRoomView, ...@@ -75,19 +73,17 @@ class ChatRoomPresenter @Inject constructor(private val view: ChatRoomView,
launchUI(strategy) { launchUI(strategy) {
view.showLoading() view.showLoading()
try { try {
val localMessages = messagesRepository.getByRoomId(chatRoomId) if (offset == 0L) {
val oldMessages = mapper.map(localMessages) val localMessages = messagesRepository.getByRoomId(chatRoomId)
view.showMessages(oldMessages) val oldMessages = mapper.map(localMessages)
if (oldMessages.isEmpty()) { if (oldMessages.isNotEmpty()) {
val messages = view.showMessages(oldMessages)
retryIO(description = "messages chatRoom: $chatRoomId, type: $chatRoomType, offset: $offset") { loadMissingMessages()
client.messages(chatRoomId, roomTypeOf(chatRoomType), offset, 30).result } else {
} loadAndShowMessages(chatRoomId, chatRoomType, offset)
messagesRepository.saveAll(messages) }
val allMessages = mapper.map(messages)
view.showMessages(allMessages)
} else { } else {
loadMissingMessages() loadAndShowMessages(chatRoomId, chatRoomType, offset)
} }
// TODO: For now we are marking the room as read if we can get the messages (I mean, no exception occurs) // TODO: For now we are marking the room as read if we can get the messages (I mean, no exception occurs)
...@@ -112,6 +108,16 @@ class ChatRoomPresenter @Inject constructor(private val view: ChatRoomView, ...@@ -112,6 +108,16 @@ class ChatRoomPresenter @Inject constructor(private val view: ChatRoomView,
} }
} }
private suspend fun loadAndShowMessages(chatRoomId: String, chatRoomType: String, offset: Long = 0) {
val messages =
retryIO(description = "messages chatRoom: $chatRoomId, type: $chatRoomType, offset: $offset") {
client.messages(chatRoomId, roomTypeOf(chatRoomType), offset, 30).result
}
messagesRepository.saveAll(messages)
val allMessages = mapper.map(messages)
view.showMessages(allMessages)
}
fun sendMessage(chatRoomId: String, text: String, messageId: String?) { fun sendMessage(chatRoomId: String, text: String, messageId: String?) {
launchUI(strategy) { launchUI(strategy) {
try { try {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment