@@ -519,26 +519,26 @@ export class Thread extends ReadReceipt<EmittedEvents, EventHandlerMap> {
519
519
const recursionSupport = this . client . canSupport . get ( Feature . RelationsRecursion ) ?? ServerSupport . Unsupported ;
520
520
if ( recursionSupport === ServerSupport . Unsupported ) {
521
521
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
+ {
529
530
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
+ } ) ,
542
542
) ;
543
543
}
544
544
}
@@ -708,6 +708,16 @@ export class Thread extends ReadReceipt<EmittedEvents, EventHandlerMap> {
708
708
}
709
709
}
710
710
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
+
711
721
export const FILTER_RELATED_BY_SENDERS = new ServerControlledNamespacedValue (
712
722
"related_by_senders" ,
713
723
"io.element.relation_senders" ,
0 commit comments