Skip to content

Commit 41281c1

Browse files
committed
refactor: Adapt to removal of fallback in edits and replies
Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr>
1 parent 7dc13ff commit 41281c1

File tree

3 files changed

+54
-277
lines changed

3 files changed

+54
-277
lines changed

crates/matrix-sdk-crypto/src/machine/tests/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1442,8 +1442,8 @@ async fn test_unsigned_decryption() {
14421442

14431443
// Encrypt a second message, an edit.
14441444
let second_message_text = "This is the ~~original~~ edited message";
1445-
let second_message_content = RoomMessageEventContent::text_plain(second_message_text)
1446-
.make_replacement(first_message, None);
1445+
let second_message_content =
1446+
RoomMessageEventContent::text_plain(second_message_text).make_replacement(first_message);
14471447
let second_message_encrypted_content =
14481448
alice.encrypt_room_event(room_id, second_message_content).await.unwrap();
14491449

crates/matrix-sdk/src/room/edit.rs

Lines changed: 21 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,16 @@ use ruma::{
2121
UnstablePollStartEventContent,
2222
},
2323
room::message::{
24-
FormattedBody, MessageType, Relation, ReplacementMetadata, RoomMessageEventContent,
24+
FormattedBody, MessageType, ReplacementMetadata, RoomMessageEventContent,
2525
RoomMessageEventContentWithoutRelation,
2626
},
27-
AnyMessageLikeEvent, AnyMessageLikeEventContent, AnySyncMessageLikeEvent,
28-
AnySyncTimelineEvent, AnyTimelineEvent, Mentions, MessageLikeEvent,
29-
OriginalMessageLikeEvent, SyncMessageLikeEvent,
27+
AnyMessageLikeEventContent, AnySyncMessageLikeEvent, AnySyncTimelineEvent, Mentions,
28+
SyncMessageLikeEvent,
3029
},
31-
EventId, RoomId, UserId,
30+
EventId, UserId,
3231
};
3332
use thiserror::Error;
34-
use tracing::{instrument, warn};
33+
use tracing::instrument;
3534

3635
use super::EventSource;
3736
use crate::Room;
@@ -122,13 +121,12 @@ impl Room {
122121
event_id: &EventId,
123122
new_content: EditedContent,
124123
) -> Result<AnyMessageLikeEventContent, EditError> {
125-
make_edit_event(self, self.room_id(), self.own_user_id(), event_id, new_content).await
124+
make_edit_event(self, self.own_user_id(), event_id, new_content).await
126125
}
127126
}
128127

129128
async fn make_edit_event<S: EventSource>(
130129
source: S,
131-
room_id: &RoomId,
132130
own_user_id: &UserId,
133131
event_id: &EventId,
134132
new_content: EditedContent,
@@ -159,14 +157,10 @@ async fn make_edit_event<S: EventSource>(
159157
});
160158
};
161159

162-
let mentions = original.content.mentions.clone();
163-
let replied_to_original_room_msg =
164-
extract_replied_to(source, room_id, original.content.relates_to).await;
160+
let mentions = original.content.mentions;
165161

166-
let replacement = new_content.make_replacement(
167-
ReplacementMetadata::new(event_id.to_owned(), mentions),
168-
replied_to_original_room_msg.as_ref(),
169-
);
162+
let replacement = new_content
163+
.make_replacement(ReplacementMetadata::new(event_id.to_owned(), mentions));
170164

171165
Ok(replacement.into())
172166
}
@@ -183,8 +177,6 @@ async fn make_edit_event<S: EventSource>(
183177
};
184178

185179
let original_mentions = original.content.mentions.clone();
186-
let replied_to_original_room_msg =
187-
extract_replied_to(source, room_id, original.content.relates_to.clone()).await;
188180

189181
let mut prev_content = original.content;
190182

@@ -195,10 +187,8 @@ async fn make_edit_event<S: EventSource>(
195187
});
196188
}
197189

