diff --git a/changelog.d/wake-local-member-sync.bugfix.md b/changelog.d/wake-local-member-sync.bugfix.md new file mode 100644 index 000000000..69ba5ebee --- /dev/null +++ b/changelog.d/wake-local-member-sync.bugfix.md @@ -0,0 +1 @@ +Fixed local invites and invite acceptances not being reflected in sync promptly. Contributed by @eleboucher diff --git a/src/service/rooms/timeline/append.rs b/src/service/rooms/timeline/append.rs index c1959c94d..377781160 100644 --- a/src/service/rooms/timeline/append.rs +++ b/src/service/rooms/timeline/append.rs @@ -132,6 +132,18 @@ impl super::Service { self.services.sync.wake_all_joined(&room_id).await; + if *pdu.kind() == TimelineEventType::RoomMember { + if let Some(target_user) = pdu + .state_key + .as_ref() + .and_then(|state_key| UserId::parse(state_key.as_str()).ok()) + { + if self.services.globals.user_is_local(&target_user) { + self.services.sync.wake(&target_user).await; + } + } + } + Ok(Some(pdu_id)) } diff --git a/src/service/rooms/timeline/build.rs b/src/service/rooms/timeline/build.rs index 1c0ee0f94..fcc984cab 100644 --- a/src/service/rooms/timeline/build.rs +++ b/src/service/rooms/timeline/build.rs @@ -155,6 +155,18 @@ impl super::Service { self.services.sync.wake_all_joined(&room_id).await; + if *pdu.kind() == TimelineEventType::RoomMember { + if let Some(target_user) = pdu + .state_key + .as_ref() + .and_then(|state_key| UserId::parse(state_key.as_str()).ok()) + { + if self.services.globals.user_is_local(&target_user) { + self.services.sync.wake(&target_user).await; + } + } + } + let mut servers: HashSet = self .services .state_cache