diff --git a/lib/client.js b/lib/client.js index f5d6a74a0..ae98f0482 100644 --- a/lib/client.js +++ b/lib/client.js @@ -1369,9 +1369,15 @@ MatrixClient.prototype.sendReceipt = function(event, receiptType, callback) { $receiptType: receiptType, $eventId: event.getId() }); - return this._http.authedRequestWithPrefix( + var promise = this._http.authedRequestWithPrefix( callback, "POST", path, undefined, {}, httpApi.PREFIX_V2_ALPHA ); + + var room = this.getRoom(event.getRoomId()); + if (room) { + room._addLocalEchoReceipt(this.credentials.userId, event, receiptType); + } + return promise; }; /** diff --git a/lib/models/room.js b/lib/models/room.js index 04b5599f8..29b2e8ae9 100644 --- a/lib/models/room.js +++ b/lib/models/room.js @@ -620,6 +620,17 @@ Room.prototype.addReceipt = function(event) { this.emit("Room.receipt", event, this); }; +/** + * Add a temporary local-echo receipt to the room to reflect in the + * client the fact that we've sent one. + * @param {string} user_id The user ID if the receipt sender + * @param {MatrixEvent} e The event that is to be acknowledged + * @param {string} receipt_type The type of receipt + */ +Room.prototype._addLocalEchoReceipt = function(user_id, e, receipt_type) { + this.addReceipt(synthesizeReceipt(user_id, e, receipt_type)); +}; + /** * Update the room-tag event for the room. The previous one is overwritten. * @param {MatrixEvent} event the m.tag event