Prevent local echoes from being stuck behind read receipt and reaction sending

This commit is contained in:
Stefan Ceriu
2023-08-16 18:36:42 +03:00
committed by Stefan Ceriu
parent d6b3a000f0
commit 22e4f21b99
+11 -10
View File
@@ -26,8 +26,9 @@ class RoomProxy: RoomProxyProtocol {
private let backgroundTaskService: BackgroundTaskServiceProtocol private let backgroundTaskService: BackgroundTaskServiceProtocol
private let backgroundTaskName = "SendRoomEvent" private let backgroundTaskName = "SendRoomEvent"
private let userInitiatedDispatchQueue = DispatchQueue(label: "io.element.elementx.roomproxy.userinitiated", qos: .userInitiated) private let messageSendingDispatchQueue = DispatchQueue(label: "io.element.elementx.roomproxy.message_sending", qos: .userInitiated)
private let lowPriorityDispatchQueue = DispatchQueue(label: "io.element.elementx.roomproxy.lowpriority", qos: .utility) private let userInitiatedDispatchQueue = DispatchQueue(label: "io.element.elementx.roomproxy.user_initiated", qos: .userInitiated)
private let lowPriorityDispatchQueue = DispatchQueue(label: "io.element.elementx.roomproxy.low_priority", qos: .utility)
private var sendMessageBackgroundTask: BackgroundTaskProtocol? private var sendMessageBackgroundTask: BackgroundTaskProtocol?
@@ -227,7 +228,7 @@ class RoomProxy: RoomProxyProtocol {
sendMessageBackgroundTask?.stop() sendMessageBackgroundTask?.stop()
} }
return await Task.dispatch(on: userInitiatedDispatchQueue) { return await Task.dispatch(on: lowPriorityDispatchQueue) {
do { do {
try self.room.sendReadReceipt(eventId: eventID) try self.room.sendReadReceipt(eventId: eventID)
return .success(()) return .success(())
@@ -249,7 +250,7 @@ class RoomProxy: RoomProxyProtocol {
let transactionId = genTransactionId() let transactionId = genTransactionId()
return await Task.dispatch(on: userInitiatedDispatchQueue) { return await Task.dispatch(on: messageSendingDispatchQueue) {
self.room.send(msg: messageContent, txnId: transactionId) self.room.send(msg: messageContent, txnId: transactionId)
return .success(()) return .success(())
} }
@@ -263,7 +264,7 @@ class RoomProxy: RoomProxyProtocol {
let transactionId = genTransactionId() let transactionId = genTransactionId()
return await Task.dispatch(on: userInitiatedDispatchQueue) { return await Task.dispatch(on: messageSendingDispatchQueue) {
do { do {
if let eventID { if let eventID {
try self.room.sendReply(msg: message, inReplyToEventId: eventID, txnId: transactionId) try self.room.sendReply(msg: message, inReplyToEventId: eventID, txnId: transactionId)
@@ -404,7 +405,7 @@ class RoomProxy: RoomProxyProtocol {
let transactionId = genTransactionId() let transactionId = genTransactionId()
return await Task.dispatch(on: userInitiatedDispatchQueue) { return await Task.dispatch(on: messageSendingDispatchQueue) {
.success(self.room.sendLocation(body: body, .success(self.room.sendLocation(body: body,
geoUri: geoURI.string, geoUri: geoURI.string,
description: description, description: description,
@@ -420,7 +421,7 @@ class RoomProxy: RoomProxyProtocol {
sendMessageBackgroundTask?.stop() sendMessageBackgroundTask?.stop()
} }
return await Task.dispatch(on: userInitiatedDispatchQueue) { return await Task.dispatch(on: messageSendingDispatchQueue) {
self.room.retrySend(txnId: transactionID) self.room.retrySend(txnId: transactionID)
} }
} }
@@ -431,7 +432,7 @@ class RoomProxy: RoomProxyProtocol {
sendMessageBackgroundTask?.stop() sendMessageBackgroundTask?.stop()
} }
return await Task.dispatch(on: userInitiatedDispatchQueue) { return await Task.dispatch(on: messageSendingDispatchQueue) {
self.room.cancelSend(txnId: transactionID) self.room.cancelSend(txnId: transactionID)
} }
} }
@@ -444,7 +445,7 @@ class RoomProxy: RoomProxyProtocol {
let transactionId = genTransactionId() let transactionId = genTransactionId()
return await Task.dispatch(on: userInitiatedDispatchQueue) { return await Task.dispatch(on: messageSendingDispatchQueue) {
do { do {
try self.room.edit(newMsg: newMessage, originalEventId: eventID, txnId: transactionId) try self.room.edit(newMsg: newMessage, originalEventId: eventID, txnId: transactionId)
return .success(()) return .success(())
@@ -508,7 +509,7 @@ class RoomProxy: RoomProxyProtocol {
sendMessageBackgroundTask?.stop() sendMessageBackgroundTask?.stop()
} }
return await Task.dispatch(on: userInitiatedDispatchQueue) { return await Task.dispatch(on: lowPriorityDispatchQueue) {
do { do {
let member = try self.room.member(userId: userID) let member = try self.room.member(userId: userID)
return .success(RoomMemberProxy(member: member, backgroundTaskService: self.backgroundTaskService)) return .success(RoomMemberProxy(member: member, backgroundTaskService: self.backgroundTaskService))