From 578b446ea4a4f2f4758b1c9512e6d95b19fc8c60 Mon Sep 17 00:00:00 2001 From: Ivan Enderlin Date: Wed, 25 Jan 2023 11:00:03 +0100 Subject: [PATCH 1/3] chore(sdk): Rename a variable to clarify its content. --- crates/matrix-sdk/src/room/timeline/inner.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/matrix-sdk/src/room/timeline/inner.rs b/crates/matrix-sdk/src/room/timeline/inner.rs index 887104424..26c0ed59c 100644 --- a/crates/matrix-sdk/src/room/timeline/inner.rs +++ b/crates/matrix-sdk/src/room/timeline/inner.rs @@ -184,7 +184,7 @@ impl TimelineInner

{ } pub(super) async fn handle_fully_read(&self, raw: Raw) { - let fully_read_event = match raw.deserialize() { + let fully_read_event_id = match raw.deserialize() { Ok(ev) => ev.content.event_id, Err(error) => { error!(?error, "Failed to deserialize `m.fully_read` account data"); @@ -192,7 +192,7 @@ impl TimelineInner

{ } }; - self.set_fully_read_event(fully_read_event).await; + self.set_fully_read_event(fully_read_event_id).await; } pub(super) async fn set_fully_read_event(&self, fully_read_event_id: OwnedEventId) { From 832bba8a2b1583a10f89b9d63905c861bb3b5a67 Mon Sep 17 00:00:00 2001 From: Ivan Enderlin Date: Thu, 26 Jan 2023 09:46:47 +0100 Subject: [PATCH 2/3] test(sdk): Improve `m.fully_read` test coverage and documentation. --- crates/matrix-sdk/src/room/timeline/event_handler.rs | 1 + crates/matrix-sdk/src/room/timeline/inner.rs | 3 +++ crates/matrix-sdk/src/room/timeline/tests.rs | 8 ++++++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/crates/matrix-sdk/src/room/timeline/event_handler.rs b/crates/matrix-sdk/src/room/timeline/event_handler.rs index a19c62dcd..cfeefae28 100644 --- a/crates/matrix-sdk/src/room/timeline/event_handler.rs +++ b/crates/matrix-sdk/src/room/timeline/event_handler.rs @@ -646,6 +646,7 @@ pub(crate) fn update_read_marker( let Some(fully_read_event) = fully_read_event else { return }; let read_marker_idx = find_read_marker(items_lock); let fully_read_event_idx = find_event_by_id(items_lock, fully_read_event).map(|(idx, _)| idx); + match (read_marker_idx, fully_read_event_idx) { (None, None) => {} (None, Some(idx)) => { diff --git a/crates/matrix-sdk/src/room/timeline/inner.rs b/crates/matrix-sdk/src/room/timeline/inner.rs index 26c0ed59c..d43e913fb 100644 --- a/crates/matrix-sdk/src/room/timeline/inner.rs +++ b/crates/matrix-sdk/src/room/timeline/inner.rs @@ -45,6 +45,8 @@ pub(super) struct TimelineInnerMetadata { // Reaction event / txn ID => sender and reaction data pub(super) reaction_map: HashMap, pub(super) fully_read_event: Option, + /// Whether the event that the fully-ready event _refers to_ is part of the + /// timeline. pub(super) fully_read_event_in_timeline: bool, } @@ -198,6 +200,7 @@ impl TimelineInner

{ pub(super) async fn set_fully_read_event(&self, fully_read_event_id: OwnedEventId) { let mut metadata_lock = self.metadata.lock().await; + // A similar event has been handled already. We can ignore it. if metadata_lock.fully_read_event.as_ref().map_or(false, |id| *id == fully_read_event_id) { return; } diff --git a/crates/matrix-sdk/src/room/timeline/tests.rs b/crates/matrix-sdk/src/room/timeline/tests.rs index bc7db07ee..2d506eff8 100644 --- a/crates/matrix-sdk/src/room/timeline/tests.rs +++ b/crates/matrix-sdk/src/room/timeline/tests.rs @@ -273,11 +273,15 @@ async fn update_read_marker() { timeline.inner.set_fully_read_event(event_id.clone()).await; assert_matches!(stream.next().await, Some(VecDiff::Move { old_index: 2, new_index: 3 })); + // Nothing should happen if the fully read event is set back to the same event + // as before. + timeline.inner.set_fully_read_event(event_id.clone()).await; + // Nothing should happen if the fully read event isn't found. timeline.inner.set_fully_read_event(event_id!("$fake_event_id").to_owned()).await; - // Nothing should happen if the fully read event is set back to the same event - // as before. + // Nothing should happen if the fully read event is refering to an old event + // that has already been marked as fully read. timeline.inner.set_fully_read_event(event_id).await; timeline.handle_live_message_event(&ALICE, RoomMessageEventContent::text_plain("C")).await; From 77b7451f59d86928ad134417024b00e55cc8a8f3 Mon Sep 17 00:00:00 2001 From: Ivan Enderlin Date: Thu, 26 Jan 2023 10:06:11 +0100 Subject: [PATCH 3/3] doc(sdk): Fix a typo. --- crates/matrix-sdk/src/room/timeline/tests.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/matrix-sdk/src/room/timeline/tests.rs b/crates/matrix-sdk/src/room/timeline/tests.rs index 2d506eff8..406e7b98e 100644 --- a/crates/matrix-sdk/src/room/timeline/tests.rs +++ b/crates/matrix-sdk/src/room/timeline/tests.rs @@ -280,7 +280,7 @@ async fn update_read_marker() { // Nothing should happen if the fully read event isn't found. timeline.inner.set_fully_read_event(event_id!("$fake_event_id").to_owned()).await; - // Nothing should happen if the fully read event is refering to an old event + // Nothing should happen if the fully read event is referring to an old event // that has already been marked as fully read. timeline.inner.set_fully_read_event(event_id).await;