198-
let replacement = prev_content.make_replacement(
199-
ReplacementMetadata::new(event_id.to_owned(), original_mentions),
200-
replied_to_original_room_msg.as_ref(),
201-
);
190+
let replacement = prev_content
191+
.make_replacement(ReplacementMetadata::new(event_id.to_owned(), original_mentions));
202192

203193
Ok(replacement.into())
204194
}
@@ -292,45 +282,6 @@ pub(crate) fn update_media_caption(
292282
}
293283
}
294284

295-
/// Try to find the original replied-to event content, in a best-effort manner.
296-
async fn extract_replied_to<S: EventSource>(
297-
source: S,
298-
room_id: &RoomId,
299-
relates_to: Option<Relation<RoomMessageEventContentWithoutRelation>>,
300-
) -> Option<OriginalMessageLikeEvent<RoomMessageEventContent>> {
301-
let replied_to_sync_timeline_event = if let Some(Relation::Reply { in_reply_to }) = relates_to {
302-
source
303-
.get_event(&in_reply_to.event_id)
304-
.await
305-
.map_err(|err| {
306-
warn!("couldn't fetch the replied-to event, when editing: {err}");
307-
err
308-
})
309-
.ok()
310-
} else {
311-
None
312-
};
313-
314-
replied_to_sync_timeline_event
315-
.and_then(|sync_timeline_event| {
316-
sync_timeline_event
317-
.raw()
318-
.deserialize()
319-
.map_err(|err| warn!("unable to deserialize replied-to event: {err}"))
320-
.ok()
321-
})
322-
.and_then(|event| {
323-
if let AnyTimelineEvent::MessageLike(AnyMessageLikeEvent::RoomMessage(
324-
MessageLikeEvent::Original(original),
325-
)) = event.into_full_event(room_id.to_owned())
326-
{
327-
Some(original)
328-
} else {
329-
None
330-
}
331-
})
332-
}
333-
334285
#[cfg(test)]
335286
mod tests {
336287
use std::collections::BTreeMap;
@@ -344,7 +295,7 @@ mod tests {
344295
room::message::{MessageType, Relation, RoomMessageEventContentWithoutRelation},
345296
AnyMessageLikeEventContent, AnySyncTimelineEvent, Mentions,
346297
},
347-
owned_mxc_uri, owned_user_id, room_id, user_id, EventId, OwnedEventId,
298+
owned_mxc_uri, owned_user_id, user_id, EventId, OwnedEventId,
348299
};
349300

350301
use super::{make_edit_event, EditError, EventSource};
@@ -373,18 +324,11 @@ mod tests {
373324
f.room_name("The room name").event_id(event_id).sender(own_user_id).into(),
374325
);
375326

376-
let room_id = room_id!("!galette:saucisse.bzh");
377327
let new_content = RoomMessageEventContentWithoutRelation::text_plain("the edit");
378328

379329
assert_matches!(
380-
make_edit_event(
381-
cache,
382-
room_id,
383-
own_user_id,
384-
event_id,
385-
EditedContent::RoomMessage(new_content),
386-
)
387-
.await,
330+
make_edit_event(cache, own_user_id, event_id, EditedContent::RoomMessage(new_content),)
331+
.await,
388332
Err(EditError::StateEvent)
389333
);
390334
}
@@ -401,19 +345,12 @@ mod tests {
401345
f.text_msg("hi").event_id(event_id).sender(user_id!("@other:saucisse.bzh")).into(),
402346
);
403347

404-
let room_id = room_id!("!galette:saucisse.bzh");
405348
let own_user_id = user_id!("@me:saucisse.bzh");
406349
let new_content = RoomMessageEventContentWithoutRelation::text_plain("the edit");
407350

