1
0
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:
Travis Ralston
2018-11-08 16:46:03 -07:00
parent eafba9c7ef
commit c9a79bf32e
2 changed files with 11 additions and 0 deletions

View File

@@ -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);
}; };

View File

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