Использование сопрограммы внутри функции Transform.map - PullRequest
1 голос
/ 26 января 2020

Ну, вот хитрый. У меня есть запрос из моей комнаты DB. Результатом является реляционный POJO

class MessageWithMsgQueueAccount {

    @Embedded
    var message: MessageDto? = null

    @Relation(parentColumn = "clientMessageId", entityColumn = "clientMessageId", entity = MessageQueueDto::class)
    var messageQueueList: List<MsgQueueAccount> = ArrayList()


}

Так что, когда я получаю это, я применяю Преобразование к этому объекту, чтобы я мог создать другое, которое имеет только ту информацию, которую я хочу.

fun toContactMessageChatItem(item: MessageWithMsgQueueAccount?, accountDto: AccountDto): MessageChatItem {

            item?.message?.let {
                // Procedure for creating the fields that i want

                val isQuoted = it.quotemsgid > 0L
                if (isQuoted) {
                    // Fetch quoted message body
                }
                return MessageChatItem(.....)
            } ?: run {
                return MessageChatItem(..........)
            }
    }

Поскольку это чат, одно поле, которое я хочу настроить, это тело сообщения в кавычках. То, что я имею в качестве «ввода», является messageId сообщения, которое цитируется. Так что это означает, что я должен снова сделать запрос к моей комнате DB внутри функции преобразования. То, как я это сделал, это

val isQuoted = it.quotemsgid > 0L
var quotedBody = ""
if (isQuoted) {
   // Fetch quoted message body
   viewModelScope.launch(Dispatchers.IO) {
   val quotedMessage = messagesRepository.getMessageByMessageId(it.quotemsgid)
   withContext(Dispatchers.Main) {
      quotedBody = quotedMessage.body
   }
}
}

Нет конкретного вопроса c, но есть ли лучший способ сделать что-то подобное, то есть запросить БД внутри функции преобразования. Есть ли способ, что это создаст проблему синхронизации с моими элементами или что-то?

...