Private
Public Access
1
0

Update send message to account for guid returned by servers

This commit is contained in:
2023-12-10 18:30:56 -08:00
parent 6375900710
commit a8886279c6
7 changed files with 52 additions and 36 deletions

View File

@@ -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 {