diff --git a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt index 9af2aaa32..e0d32e9b7 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -680,12 +680,10 @@ class ChatActivity : val urlForChatting = ApiUtils.getUrlForChat(chatApiVersion, conversationUser?.baseUrl, roomToken) - if (adapter?.isEmpty == true) { - chatViewModel.loadMessages( - withCredentials = credentials!!, - withUrl = urlForChatting - ) - } + chatViewModel.loadMessages( + withCredentials = credentials!!, + withUrl = urlForChatting + ) } else { Log.w( TAG, diff --git a/app/src/main/java/com/nextcloud/talk/chat/data/ChatMessageRepository.kt b/app/src/main/java/com/nextcloud/talk/chat/data/ChatMessageRepository.kt index d42c3bff3..3f1ac075a 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/data/ChatMessageRepository.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/data/ChatMessageRepository.kt @@ -46,7 +46,7 @@ interface ChatMessageRepository : LifecycleAwareManager { fun setData(conversationModel: ConversationModel, credentials: String, urlForChatting: String) - fun loadInitialMessages(withNetworkParams: Bundle): Job + fun initScopeAndLoadInitialMessages(withNetworkParams: Bundle) /** * Loads messages from local storage. If the messages are not found, then it diff --git a/app/src/main/java/com/nextcloud/talk/chat/data/network/OfflineFirstChatRepository.kt b/app/src/main/java/com/nextcloud/talk/chat/data/network/OfflineFirstChatRepository.kt index 90ce591d8..2953fab83 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/data/network/OfflineFirstChatRepository.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/data/network/OfflineFirstChatRepository.kt @@ -45,6 +45,7 @@ import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.retryWhen +import kotlinx.coroutines.isActive import kotlinx.coroutines.launch import java.io.IOException import javax.inject.Inject @@ -111,7 +112,7 @@ class OfflineFirstChatRepository @Inject constructor( private var newXChatLastCommonRead: Int? = null private var itIsPaused = false - private val scope = CoroutineScope(Dispatchers.IO) + private lateinit var scope: CoroutineScope lateinit var internalConversationId: String private lateinit var conversationModel: ConversationModel @@ -125,7 +126,12 @@ class OfflineFirstChatRepository @Inject constructor( internalConversationId = conversationModel.internalId } - override fun loadInitialMessages(withNetworkParams: Bundle): Job = + override fun initScopeAndLoadInitialMessages(withNetworkParams: Bundle) { + scope = CoroutineScope(Dispatchers.IO) + loadInitialMessages(withNetworkParams) + } + + private fun loadInitialMessages(withNetworkParams: Bundle): Job = scope.launch { Log.d(TAG, "---- loadInitialMessages ------------") newXChatLastCommonRead = conversationModel.lastCommonReadMessage @@ -793,7 +799,7 @@ class OfflineFirstChatRepository @Inject constructor( } override fun handleOnStop() { - // unused atm + scope.cancel() } override fun handleChatOnBackPress() { diff --git a/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt b/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt index bb2abef36..b92433fd2 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt @@ -395,7 +395,7 @@ class ChatViewModel @Inject constructor( val bundle = Bundle() bundle.putString(BundleKeys.KEY_CHAT_URL, withUrl) bundle.putString(BundleKeys.KEY_CREDENTIALS, withCredentials) - chatRepository.loadInitialMessages( + chatRepository.initScopeAndLoadInitialMessages( withNetworkParams = bundle ) }