init other data earlier than ConversationModel

because setData was called too late (after sendTempChatMessages was called from messageInputFragment, internalConversationId was not initialized in repository).
With this change, internalConversationId, credentials and urlForChatting are initialized earlier which should avoid the issue.
However conversationModel is still initialized quite late and should be accessed with caution. This could may be improved by better architecture..

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
This commit is contained in:
Marcel Hibbe 2025-02-18 10:48:17 +01:00
parent 17702bbe92
commit 1bcdeb2d46
No known key found for this signature in database
GPG Key ID: C793F8B59F43CE7B
4 changed files with 26 additions and 16 deletions

View File

@ -440,10 +440,17 @@ class ChatActivity :
conversationUser = currentUserProvider.currentUser.blockingGet()
handleIntent(intent)
messageInputFragment = getMessageInputFragment()
chatViewModel = ViewModelProvider(this, viewModelFactory)[ChatViewModel::class.java]
val urlForChatting = ApiUtils.getUrlForChat(chatApiVersion, conversationUser?.baseUrl, roomToken)
val credentials = ApiUtils.getCredentials(conversationUser!!.username, conversationUser!!.token)
chatViewModel.initData(
credentials!!,
urlForChatting,
roomToken
)
messageInputFragment = getMessageInputFragment()
messageInputViewModel = ViewModelProvider(this, viewModelFactory)[MessageInputViewModel::class.java]
messageInputViewModel.setData(chatViewModel.getChatRepository())
@ -576,14 +583,8 @@ class ChatActivity :
chatViewModel.getConversationFlow
.onEach { conversationModel ->
currentConversation = conversationModel
val urlForChatting = ApiUtils.getUrlForChat(chatApiVersion, conversationUser?.baseUrl, roomToken)
val credentials = ApiUtils.getCredentials(conversationUser!!.username, conversationUser!!.token)
chatViewModel.setData(
currentConversation!!,
credentials!!,
urlForChatting
chatViewModel.updateConversation(
currentConversation!!
)
logConversationInfos("GetRoomSuccessState")

View File

@ -44,7 +44,9 @@ interface ChatMessageRepository : LifecycleAwareManager {
val removeMessageFlow: Flow<ChatMessage>
fun setData(conversationModel: ConversationModel, credentials: String, urlForChatting: String)
fun initData(credentials: String, urlForChatting: String, roomToken: String)
fun updateConversation(conversationModel: ConversationModel)
fun initScopeAndLoadInitialMessages(withNetworkParams: Bundle)

View File

@ -118,11 +118,14 @@ class OfflineFirstChatRepository @Inject constructor(
private lateinit var credentials: String
private lateinit var urlForChatting: String
override fun setData(conversationModel: ConversationModel, credentials: String, urlForChatting: String) {
this.conversationModel = conversationModel
override fun initData(credentials: String, urlForChatting: String, roomToken: String) {
internalConversationId = currentUser.id.toString() + "@" + roomToken
this.credentials = credentials
this.urlForChatting = urlForChatting
internalConversationId = conversationModel.internalId
}
override fun updateConversation(conversationModel: ConversationModel) {
this.conversationModel = conversationModel
}
override fun initScopeAndLoadInitialMessages(withNetworkParams: Bundle) {

View File

@ -243,8 +243,12 @@ class ChatViewModel @Inject constructor(
val reactionDeletedViewState: LiveData<ViewState>
get() = _reactionDeletedViewState
fun setData(conversationModel: ConversationModel, credentials: String, urlForChatting: String) {
chatRepository.setData(conversationModel, credentials, urlForChatting)
fun initData(credentials: String, urlForChatting: String, roomToken: String) {
chatRepository.initData(credentials, urlForChatting, roomToken)
}
fun updateConversation(currentConversation: ConversationModel) {
chatRepository.updateConversation(currentConversation)
}
fun getRoom(token: String) {