Skip to content

Commit b29e1e9

Browse files
authoredMay 26, 2023
Adjust fetchEditsWhereNeeded to use a clearer filter and async function (matrix-org#3411)
* Make a clear and explicit filter on which events are considered for fetchEventsWhereNeeded * Convert the logic in fetchEventsWhereNeeded to an async function
1 parent 7ade461 commit b29e1e9

File tree

1 file changed

+29
-19
lines changed

1 file changed

+29
-19
lines changed
 

‎src/models/thread.ts

+29-19
Original file line numberDiff line numberDiff line change
@@ -519,26 +519,26 @@ export class Thread extends ReadReceipt<EmittedEvents, EventHandlerMap> {
519519
const recursionSupport = this.client.canSupport.get(Feature.RelationsRecursion) ?? ServerSupport.Unsupported;
520520
if (recursionSupport === ServerSupport.Unsupported) {
521521
return Promise.all(
522-
events
523-
.filter((e) => e.isEncrypted())
524-
.map((event: MatrixEvent) => {
525-
// The only type of relation that gets edits is a thread message.
526-
if (event.getThread() === undefined && event.isRelation()) return;
527-
return this.client
528-
.relations(this.roomId, event.getId()!, RelationType.Replace, event.getType(), {
522+
events.filter(isAnEncryptedThreadMessage).map(async (event: MatrixEvent) => {
523+
try {
524+
const relations = await this.client.relations(
525+
this.roomId,
526+
event.getId()!,
527+
RelationType.Replace,
528+
event.getType(),
529+
{
529530
limit: 1,
530-
})
531-
.then((relations) => {
532-
if (relations.events.length) {
533-
const editEvent = relations.events[0];
534-
event.makeReplaced(editEvent);
535-
this.insertEventIntoTimeline(editEvent);
536-
}
537-
})
538-
.catch((e) => {
539-
logger.error("Failed to load edits for encrypted thread event", e);
540-
});
541-
}),
531+
},
532+
);
533+
if (relations.events.length) {
534+
const editEvent = relations.events[0];
535+
event.makeReplaced(editEvent);
536+
this.insertEventIntoTimeline(editEvent);
537+
}
538+
} catch (e) {
539+
logger.error("Failed to load edits for encrypted thread event", e);
540+
}
541+
}),
542542
);
543543
}
544544
}
@@ -708,6 +708,16 @@ export class Thread extends ReadReceipt<EmittedEvents, EventHandlerMap> {
708708
}
709709
}
710710

711+
/**
712+
* Decide whether an event deserves to have its potential edits fetched.
713+
*
714+
* @returns true if this event is encrypted and is a message that is part of a
715+
* thread - either inside it, or a root.
716+
*/
717+
function isAnEncryptedThreadMessage(event: MatrixEvent): boolean {
718+
return event.isEncrypted() && (event.isRelation(THREAD_RELATION_TYPE.name) || event.isThreadRoot);
719+
}
720+
711721
export const FILTER_RELATED_BY_SENDERS = new ServerControlledNamespacedValue(
712722
"related_by_senders",
713723
"io.element.relation_senders",

0 commit comments

Comments
 (0)
Please sign in to comment.