Update send message to account for guid returned by servers
This commit is contained in:
@@ -36,8 +36,13 @@ class MessageListViewModel @Inject constructor(
|
||||
}
|
||||
}
|
||||
|
||||
private data class OutgoingMessage(
|
||||
val requestGuid: String,
|
||||
val message: Message,
|
||||
)
|
||||
|
||||
private var conversation: Conversation? = null
|
||||
private val pendingMessages: MutableStateFlow<List<Message>> = MutableStateFlow(listOf())
|
||||
private val pendingMessages: MutableStateFlow<List<OutgoingMessage>> = MutableStateFlow(listOf())
|
||||
|
||||
init {
|
||||
viewModelScope.launch {
|
||||
@@ -45,14 +50,14 @@ class MessageListViewModel @Inject constructor(
|
||||
// By now, the repository should've committed this to the store.
|
||||
repository.messageDeliveredChannel.collectLatest { event ->
|
||||
pendingMessages.value =
|
||||
pendingMessages.value.filter { it.guid != event.message.guid }
|
||||
pendingMessages.value.filter { it.requestGuid != event.requestGuid }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val messages: Flow<List<Message>>
|
||||
get() = repository.messagesChanged(conversation!!)
|
||||
.combine(pendingMessages) { a, b -> a.union(b) }
|
||||
.combine(pendingMessages) { a, b -> a.union(b.map { it.message }) }
|
||||
.map { messages ->
|
||||
messages
|
||||
.sortedBy { it.date }
|
||||
@@ -70,12 +75,12 @@ class MessageListViewModel @Inject constructor(
|
||||
conversation = conversation!!,
|
||||
)
|
||||
|
||||
pendingMessages.value = pendingMessages.value + listOf(outgoingMessage)
|
||||
repository.enqueueOutgoingMessage(outgoingMessage, conversation!!)
|
||||
val outgoingGUID = repository.enqueueOutgoingMessage(outgoingMessage, conversation!!)
|
||||
pendingMessages.value = pendingMessages.value + listOf(OutgoingMessage(outgoingGUID, outgoingMessage))
|
||||
}
|
||||
|
||||
fun isPendingMessage(message: Message): Boolean {
|
||||
return pendingMessages.value.contains(message)
|
||||
return pendingMessages.value.any { it.message.guid == message.guid }
|
||||
}
|
||||
|
||||
fun synchronize() = viewModelScope.launch {
|
||||
|
||||
Reference in New Issue
Block a user