@@ -39,18 +39,18 @@ use ruma::{
39
39
events:: {
40
40
poll:: unstable_start:: { NewUnstablePollStartEventContent , UnstablePollStartEventContent } ,
41
41
receipt:: { Receipt , ReceiptThread } ,
42
+ relation:: Thread ,
42
43
room:: {
43
44
message:: {
44
- AddMentions , ForwardThread , OriginalRoomMessageEvent ,
45
- RoomMessageEventContentWithoutRelation ,
45
+ AddMentions , ForwardThread , ReplyMetadata , RoomMessageEventContentWithoutRelation ,
46
46
} ,
47
47
pinned_events:: RoomPinnedEventsEventContent ,
48
48
} ,
49
49
AnyMessageLikeEventContent , AnySyncMessageLikeEvent , AnySyncTimelineEvent ,
50
50
SyncMessageLikeEvent ,
51
51
} ,
52
52
serde:: Raw ,
53
- EventId , MilliSecondsSinceUnixEpoch , OwnedEventId , OwnedUserId , RoomVersionId , UserId ,
53
+ EventId , OwnedEventId , OwnedUserId , RoomVersionId , UserId ,
54
54
} ;
55
55
use thiserror:: Error ;
56
56
use tracing:: { error, instrument, trace, warn} ;
@@ -104,8 +104,6 @@ pub struct RepliedToInfo {
104
104
event_id : OwnedEventId ,
105
105
/// The sender of the event to reply to.
106
106
sender : OwnedUserId ,
107
- /// The timestamp of the event to reply to.
108
- timestamp : MilliSecondsSinceUnixEpoch ,
109
107
/// The content of the event to reply to.
110
108
content : ReplyContent ,
111
109
}
@@ -343,7 +341,8 @@ impl Timeline {
343
341
replied_to_info : RepliedToInfo ,
344
342
forward_thread : ForwardThread ,
345
343
) -> Result < ( ) , RoomSendQueueError > {
346
- let event_id = replied_to_info. event_id ;
344
+ let event_id = & replied_to_info. event_id ;
345
+ let sender = & replied_to_info. sender ;
347
346
348
347
// [The specification](https://spec.matrix.org/v1.10/client-server-api/#user-and-room-mentions) says:
349
348
//
@@ -352,32 +351,21 @@ impl Timeline {
352
351
//
353
352
// If the replied to event has been written by the current user, let's toggle to
354
353
// `AddMentions::No`.
355
- let mention_the_sender = if self . room ( ) . own_user_id ( ) == replied_to_info. sender {
356
- AddMentions :: No
357
- } else {
358
- AddMentions :: Yes
354
+ let mention_the_sender =
355
+ if self . room ( ) . own_user_id ( ) == sender { AddMentions :: No } else { AddMentions :: Yes } ;
356
+
357
+ let thread = match replied_to_info. content {
358
+ ReplyContent :: Message ( message) => message
359
+ . thread_root ( )
360
+ . map ( |thread_root| Thread :: plain ( thread_root. clone ( ) , event_id. clone ( ) ) ) ,
361
+ ReplyContent :: Raw ( _raw_event) => None ,
359
362
} ;
360
363
361
- let content = match replied_to_info. content {
362
- ReplyContent :: Message ( msg) => {
363
- let event = OriginalRoomMessageEvent {
364
- event_id : event_id. to_owned ( ) ,
365
- sender : replied_to_info. sender ,
366
- origin_server_ts : replied_to_info. timestamp ,
367
- room_id : self . room ( ) . room_id ( ) . to_owned ( ) ,
368
- content : msg. to_content ( ) ,
369
- unsigned : Default :: default ( ) ,
370
- } ;
371
- content. make_reply_to ( & event, forward_thread, mention_the_sender)
372
- }
373
- ReplyContent :: Raw ( raw_event) => content. make_reply_to_raw (
374
- & raw_event,
375
- event_id. to_owned ( ) ,
376
- self . room ( ) . room_id ( ) ,
377
- forward_thread,
378
- mention_the_sender,
379
- ) ,
380
- } ;
364
+ let content = content. make_reply_to (
365
+ ReplyMetadata :: new ( event_id, sender, thread. as_ref ( ) ) ,
366
+ forward_thread,
367
+ mention_the_sender,
368
+ ) ;
381
369
382
370
self . send ( content. into ( ) ) . await ?;
383
371
@@ -425,7 +413,6 @@ impl Timeline {
425
413
Ok ( RepliedToInfo {
426
414
event_id : event_id. to_owned ( ) ,
427
415
sender : sync_event. sender ( ) . to_owned ( ) ,
428
- timestamp : sync_event. origin_server_ts ( ) ,
429
416
content : reply_content,
430
417
} )
431
418
}
0 commit comments