1
0
mirror of https://github.com/matrix-org/matrix-js-sdk.git synced 2025-11-26 17:03:12 +03:00

handle relations in encrypted rooms

This commit is contained in:
Bruno Windels
2019-06-27 12:35:34 +02:00
parent f293da5b34
commit 44c7844a4b

View File

@@ -3980,7 +3980,9 @@ MatrixClient.prototype.getCanResetTimelineCallback = function() {
}; };
/** /**
* Returns relations for a given event * Returns relations for a given event. Handles encryption transparently,
* with the caveat that the amount of events returned might be 0, even though you get a nextBatch.
* When the returned promise resolves, all messages should have finished trying to decrypt.
* @param {string} roomId the room of the event * @param {string} roomId the room of the event
* @param {string} eventId the id of the event * @param {string} eventId the id of the event
* @param {string} relationType the rel_type of the relations requested * @param {string} relationType the rel_type of the relations requested
@@ -3991,14 +3993,25 @@ MatrixClient.prototype.getCanResetTimelineCallback = function() {
*/ */
MatrixClient.prototype.relations = MatrixClient.prototype.relations =
async function(roomId, eventId, relationType, eventType, opts = {}) { async function(roomId, eventId, relationType, eventType, opts = {}) {
const isEncrypted = this.isRoomEncrypted(roomId);
const fetchedEventType = isEncrypted ? "m.room.encrypted" : eventType;
const result = await this.fetchRelations( const result = await this.fetchRelations(
roomId, roomId,
eventId, eventId,
relationType, relationType,
eventType, fetchedEventType,
opts); opts);
let events = result.chunk.map(this.getEventMapper());
if (isEncrypted) {
await Promise.all(events.map(e => {
return new Promise(resolve => e.once("Event.decrypted", resolve));
}));
events = events.filter(e => e.getType() === eventType);
}
return { return {
events: result.chunk.map(this.getEventMapper()), events,
nextBatch: result.next_batch, nextBatch: result.next_batch,
}; };
}; };