Как запретить наблюдателю viewmodel наблюдать изменения с помощью определенной функции c DAO? - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть следующая функция, которая получает все объекты сообщения из моей БД и обновляет значение внутри каждого из них -

private fun initRoomObserving() {
        dashboardViewModel = ViewModelProvider(this).get(DashboardViewModel::class.java)
        dashboardViewModel.getAllMessagesEntitiesForGroup(currentGroupId).observe(this, Observer { receivedMessageList ->
            Log.d("observerCalled", "called")
            receivedMessageList.forEach {
                it.isReceiver = it.senderUsername != userPhoneNumber
                if (!messagesList.contains(it) && currentGroupId == it.groupId) {
                    messagesList.add(it)
                    lastMessage = it.content
                }
            }
            messagesList.forEach {
                launch {
                    if (!it.didSeeMessage) {
                        dashboardViewModel.updateMessageAsRead(it.messageId, currentGroupId)
                    }
                }
            }
            conversationAdapter.notifyItemInserted(messagesList.size)
            conversationAdapter.notifyItemRangeChanged(messagesList.size - 1, 1)
            conversationRecyclerview.scrollToPosition(messagesList.size - 1)
        })
    }

Проблема заключается в том, что, как только я запускаю функцию updateMessageAsRead, которая приводит к следующему методу дао -

@Query("update ${Constants.messagesTable} set didSeeMessage = 1 where messageId = :messageId and groupId = :groupId")
suspend fun updateMessageAsRead(messageId : String, groupId : String)

он снова и снова вызывает моего наблюдателя ViewModel, и я застреваю в бесконечном l oop наблюдении - обновлении - наблюдении

как я могу сбежать это l oop и помешать наблюдению полей, на которые влияет эта функция?

...