You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-11-29 16:43:09 +03:00
Prevent messages from being sent if other messages have failed to send
Fixes https://github.com/vector-im/riot-web/issues/5408
This commit is contained in:
@@ -1186,6 +1186,13 @@ MatrixClient.prototype.sendEvent = function(roomId, eventType, content, txnId,
|
|||||||
room.addPendingEvent(localEvent, txnId);
|
room.addPendingEvent(localEvent, txnId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// addPendingEvent can change the state to NOT_SENT if it believes
|
||||||
|
// that there's other events that have failed. We won't bother to
|
||||||
|
// try sending the event if the state has changed as such.
|
||||||
|
if (localEvent.status === EventStatus.NOT_SENT) {
|
||||||
|
return Promise.reject(new Error("Event blocked by other events not yet sent"));
|
||||||
|
}
|
||||||
|
|
||||||
return _sendEvent(this, room, localEvent, callback);
|
return _sendEvent(this, room, localEvent, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -999,6 +999,10 @@ Room.prototype.addPendingEvent = function(event, txnId) {
|
|||||||
this._txnToEvent[txnId] = event;
|
this._txnToEvent[txnId] = event;
|
||||||
|
|
||||||
if (this._opts.pendingEventOrdering == "detached") {
|
if (this._opts.pendingEventOrdering == "detached") {
|
||||||
|
if (this._pendingEventList.some(e => e.status === EventStatus.NOT_SENT)) {
|
||||||
|
console.warn("Setting new event's status as " + EventStatus.NOT_SENT + " due to other similar messages");
|
||||||
|
event.status = EventStatus.NOT_SENT;
|
||||||
|
}
|
||||||
this._pendingEventList.push(event);
|
this._pendingEventList.push(event);
|
||||||
} else {
|
} else {
|
||||||
for (let i = 0; i < this._timelineSets.length; i++) {
|
for (let i = 0; i < this._timelineSets.length; i++) {
|
||||||
|
|||||||
Reference in New Issue
Block a user