mobile: fix race condition with live messages (when message is "revived" when it is being sent as no longer live – possibly core should reject "live" updates to non-live messages too) (#1668)

* mobile: fix race condition with live messages (when message is "revived" when it is being sent as no longer live – possibly core should reject "live" updates to non-live messages too)

* android: move delay for live messages
This commit is contained in:
Evgeny Poberezkin
2022-12-31 10:25:32 +00:00
committed by GitHub
parent 80f0108b41
commit 9f2d5486b6
3 changed files with 12 additions and 5 deletions

View File

@@ -421,15 +421,17 @@ fun ComposeView(
return null
}
val liveMessage = cs.liveMessage
if (!live) {
if (liveMessage != null) composeState.value = cs.copy(liveMessage = null)
sending()
}
if (cs.contextItem is ComposeContextItem.EditingItem) {
val ei = cs.contextItem.chatItem
sent = updateMessage(ei, cInfo, live)
} else if (cs.liveMessage != null) {
sent = updateMessage(cs.liveMessage.chatItem, cInfo, live)
} else if (liveMessage != null) {
sent = updateMessage(liveMessage.chatItem, cInfo, live)
} else {
val msgs: ArrayList<MsgContent> = ArrayList()
val files: ArrayList<String> = ArrayList()

View File

@@ -454,9 +454,10 @@ private fun startLiveMessage(
sendButtonAlpha.snapTo(1f)
}
scope.launch {
delay(3000)
while (composeState.value.liveMessage != null) {
delay(3000)
update()
delay(3000)
}
}
}

View File

@@ -505,10 +505,14 @@ struct ComposeView: View {
private func sendMessageAsync(_ text: String?, live: Bool) async -> ChatItem? {
var sent: ChatItem?
let msgText = text ?? composeState.message
if !live { await sending() }
let liveMessage = composeState.liveMessage
if !live {
if liveMessage != nil { composeState = composeState.copy(liveMessage: nil) }
await sending()
}
if case let .editingItem(ci) = composeState.contextItem {
sent = await updateMessage(ci, live: live)
} else if let liveMessage = composeState.liveMessage {
} else if let liveMessage = liveMessage {
sent = await updateMessage(liveMessage.chatItem, live: live)
} else {
var quoted: Int64? = nil