Calculate what event we send a read receipt for after the delay so we send a receipt for the one the user actually settles on.

This commit is contained in:
David Baker 2016-01-08 22:19:51 +00:00
parent 1c4d1d2507
commit 7b2d56f619

View file

@ -867,27 +867,20 @@ module.exports = React.createClass({
sendReadReceipt: function() {
if (!this.state.room) return;
if (this.sendRRTimer) clearTimeout(this.sendRRTimer);
var self = this;
this.sendRRTimer = setTimeout(function() {
self.sendRRTimer = undefined;
var currentReadUpToEventId = self.state.room.getEventReadUpTo(MatrixClientPeg.get().credentials.userId);
var currentReadUpToEventIndex = self._indexForEventId(currentReadUpToEventId);
var currentReadUpToEventId = this.state.room.getEventReadUpTo(MatrixClientPeg.get().credentials.userId);
var currentReadUpToEventIndex = this._indexForEventId(currentReadUpToEventId);
var lastReadEventIndex = self._getLastDisplayedEventIndexIgnoringOwn();
if (lastReadEventIndex === null) return;
var lastReadEventIndex = this._getLastDisplayedEventIndexIgnoringOwn();
if (lastReadEventIndex === null) return;
if (lastReadEventIndex > currentReadUpToEventIndex) {
var self = this;
var lastReadEventId = self.state.room.timeline[lastReadEventIndex].getId();
if (this.pendingRR != lastReadEventId) {
this.pendingRR = lastReadEventId;
if (this.sendRRTimer) clearTimeout(this.sendRRTimer);
this.sendRRTimer = setTimeout(function() {
MatrixClientPeg.get().sendReadReceipt(self.state.room.timeline[lastReadEventIndex]);
self.sendRRTimer = undefined;
self.pendingRR = undefined;
}, SEND_READ_RECEIPT_DELAY);
if (lastReadEventIndex > currentReadUpToEventIndex) {
MatrixClientPeg.get().sendReadReceipt(self.state.room.timeline[lastReadEventIndex]);
}
}
}, SEND_READ_RECEIPT_DELAY);
},
_getLastDisplayedEventIndexIgnoringOwn: function() {