From 3551a6ef7a29219b9b30f50a7e8c92b92debcdcf Mon Sep 17 00:00:00 2001 From: Benjamin Lee Date: Tue, 4 Jun 2024 00:43:05 -0700 Subject: [PATCH] fix dropped events in search The previous code would drop some events entirely if any events between `skip` and `skip + limit` were not visible to the user. This would cause the set of events skipped by the `skip(skip)` method to extend past `skip` in the raw result set, because `skip(skip)` was being called *after* filtering out invisible events. This bug will become much more severe with a full filtering implementation, because it will be more likely for events to be filtered out. Currently, it is only possible to trigger with rooms that have history visibility set to "invited" or "joined". --- src/api/client_server/search.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/client_server/search.rs b/src/api/client_server/search.rs index c9b9cd4e..761f89b7 100644 --- a/src/api/client_server/search.rs +++ b/src/api/client_server/search.rs @@ -93,6 +93,7 @@ pub(crate) async fn search_events_route( let results: Vec<_> = results .iter() + .skip(skip) .filter_map(|result| { services() .rooms @@ -126,7 +127,6 @@ pub(crate) async fn search_events_route( }) }) .filter_map(Result::ok) - .skip(skip) .take(limit) .collect();