diff --git a/crates/matrix-sdk-ui/src/timeline/event_handler.rs b/crates/matrix-sdk-ui/src/timeline/event_handler.rs
index 585c51a95..fa92e4982 100644
--- a/crates/matrix-sdk-ui/src/timeline/event_handler.rs
+++ b/crates/matrix-sdk-ui/src/timeline/event_handler.rs
@@ -877,7 +877,7 @@ impl<'a, 'o> TimelineEventHandler<'a, 'o> {
trace!("Adding new remote timeline item at the start");
let item = self.meta.new_timeline_item(item);
- self.items.insert(0, item);
+ self.items.push_front(item);
}
Flow::Remote {
@@ -968,9 +968,6 @@ impl<'a, 'o> TimelineEventHandler<'a, 'o> {
// pending local echo, or at the start if there is no such item.
let insert_idx = latest_event_idx.map_or(0, |idx| idx + 1);
- // Keep push semantics, if we're inserting at the end.
- let should_push = insert_idx == self.items.len();
-
let id = match removed_event_item_id {
// If a previous version of the same item (usually a local
// echo) was removed and we now need to add it again, reuse
@@ -981,8 +978,12 @@ impl<'a, 'o> TimelineEventHandler<'a, 'o> {
trace!("Adding new remote timeline item after all non-pending events");
let new_item = TimelineItem::new(item, id);
- if should_push {
+
+ // Keep push semantics, if we're inserting at the end or at the front.
+ if insert_idx == self.items.len() {
self.items.push_back(new_item);
+ } else if insert_idx == 0 {
+ self.items.push_front(new_item);
} else {
self.items.insert(insert_idx, new_item);
}
@@ -1112,10 +1113,19 @@ impl<'a, 'o> TimelineEventHandler<'a, 'o> {
match op {
Operation::Insert(i, ts) => {
assert!(i >= max_i);
- self.items.insert(
- i + offset,
- self.meta.new_timeline_item(VirtualTimelineItem::DayDivider(ts)),
- );
+
+ // Keep push semantics, if we're inserting at the front or the back.
+ let insert_at = i + offset;
+ let item = self.meta.new_timeline_item(VirtualTimelineItem::DayDivider(ts));
+
+ if insert_at == 0 {
+ self.items.push_front(item);
+ } else if insert_at == self.items.len() {
+ self.items.push_back(item);
+ } else {
+ self.items.insert(insert_at, item);
+ }
+
offset = (offset + 1).min(self.items.len());
max_i = i;
}
diff --git a/crates/matrix-sdk-ui/src/timeline/tests/basic.rs b/crates/matrix-sdk-ui/src/timeline/tests/basic.rs
index d74ece34c..471475a90 100644
--- a/crates/matrix-sdk-ui/src/timeline/tests/basic.rs
+++ b/crates/matrix-sdk-ui/src/timeline/tests/basic.rs
@@ -65,7 +65,7 @@ async fn test_initial_events() {
let item = assert_next_matches!(stream, VectorDiff::PushBack { value } => value);
assert_eq!(item.as_event().unwrap().sender(), *ALICE);
- let item = assert_next_matches!(stream, VectorDiff::Insert { index: 0 , value } => value);
+ let item = assert_next_matches!(stream, VectorDiff::PushFront { value } => value);
assert_matches!(&item.kind, TimelineItemKind::Virtual(VirtualTimelineItem::DayDivider(_)));
let item = assert_next_matches!(stream, VectorDiff::PushBack { value } => value);
@@ -184,7 +184,7 @@ async fn test_other_state() {
assert_eq!(content.name, "Alice's room");
assert_matches!(prev_content, None);
- let day_divider = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value);
+ let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value);
assert!(day_divider.is_day_divider());
timeline.handle_live_redacted_state_event(&ALICE, RedactedRoomTopicEventContent::new()).await;
@@ -313,7 +313,7 @@ async fn test_sanitized() {
"
);
- let day_divider = assert_next_matches!(stream, VectorDiff::Insert {index: 0, value } => value);
+ let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value);
assert!(day_divider.is_day_divider());
}
@@ -335,7 +335,7 @@ async fn test_reply() {
let first_event_id = first_event.event_id().unwrap();
let first_event_sender = *ALICE;
- let day_divider = assert_next_matches!(stream, VectorDiff::Insert {index: 0, value } => value);
+ let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value);
assert!(day_divider.is_day_divider());
let reply_formatted_body = format!("\
@@ -390,7 +390,7 @@ async fn test_thread() {
let first_event = item.as_event().unwrap();
let first_event_id = first_event.event_id().unwrap();
- let day_divider = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value);
+ let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value);
assert!(day_divider.is_day_divider());
let reply = assign!(RoomMessageEventContent::text_plain("I'm replying in a thread"), {
diff --git a/crates/matrix-sdk-ui/src/timeline/tests/echo.rs b/crates/matrix-sdk-ui/src/timeline/tests/echo.rs
index e54e536fb..6622b7c4f 100644
--- a/crates/matrix-sdk-ui/src/timeline/tests/echo.rs
+++ b/crates/matrix-sdk-ui/src/timeline/tests/echo.rs
@@ -51,9 +51,7 @@ async fn test_remote_echo_full_trip() {
{
// The day divider comes in late.
- let (index, day_divider) =
- assert_next_matches!(stream, VectorDiff::Insert {index, value } => (index, value));
- assert_eq!(index, 0);
+ let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value);
assert!(day_divider.is_day_divider());
}
@@ -134,19 +132,17 @@ async fn test_remote_echo_new_position() {
let txn_id_from_event = item.as_event().unwrap();
assert_eq!(txn_id, txn_id_from_event.transaction_id().unwrap());
- let day_divider = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value);
+ let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value);
assert!(day_divider.is_day_divider());
// … and another event that comes back before the remote echo
timeline.handle_live_message_event(&BOB, RoomMessageEventContent::text_plain("test")).await;
// … and is inserted before the local echo item
- let bob_message = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value);
+ let bob_message = assert_next_matches!(stream, VectorDiff::PushFront { value } => value);
assert!(bob_message.is_remote_event());
- let (day_divider_index, day_divider) =
- assert_next_matches!(stream, VectorDiff::Insert {index, value } => (index, value));
- assert_eq!(day_divider_index, 0);
+ let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value);
assert!(day_divider.is_day_divider());
// When the remote echo comes in…
diff --git a/crates/matrix-sdk-ui/src/timeline/tests/edit.rs b/crates/matrix-sdk-ui/src/timeline/tests/edit.rs
index ad8f1433b..8c3dfde30 100644
--- a/crates/matrix-sdk-ui/src/timeline/tests/edit.rs
+++ b/crates/matrix-sdk-ui/src/timeline/tests/edit.rs
@@ -52,7 +52,7 @@ async fn test_live_redacted() {
assert_eq!(timeline.inner.items().await.len(), 2);
- let day_divider = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value);
+ let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value);
assert!(day_divider.is_day_divider());
}
@@ -78,7 +78,7 @@ async fn test_live_sanitized() {
assert_eq!(text.body, "**original** message");
assert_eq!(text.formatted.as_ref().unwrap().body, "original message");
- let day_divider = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value);
+ let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value);
assert!(day_divider.is_day_divider());
let first_event_id = first_event.event_id().unwrap();
@@ -160,6 +160,6 @@ async fn test_aggregated_sanitized() {
assert_eq!(text.body, "!!edited!! **better** message");
assert_eq!(text.formatted.as_ref().unwrap().body, " better message");
- let day_divider = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value);
+ let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value);
assert!(day_divider.is_day_divider());
}
diff --git a/crates/matrix-sdk-ui/src/timeline/tests/encryption.rs b/crates/matrix-sdk-ui/src/timeline/tests/encryption.rs
index 12fdda843..1865b7f54 100644
--- a/crates/matrix-sdk-ui/src/timeline/tests/encryption.rs
+++ b/crates/matrix-sdk-ui/src/timeline/tests/encryption.rs
@@ -112,7 +112,7 @@ async fn test_retry_message_decryption() {
);
assert_eq!(session_id, SESSION_ID);
- let day_divider = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value);
+ let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value);
assert!(day_divider.is_day_divider());
{
@@ -427,7 +427,7 @@ async fn test_retry_message_decryption_highlighted() {
);
assert_eq!(session_id, SESSION_ID);
- let day_divider = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value);
+ let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value);
assert!(day_divider.is_day_divider());
let own_user_id = user_id!("@example:matrix.org");
diff --git a/crates/matrix-sdk-ui/src/timeline/tests/event_filter.rs b/crates/matrix-sdk-ui/src/timeline/tests/event_filter.rs
index cd9a0b092..2b105b913 100644
--- a/crates/matrix-sdk-ui/src/timeline/tests/event_filter.rs
+++ b/crates/matrix-sdk-ui/src/timeline/tests/event_filter.rs
@@ -52,8 +52,7 @@ async fn test_default_filter() {
.handle_live_message_event(&ALICE, RoomMessageEventContent::text_plain("The first message"))
.await;
let item = assert_next_matches!(stream, VectorDiff::PushBack { value } => value);
- let _day_divider =
- assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value);
+ let _day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value);
let first_event_id = item.as_event().unwrap().event_id().unwrap();
let edit = assign!(RoomMessageEventContent::text_plain(" * The _edited_ first message"), {
@@ -150,8 +149,7 @@ async fn test_custom_filter() {
.handle_live_message_event(&ALICE, RoomMessageEventContent::text_plain("The first message"))
.await;
let _item = assert_next_matches!(stream, VectorDiff::PushBack { value } => value);
- let _day_divider =
- assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value);
+ let _day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value);
timeline
.handle_live_redacted_message_event(&ALICE, RedactedRoomMessageEventContent::new())
diff --git a/crates/matrix-sdk-ui/src/timeline/tests/reactions.rs b/crates/matrix-sdk-ui/src/timeline/tests/reactions.rs
index ece104756..ff6405abc 100644
--- a/crates/matrix-sdk-ui/src/timeline/tests/reactions.rs
+++ b/crates/matrix-sdk-ui/src/timeline/tests/reactions.rs
@@ -289,8 +289,8 @@ async fn send_first_message(
let event_id = item.as_event().unwrap().clone().event_id().unwrap().to_owned();
let position = timeline.len().await - 1;
- let _day_divider =
- assert_next_matches!(*stream, VectorDiff::Insert { index: 0, value } => value);
+ let day_divider = assert_next_matches!(*stream, VectorDiff::PushFront { value } => value);
+ assert!(day_divider.is_day_divider());
(event_id, position)
}
diff --git a/crates/matrix-sdk-ui/src/timeline/tests/read_receipts.rs b/crates/matrix-sdk-ui/src/timeline/tests/read_receipts.rs
index a2b53569f..d6db99cea 100644
--- a/crates/matrix-sdk-ui/src/timeline/tests/read_receipts.rs
+++ b/crates/matrix-sdk-ui/src/timeline/tests/read_receipts.rs
@@ -53,8 +53,7 @@ async fn test_read_receipts_updates_on_live_events() {
let event_a = item_a.as_event().unwrap();
assert!(event_a.read_receipts().is_empty());
- let _day_divider =
- assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value);
+ let _day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value);
// Implicit read receipt of Bob.
let item_b = assert_next_matches!(stream, VectorDiff::PushBack { value } => value);
@@ -155,8 +154,7 @@ async fn test_read_receipts_updates_on_filtered_events() {
let event_a = item_a.as_event().unwrap();
assert!(event_a.read_receipts().is_empty());
- let _day_divider =
- assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value);
+ let _day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value);
// Implicit read receipt of Bob.
let item_a = assert_next_matches!(stream, VectorDiff::Set { index: 1, value } => value);
@@ -247,8 +245,7 @@ async fn test_read_receipts_updates_on_filtered_events_with_stored() {
let event_a = item_a.as_event().unwrap();
assert!(event_a.read_receipts().is_empty());
- let _day_divider =
- assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value);
+ let _day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value);
// Stored read receipt of Bob.
let item_a = assert_next_matches!(stream, VectorDiff::Set { index: 1, value } => value);
@@ -306,11 +303,11 @@ async fn test_read_receipts_updates_on_back_paginated_filtered_events() {
.await;
// No read receipt for our own user.
- let item_a = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value);
+ let item_a = assert_next_matches!(stream, VectorDiff::PushFront { value } => value);
let event_a = item_a.as_event().unwrap();
assert!(event_a.read_receipts().is_empty());
- let day_divider = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value);
+ let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value);
assert!(day_divider.is_day_divider());
// Add non-filtered event to show read receipts.
@@ -324,14 +321,14 @@ async fn test_read_receipts_updates_on_back_paginated_filtered_events() {
.await;
// Implicit read receipt of Carol.
- let item_c = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value);
+ let item_c = assert_next_matches!(stream, VectorDiff::PushFront { value } => value);
let event_c = item_c.as_event().unwrap();
assert_eq!(event_c.read_receipts().len(), 2);
assert!(event_c.read_receipts().get(*BOB).is_some());
assert!(event_c.read_receipts().get(*CAROL).is_some());
// Reinsert a new day divider before the first back-paginated event.
- let day_divider = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value);
+ let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value);
assert!(day_divider.is_day_divider());
// Remove the last day divider.
@@ -429,8 +426,7 @@ async fn test_read_receipts_updates_on_message_decryption() {
assert_eq!(clear_event.read_receipts().len(), 1);
assert!(clear_event.read_receipts().get(*CAROL).is_some());
- let _day_divider =
- assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value);
+ let _day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value);
// The second event is encrypted and only has Bob's receipt.
let encrypted_item = assert_next_matches!(stream, VectorDiff::PushBack { value } => value);
diff --git a/crates/matrix-sdk-ui/src/timeline/tests/virt.rs b/crates/matrix-sdk-ui/src/timeline/tests/virt.rs
index 3101823f0..8c45591da 100644
--- a/crates/matrix-sdk-ui/src/timeline/tests/virt.rs
+++ b/crates/matrix-sdk-ui/src/timeline/tests/virt.rs
@@ -41,7 +41,7 @@ async fn test_day_divider() {
let item = assert_next_matches!(stream, VectorDiff::PushBack { value } => value);
item.as_event().unwrap();
- let day_divider = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value);
+ let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value);
assert_let!(VirtualTimelineItem::DayDivider(ts) = day_divider.as_virtual().unwrap());
let date = Local.timestamp_millis_opt(ts.0.into()).single().unwrap();
assert_eq!(date.year(), 1970);
@@ -103,7 +103,7 @@ async fn test_update_read_marker() {
let item = assert_next_matches!(stream, VectorDiff::PushBack { value } => value);
let first_event_id = item.as_event().unwrap().event_id().unwrap().to_owned();
- let day_divider = assert_next_matches!(stream, VectorDiff::Insert { index: 0, value } => value);
+ let day_divider = assert_next_matches!(stream, VectorDiff::PushFront { value } => value);
assert!(day_divider.is_day_divider());
timeline.inner.set_fully_read_event(first_event_id.clone()).await;
diff --git a/crates/matrix-sdk-ui/tests/integration/timeline/echo.rs b/crates/matrix-sdk-ui/tests/integration/timeline/echo.rs
index f6e8a7b1f..c157bd2d6 100644
--- a/crates/matrix-sdk-ui/tests/integration/timeline/echo.rs
+++ b/crates/matrix-sdk-ui/tests/integration/timeline/echo.rs
@@ -79,9 +79,7 @@ async fn test_echo() {
assert_matches!(item.send_state(), Some(EventSendState::NotSentYet));
let txn_id = item.transaction_id().unwrap();
- assert_let!(
- Some(VectorDiff::Insert { index: 0, value: day_divider }) = timeline_stream.next().await
- );
+ assert_let!(Some(VectorDiff::PushFront { value: day_divider }) = timeline_stream.next().await);
assert!(day_divider.is_day_divider());
assert_let!(TimelineItemContent::Message(msg) = item.content());
@@ -225,7 +223,7 @@ async fn test_dedup_by_event_id_late() {
assert_matches!(item.send_state(), Some(EventSendState::NotSentYet));
let day_divider =
- assert_next_matches!( timeline_stream, VectorDiff::Insert { index: 0, value } => value);
+ assert_next_matches!( timeline_stream, VectorDiff::PushFront { value } => value);
assert!(day_divider.is_day_divider());
ev_builder.add_joined_room(JoinedRoomBuilder::new(room_id).add_timeline_event(
@@ -246,12 +244,12 @@ async fn test_dedup_by_event_id_late() {
let _response = client.sync_once(sync_settings.clone()).await.unwrap();
let remote_echo =
- assert_next_matches!(timeline_stream, VectorDiff::Insert { index: 0, value } => value);
+ assert_next_matches!(timeline_stream, VectorDiff::PushFront { value } => value);
let item = remote_echo.as_event().unwrap();
assert_eq!(item.event_id(), Some(event_id));
let day_divider =
- assert_next_matches!(timeline_stream, VectorDiff::Insert { index: 0, value } => value);
+ assert_next_matches!(timeline_stream, VectorDiff::PushFront { value } => value);
assert!(day_divider.is_day_divider());
// Local echo and its day divider are removed.
diff --git a/crates/matrix-sdk-ui/tests/integration/timeline/edit.rs b/crates/matrix-sdk-ui/tests/integration/timeline/edit.rs
index c80bd160e..fd5b572d7 100644
--- a/crates/matrix-sdk-ui/tests/integration/timeline/edit.rs
+++ b/crates/matrix-sdk-ui/tests/integration/timeline/edit.rs
@@ -87,9 +87,7 @@ async fn test_edit() {
assert_matches!(msg.in_reply_to(), None);
assert!(!msg.is_edited());
- assert_let!(
- Some(VectorDiff::Insert { index: 0, value: day_divider }) = timeline_stream.next().await
- );
+ assert_let!(Some(VectorDiff::PushFront { value: day_divider }) = timeline_stream.next().await);
assert!(day_divider.is_day_divider());
ev_builder.add_joined_room(
diff --git a/crates/matrix-sdk-ui/tests/integration/timeline/mod.rs b/crates/matrix-sdk-ui/tests/integration/timeline/mod.rs
index 26177ccc8..b5ce2c585 100644
--- a/crates/matrix-sdk-ui/tests/integration/timeline/mod.rs
+++ b/crates/matrix-sdk-ui/tests/integration/timeline/mod.rs
@@ -94,9 +94,7 @@ async fn test_reaction() {
assert_eq!(event_item.read_receipts().len(), 1);
// The day divider.
- assert_let!(
- Some(VectorDiff::Insert { index: 0, value: day_divider }) = timeline_stream.next().await
- );
+ assert_let!(Some(VectorDiff::PushFront { value: day_divider }) = timeline_stream.next().await);
assert!(day_divider.is_day_divider());
// The new message is getting the reaction, which implies an implicit read
@@ -203,9 +201,7 @@ async fn test_redacted_message() {
assert_let!(Some(VectorDiff::PushBack { value: first }) = timeline_stream.next().await);
assert_matches!(first.as_event().unwrap().content(), TimelineItemContent::RedactedMessage);
- assert_let!(
- Some(VectorDiff::Insert { index: 0, value: day_divider }) = timeline_stream.next().await
- );
+ assert_let!(Some(VectorDiff::PushFront { value: day_divider }) = timeline_stream.next().await);
assert!(day_divider.is_day_divider());
// TODO: After adding raw timeline items, check for one here
@@ -248,9 +244,7 @@ async fn test_read_marker() {
assert_let!(Some(VectorDiff::PushBack { value: message }) = timeline_stream.next().await);
assert_matches!(message.as_event().unwrap().content(), TimelineItemContent::Message(_));
- assert_let!(
- Some(VectorDiff::Insert { index: 0, value: day_divider }) = timeline_stream.next().await
- );
+ assert_let!(Some(VectorDiff::PushFront { value: day_divider }) = timeline_stream.next().await);
assert!(day_divider.is_day_divider());
ev_builder.add_joined_room(
@@ -334,9 +328,7 @@ async fn test_sync_highlighted() {
// Own events don't trigger push rules.
assert!(!remote_event.is_highlighted());
- assert_let!(
- Some(VectorDiff::Insert { index: 0, value: day_divider }) = timeline_stream.next().await
- );
+ assert_let!(Some(VectorDiff::PushFront { value: day_divider }) = timeline_stream.next().await);
assert!(day_divider.is_day_divider());
ev_builder.add_joined_room(JoinedRoomBuilder::new(room_id).add_timeline_event(
diff --git a/crates/matrix-sdk-ui/tests/integration/timeline/pagination.rs b/crates/matrix-sdk-ui/tests/integration/timeline/pagination.rs
index 65e1f01e1..89d2c015f 100644
--- a/crates/matrix-sdk-ui/tests/integration/timeline/pagination.rs
+++ b/crates/matrix-sdk-ui/tests/integration/timeline/pagination.rs
@@ -81,7 +81,7 @@ async fn test_back_pagination() {
let message = assert_next_matches!(
timeline_stream,
- VectorDiff::Insert { index: 0, value } => value
+ VectorDiff::PushFront { value } => value
);
assert_let!(TimelineItemContent::Message(msg) = message.as_event().unwrap().content());
assert_let!(MessageType::Text(text) = msg.msgtype());
@@ -89,13 +89,13 @@ async fn test_back_pagination() {
let day_divider = assert_next_matches!(
timeline_stream,
- VectorDiff::Insert { index: 0, value } => value
+ VectorDiff::PushFront { value } => value
);
assert!(day_divider.is_day_divider());
let message = assert_next_matches!(
timeline_stream,
- VectorDiff::Insert { index: 0, value } => value
+ VectorDiff::PushFront { value } => value
);
assert_let!(TimelineItemContent::Message(msg) = message.as_event().unwrap().content());
assert_let!(MessageType::Text(text) = msg.msgtype());
@@ -104,14 +104,14 @@ async fn test_back_pagination() {
// The day divider is replaced.
let day_divider = assert_next_matches!(
timeline_stream,
- VectorDiff::Insert { index: 0, value } => value
+ VectorDiff::PushFront { value } => value
);
assert!(day_divider.is_day_divider());
assert_next_matches!(timeline_stream, VectorDiff::Remove { index: 2 });
let message = assert_next_matches!(
timeline_stream,
- VectorDiff::Insert { index: 0, value } => value
+ VectorDiff::PushFront { value } => value
);
assert_let!(TimelineItemContent::OtherState(state) = message.as_event().unwrap().content());
assert_eq!(state.state_key(), "");
@@ -208,7 +208,7 @@ async fn test_back_pagination_highlighted() {
let first = assert_next_matches!(
timeline_stream,
- VectorDiff::Insert { index: 0, value } => value
+ VectorDiff::PushFront { value } => value
);
let remote_event = first.as_event().unwrap();
// Own events don't trigger push rules.
@@ -216,13 +216,13 @@ async fn test_back_pagination_highlighted() {
let day_divider = assert_next_matches!(
timeline_stream,
- VectorDiff::Insert { index: 0, value } => value
+ VectorDiff::PushFront { value } => value
);
assert!(day_divider.is_day_divider());
let second = assert_next_matches!(
timeline_stream,
- VectorDiff::Insert { index: 0, value } => value
+ VectorDiff::PushFront { value } => value
);
let remote_event = second.as_event().unwrap();
// `m.room.tombstone` should be highlighted by default.
@@ -230,7 +230,7 @@ async fn test_back_pagination_highlighted() {
let day_divider = assert_next_matches!(
timeline_stream,
- VectorDiff::Insert { index: 0, value } => value
+ VectorDiff::PushFront { value } => value
);
assert!(day_divider.is_day_divider());
@@ -589,7 +589,7 @@ async fn test_empty_chunk() {
let message = assert_next_matches!(
timeline_stream,
- VectorDiff::Insert { index: 0, value } => value
+ VectorDiff::PushFront { value } => value
);
assert_let!(TimelineItemContent::Message(msg) = message.as_event().unwrap().content());
assert_let!(MessageType::Text(text) = msg.msgtype());
@@ -597,13 +597,13 @@ async fn test_empty_chunk() {
let day_divider = assert_next_matches!(
timeline_stream,
- VectorDiff::Insert { index: 0, value } => value
+ VectorDiff::PushFront { value } => value
);
assert!(day_divider.is_day_divider());
let message = assert_next_matches!(
timeline_stream,
- VectorDiff::Insert { index: 0, value } => value
+ VectorDiff::PushFront { value } => value
);
assert_let!(TimelineItemContent::Message(msg) = message.as_event().unwrap().content());
assert_let!(MessageType::Text(text) = msg.msgtype());
@@ -611,14 +611,14 @@ async fn test_empty_chunk() {
let day_divider = assert_next_matches!(
timeline_stream,
- VectorDiff::Insert { index: 0, value } => value
+ VectorDiff::PushFront { value } => value
);
assert!(day_divider.is_day_divider());
assert_next_matches!(timeline_stream, VectorDiff::Remove { index: 2 });
let message = assert_next_matches!(
timeline_stream,
- VectorDiff::Insert { index: 0, value } => value
+ VectorDiff::PushFront { value } => value
);
assert_let!(TimelineItemContent::OtherState(state) = message.as_event().unwrap().content());
assert_eq!(state.state_key(), "");
@@ -695,7 +695,7 @@ async fn test_until_num_items_with_empty_chunk() {
let message = assert_next_matches!(
timeline_stream,
- VectorDiff::Insert { index:0, value } => value
+ VectorDiff::PushFront { value } => value
);
assert_let!(TimelineItemContent::Message(msg) = message.as_event().unwrap().content());
assert_let!(MessageType::Text(text) = msg.msgtype());
@@ -703,13 +703,13 @@ async fn test_until_num_items_with_empty_chunk() {
let day_divider = assert_next_matches!(
timeline_stream,
- VectorDiff::Insert { index: 0, value } => value
+ VectorDiff::PushFront { value } => value
);
assert!(day_divider.is_day_divider());
let message = assert_next_matches!(
timeline_stream,
- VectorDiff::Insert { index: 0, value } => value
+ VectorDiff::PushFront { value } => value
);
assert_let!(TimelineItemContent::Message(msg) = message.as_event().unwrap().content());
assert_let!(MessageType::Text(text) = msg.msgtype());
@@ -717,14 +717,14 @@ async fn test_until_num_items_with_empty_chunk() {
let day_divider = assert_next_matches!(
timeline_stream,
- VectorDiff::Insert { index: 0, value } => value
+ VectorDiff::PushFront { value } => value
);
assert!(day_divider.is_day_divider());
assert_next_matches!(timeline_stream, VectorDiff::Remove { index: 2 });
let message = assert_next_matches!(
timeline_stream,
- VectorDiff::Insert { index: 0, value } => value
+ VectorDiff::PushFront { value } => value
);
assert_let!(TimelineItemContent::OtherState(state) = message.as_event().unwrap().content());
assert_eq!(state.state_key(), "");
@@ -739,14 +739,14 @@ async fn test_until_num_items_with_empty_chunk() {
let day_divider = assert_next_matches!(
timeline_stream,
- VectorDiff::Insert { index: 0, value } => value
+ VectorDiff::PushFront { value } => value
);
assert!(day_divider.is_day_divider());
assert_next_matches!(timeline_stream, VectorDiff::Remove { index: 2 });
let message = assert_next_matches!(
timeline_stream,
- VectorDiff::Insert { index: 0, value } => value
+ VectorDiff::PushFront { value } => value
);
assert_let!(TimelineItemContent::Message(msg) = message.as_event().unwrap().content());
assert_let!(MessageType::Text(text) = msg.msgtype());
diff --git a/crates/matrix-sdk-ui/tests/integration/timeline/read_receipts.rs b/crates/matrix-sdk-ui/tests/integration/timeline/read_receipts.rs
index 9b5f370f5..dd98ba8cc 100644
--- a/crates/matrix-sdk-ui/tests/integration/timeline/read_receipts.rs
+++ b/crates/matrix-sdk-ui/tests/integration/timeline/read_receipts.rs
@@ -132,9 +132,7 @@ async fn test_read_receipts_updates() {
let first_event = first_item.as_event().unwrap();
assert!(first_event.read_receipts().is_empty());
- assert_let!(
- Some(VectorDiff::Insert { index: 0, value: day_divider }) = timeline_stream.next().await
- );
+ assert_let!(Some(VectorDiff::PushFront { value: day_divider }) = timeline_stream.next().await);
assert!(day_divider.is_day_divider());
let (own_receipt_event_id, _) = timeline.latest_user_read_receipt(own_user_id).await.unwrap();
@@ -369,9 +367,7 @@ async fn test_read_receipts_updates_on_filtered_events() {
let event_a = item_a.as_event().unwrap();
assert!(event_a.read_receipts().is_empty());
- assert_let!(
- Some(VectorDiff::Insert { index: 0, value: day_divider }) = timeline_stream.next().await
- );
+ assert_let!(Some(VectorDiff::PushFront { value: day_divider }) = timeline_stream.next().await);
assert!(day_divider.is_day_divider());
let (own_receipt_event_id, _) = timeline.latest_user_read_receipt(own_user_id).await.unwrap();
diff --git a/crates/matrix-sdk-ui/tests/integration/timeline/replies.rs b/crates/matrix-sdk-ui/tests/integration/timeline/replies.rs
index 7f24bca71..c657c0459 100644
--- a/crates/matrix-sdk-ui/tests/integration/timeline/replies.rs
+++ b/crates/matrix-sdk-ui/tests/integration/timeline/replies.rs
@@ -83,9 +83,7 @@ async fn test_in_reply_to_details() {
assert_let!(Some(VectorDiff::PushBack { value: first }) = timeline_stream.next().await);
assert_matches!(first.as_event().unwrap().content(), TimelineItemContent::Message(_));
- assert_let!(
- Some(VectorDiff::Insert { index: 0, value: day_divider }) = timeline_stream.next().await
- );
+ assert_let!(Some(VectorDiff::PushFront { value: day_divider }) = timeline_stream.next().await);
assert!(day_divider.is_day_divider());
assert_let!(Some(VectorDiff::PushBack { value: second }) = timeline_stream.next().await);
diff --git a/crates/matrix-sdk-ui/tests/integration/timeline/sliding_sync.rs b/crates/matrix-sdk-ui/tests/integration/timeline/sliding_sync.rs
index 6d5c19d81..8ef3bc75d 100644
--- a/crates/matrix-sdk-ui/tests/integration/timeline/sliding_sync.rs
+++ b/crates/matrix-sdk-ui/tests/integration/timeline/sliding_sync.rs
@@ -120,8 +120,8 @@ macro_rules! assert_timeline_stream {
)
};
- // `insert [$nth] --- day divider ---`
- ( @_ [ $stream:ident ] [ insert [$index:literal] --- day divider --- ; $( $rest:tt )* ] [ $( $accumulator:tt )* ] ) => {
+ // `prepend --- day divider ---`
+ ( @_ [ $stream:ident ] [ prepend --- day divider --- ; $( $rest:tt )* ] [ $( $accumulator:tt )* ] ) => {
assert_timeline_stream!(
@_
[ $stream ]
@@ -131,7 +131,7 @@ macro_rules! assert_timeline_stream {
{
assert_matches!(
$stream.next().now_or_never(),
- Some(Some(VectorDiff::Insert { index: $index, value })) => {
+ Some(Some(VectorDiff::PushFront { value })) => {
assert_matches!(
&**value,
TimelineItemKind::Virtual(VirtualTimelineItem::DayDivider(_)) => {}
@@ -341,7 +341,7 @@ async fn test_timeline_basic() -> Result<()> {
assert_timeline_stream! {
[timeline_stream]
append "$x1:bar.org";
- insert[0] --- day divider ---;
+ prepend --- day divider ---;
update[1] "$x1:bar.org";
append "$x2:bar.org";
};
@@ -387,7 +387,7 @@ async fn test_timeline_duplicated_events() -> Result<()> {
assert_timeline_stream! {
[timeline_stream]
append "$x1:bar.org";
- insert[0] --- day divider ---;
+ prepend --- day divider ---;
update[1] "$x1:bar.org";
append "$x2:bar.org";
update[2] "$x2:bar.org";
@@ -465,7 +465,7 @@ async fn test_timeline_read_receipts_are_updated_live() -> Result<()> {
assert_timeline_stream! {
[timeline_stream]
append "$x1:bar.org";
- insert[0] --- day divider ---;
+ prepend --- day divider ---;
update[1] "$x1:bar.org";
append "$x2:bar.org";
};
diff --git a/crates/matrix-sdk-ui/tests/integration/timeline/subscribe.rs b/crates/matrix-sdk-ui/tests/integration/timeline/subscribe.rs
index 18f996992..2bf937998 100644
--- a/crates/matrix-sdk-ui/tests/integration/timeline/subscribe.rs
+++ b/crates/matrix-sdk-ui/tests/integration/timeline/subscribe.rs
@@ -129,9 +129,7 @@ async fn test_event_filter() {
assert_matches!(msg.msgtype(), MessageType::Text(_));
assert!(!msg.is_edited());
- assert_let!(
- Some(VectorDiff::Insert { index: 0, value: day_divider }) = timeline_stream.next().await
- );
+ assert_let!(Some(VectorDiff::PushFront { value: day_divider }) = timeline_stream.next().await);
assert!(day_divider.is_day_divider());
let second_event_id = event_id!("$Ga6Y2l0gKY");
@@ -260,7 +258,7 @@ async fn test_timeline_is_reset_when_a_user_is_ignored_or_unignored() {
assert_next_matches!(timeline_stream, VectorDiff::PushBack { value } => {
assert_eq!(value.as_event().unwrap().event_id(), Some(first_event_id));
});
- assert_next_matches!(timeline_stream, VectorDiff::Insert { index: 0, value } => {
+ assert_next_matches!(timeline_stream, VectorDiff::PushFront { value } => {
assert!(value.is_day_divider());
});
assert_next_matches!(timeline_stream, VectorDiff::PushBack { value } => {
@@ -326,7 +324,7 @@ async fn test_timeline_is_reset_when_a_user_is_ignored_or_unignored() {
assert_next_matches!(timeline_stream, VectorDiff::PushBack { value } => {
assert_eq!(value.as_event().unwrap().event_id(), Some(fourth_event_id));
});
- assert_next_matches!(timeline_stream, VectorDiff::Insert { index: 0, value } => {
+ assert_next_matches!(timeline_stream, VectorDiff::PushFront { value } => {
assert!(value.is_day_divider());
});
assert_next_matches!(timeline_stream, VectorDiff::Set { index: 1, value } => {
@@ -396,7 +394,7 @@ async fn test_profile_updates() {
assert_eq!(event_1_item.event_id(), Some(event_1_id));
assert_matches!(event_1_item.sender_profile(), TimelineDetails::Unavailable);
- assert_next_matches!(timeline_stream, VectorDiff::Insert { index: 0, value } => {
+ assert_next_matches!(timeline_stream, VectorDiff::PushFront { value } => {
assert!(value.is_day_divider());
});