diff --git a/crates/matrix-sdk-base/src/rooms/normal.rs b/crates/matrix-sdk-base/src/rooms/normal.rs index 587538f24..2bbd55d22 100644 --- a/crates/matrix-sdk-base/src/rooms/normal.rs +++ b/crates/matrix-sdk-base/src/rooms/normal.rs @@ -497,7 +497,7 @@ impl Room { { TimelineStreamBackward::new(event_ids.clone(), end_token, Some(stored_events)) } else { - TimelineStreamBackward::new(event_ids.clone(), Some(sync_token.clone().unwrap()), None) + TimelineStreamBackward::new(event_ids.clone(), Some(sync_token.clone().expect("Sync token exists")), None) }; backward_timeline_streams.push(backward_sender); diff --git a/crates/matrix-sdk-base/src/store/memory_store.rs b/crates/matrix-sdk-base/src/store/memory_store.rs index f045448b2..ee8939d80 100644 --- a/crates/matrix-sdk-base/src/store/memory_store.rs +++ b/crates/matrix-sdk-base/src/store/memory_store.rs @@ -351,7 +351,7 @@ impl MemoryStore { { let pos = data.event_id_to_position.get(&redaction.redacts).copied(); - if let Some(position) = pos{ + if let Some(position) = pos { if let Some(mut full_event) = data.events.get_mut(&position.clone()) { let inner_event = full_event.event.deserialize()?; if room_version.is_none() { @@ -371,7 +371,7 @@ impl MemoryStore { if let Some(event_id) = event.event_id() { data.event_id_to_position.insert(event_id, start_position); } - data.events.insert(start_position, event.to_owned()); + data.events.insert(start_position, event.clone()); } } else { for event in timeline.events.iter() { @@ -381,7 +381,7 @@ impl MemoryStore { if let Some(event_id) = event.event_id() { data.event_id_to_position.insert(event_id, end_position); } - data.events.insert(end_position, event.to_owned()); + data.events.insert(end_position, event.clone()); } } } @@ -576,22 +576,26 @@ impl MemoryStore { &self, room_id: &RoomId, ) -> Result>, Option)>> { - if let Some(data) = self.room_timeline.get(room_id) { - let events = data.events.clone(); - let stream = stream! { - for item in events.values() { - yield Ok(item.to_owned()); - } - }; - info!( - "Found previously stored timeline for {}, with end token {:?}", - room_id, data.end - ); - Ok(Some((Box::pin(stream), data.end.to_owned()))) + let (events, end_token) = if let Some(data) = self.room_timeline.get(room_id) { + (data.events.clone(), data.end.clone()) } else { info!("No timeline for {} was previously stored", room_id); - Ok(None) - } + return Ok(None); + }; + + let stream = stream! { + for (_, item) in events { + println!("yield {:#?}", item); + yield Ok(item); + } + }; + + info!( + "Found previously stored timeline for {}, with end token {:?}", + room_id, end_token + ); + + Ok(Some((Box::pin(stream), end_token))) } } diff --git a/crates/matrix-sdk/src/client.rs b/crates/matrix-sdk/src/client.rs index c548030ef..59d4ff8a3 100644 --- a/crates/matrix-sdk/src/client.rs +++ b/crates/matrix-sdk/src/client.rs @@ -3913,7 +3913,7 @@ pub(crate) mod test { let _ = client.sync_once(sync_settings).await.unwrap(); sync_3.assert(); - let expected_events = vec![ + let expected_forward_events = vec![ "$152037280074GZeOm:localhost", "$editevid:localhost", "$151957878228ssqrJ:localhost", @@ -3930,27 +3930,14 @@ pub(crate) mod test { use futures_util::StreamExt; let forward_events = - forward_stream.take(expected_events.len()).collect::>().await; + forward_stream.take(expected_forward_events.len()).collect::>().await; - assert!(forward_events.into_iter().zip(expected_events.iter()).all(|(a, b)| &a - .event_id() - .unwrap() - .as_str() - == b)); + for (r, e) in forward_events.into_iter().zip(expected_forward_events.iter()) { + assert_eq!(&r.event_id().unwrap().as_str(), e); + } - let expected_events = vec![ - "$152037280074GZeOm2:localhost", - "$editevid2:localhost", - "$151957878228ssqrJ2:localhost", - "$15275046980maRLj2:localhost", - "$15275047031IXQRi2:localhost", - "$098237280074GZeOm2:localhost", + let expected_backwards_events = vec![ "$152037280074GZeOm:localhost", - "$editevid:localhost", - "$151957878228ssqrJ:localhost", - "$15275046980maRLj:localhost", - "$15275047031IXQRi:localhost", - "$098237280074GZeOm:localhost", "$1444812213350496Caaaf:example.com", "$1444812213350496Cbbbf:example.com", "$1444812213350496Ccccf:example.com", @@ -3959,23 +3946,17 @@ pub(crate) mod test { "$1444812213350496Cccck:example.com", ]; - let join_handle = tokio::spawn(async move { - let backward_events = backward_stream - .take(expected_events.len()) - .collect::>>() - .await; + let backward_events = backward_stream + .take(expected_backwards_events.len()) + .collect::>>() + .await; - assert!(backward_events.into_iter().zip(expected_events.iter()).all(|(a, b)| &a - .unwrap() - .event_id() - .unwrap() - .as_str() - == b)); - }); - - join_handle.await.unwrap(); + for (r, e) in backward_events.into_iter().zip(expected_backwards_events.iter()) { + assert_eq!(&r.unwrap().event_id().unwrap().as_str(), e); + } mocked_messages.assert(); mocked_messages_2.assert(); + } }