408351
assert_matches!(
409-
make_edit_event(
410-
cache,
411-
room_id,
412-
own_user_id,
413-
event_id,
414-
EditedContent::RoomMessage(new_content),
415-
)
416-
.await,
352+
make_edit_event(cache, own_user_id, event_id, EditedContent::RoomMessage(new_content),)
353+
.await,
417354
Err(EditError::NotAuthor)
418355
);
419356
}
@@ -430,18 +367,12 @@ mod tests {
430367
f.text_msg("hi").event_id(event_id).sender(own_user_id).into(),
431368
);
432369

433-
let room_id = room_id!("!galette:saucisse.bzh");
434370
let new_content = RoomMessageEventContentWithoutRelation::text_plain("the edit");
435371

436-
let edit_event = make_edit_event(
437-
cache,
438-
room_id,
439-
own_user_id,
440-
event_id,
441-
EditedContent::RoomMessage(new_content),
442-
)
443-
.await
444-
.unwrap();
372+
let edit_event =
373+
make_edit_event(cache, own_user_id, event_id, EditedContent::RoomMessage(new_content))
374+
.await
375+
.unwrap();
445376

446377
assert_let!(AnyMessageLikeEventContent::RoomMessage(msg) = &edit_event);
447378
// This is the fallback text, for clients not supporting edits.
@@ -464,11 +395,8 @@ mod tests {
464395
f.text_msg("hello world").event_id(event_id).sender(own_user_id).into(),
465396
);
466397

467-
let room_id = room_id!("!galette:saucisse.bzh");
468-
469398
let err = make_edit_event(
470399
cache,
471-
room_id,
472400
own_user_id,
473401
event_id,
474402
EditedContent::MediaCaption {
@@ -502,11 +430,8 @@ mod tests {
502430
.into(),
503431
);
504432

505-
let room_id = room_id!("!galette:saucisse.bzh");
506-
507433
let edit_event = make_edit_event(
508434
cache,
509-
room_id,
510435
own_user_id,
511436
event_id,
512437
EditedContent::MediaCaption {
@@ -564,11 +489,8 @@ mod tests {
564489

565490
cache.events.insert(event_id.to_owned(), event);
566491

567-
let room_id = room_id!("!galette:saucisse.bzh");
568-
569492
let edit_event = make_edit_event(
570493
cache,
571-
room_id,
572494
own_user_id,
573495
event_id,
574496
// Remove the caption by setting it to None.
@@ -620,15 +542,12 @@ mod tests {
620542

621543
cache.events.insert(event_id.to_owned(), event);
622544

623-
let room_id = room_id!("!galette:saucisse.bzh");
624-
625545
// Add an intentional mention in the caption.
626546
let mentioned_user_id = owned_user_id!("@crepe:saucisse.bzh");
627547
let edit_event = {
628548
let mentions = Mentions::with_user_ids([mentioned_user_id.clone()]);
629549
make_edit_event(
630550
cache,
631-
room_id,
632551
own_user_id,
633552
event_id,
634553
EditedContent::MediaCaption {
@@ -689,12 +608,10 @@ mod tests {
689608
.into(),
690609
);
691610

692-
let room_id = room_id!("!galette:saucisse.bzh");
693611
let new_content = RoomMessageEventContentWithoutRelation::text_plain("uh i mean hi too");
694612

695613
let edit_event = make_edit_event(
696614
cache,
697-
room_id,
698615
own_user_id,
699616
resp_event_id,
700617
EditedContent::RoomMessage(new_content),
@@ -704,12 +621,7 @@ mod tests {
704621

705622
assert_let!(AnyMessageLikeEventContent::RoomMessage(msg) = &edit_event);
706623
// This is the fallback text, for clients not supporting edits.
707-
assert_eq!(
708-
msg.body(),
709-
r#"> <@steb:saucisse.bzh> hi
710-
711-
* uh i mean hi too"#
712-
);
624+
assert_eq!(msg.body(), "* uh i mean hi too");
713625
assert_let!(Some(Relation::Replacement(repl)) = &msg.relates_to);
714626

715627
assert_eq!(repl.event_id, resp_event_id);

0 commit comments

Comments
 (0)