From 58aec0d12651ac8eac0a853183eb0d2ea5a3377f Mon Sep 17 00:00:00 2001 From: Benjamin Kampmann Date: Mon, 9 Jan 2023 14:45:35 +0000 Subject: [PATCH] feat(uniffi): Add support to set list filters on sliding sync view builders (#1296) * feat(uniffi): Add support to set list filters on sliding sync view builders * fix: expose SlidingSyncRequestListFilters via proc-macros --- bindings/matrix-sdk-ffi/src/lib.rs | 5 ++- bindings/matrix-sdk-ffi/src/sliding_sync.rs | 50 ++++++++++++++++++++- 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/bindings/matrix-sdk-ffi/src/lib.rs b/bindings/matrix-sdk-ffi/src/lib.rs index 5b5a7aae0..13ebed836 100644 --- a/bindings/matrix-sdk-ffi/src/lib.rs +++ b/bindings/matrix-sdk-ffi/src/lib.rs @@ -85,8 +85,9 @@ mod uniffi_types { room::{Membership, MembershipState, Room, RoomMember}, session_verification::{SessionVerificationController, SessionVerificationEmoji}, sliding_sync::{ - RequiredState, RoomListEntry, SlidingSync, SlidingSyncBuilder, SlidingSyncRoom, - SlidingSyncView, SlidingSyncViewBuilder, StoppableSpawn, UnreadNotificationsCount, + RequiredState, RoomListEntry, SlidingSync, SlidingSyncBuilder, + SlidingSyncRequestListFilters, SlidingSyncRoom, SlidingSyncView, + SlidingSyncViewBuilder, StoppableSpawn, UnreadNotificationsCount, }, timeline::{ EmoteMessageContent, EncryptedMessage, EventTimelineItem, FileInfo, FileMessageContent, diff --git a/bindings/matrix-sdk-ffi/src/sliding_sync.rs b/bindings/matrix-sdk-ffi/src/sliding_sync.rs index d3de21848..b698e5b6b 100644 --- a/bindings/matrix-sdk-ffi/src/sliding_sync.rs +++ b/bindings/matrix-sdk-ffi/src/sliding_sync.rs @@ -13,7 +13,8 @@ use matrix_sdk::ruma::{ assign, IdParseError, OwnedRoomId, }; pub use matrix_sdk::{ - room::timeline::Timeline, Client as MatrixClient, LoopCtrl, RoomListEntry as MatrixRoomEntry, + room::timeline::Timeline, ruma::api::client::sync::sync_events::v4::SyncRequestListFilters, + Client as MatrixClient, LoopCtrl, RoomListEntry as MatrixRoomEntry, SlidingSyncBuilder as MatrixSlidingSyncBuilder, SlidingSyncMode, SlidingSyncState, }; use tokio::task::JoinHandle; @@ -285,6 +286,41 @@ pub struct SlidingSyncViewBuilder { inner: matrix_sdk::SlidingSyncViewBuilder, } +#[derive(uniffi::Record)] +pub struct SlidingSyncRequestListFilters { + pub is_dm: Option, + pub spaces: Vec, + pub is_encrypted: Option, + pub is_invite: Option, + pub is_tombstoned: Option, + pub room_types: Vec, + pub not_room_types: Vec, + pub room_name_like: Option, + pub tags: Vec, + pub not_tags: Vec, + // pub extensions: BTreeMap, +} + +impl From for SyncRequestListFilters { + fn from(value: SlidingSyncRequestListFilters) -> Self { + let SlidingSyncRequestListFilters { + is_dm, + spaces, + is_encrypted, + is_invite, + is_tombstoned, + room_types, + not_room_types, + room_name_like, + tags, + not_tags, + } = value; + assign!(SyncRequestListFilters::default(), { + is_dm, spaces, is_encrypted, is_invite, is_tombstoned, room_types, not_room_types, room_name_like, tags, not_tags, + }) + } +} + impl SlidingSyncViewBuilder { pub fn new() -> Self { Default::default() @@ -324,6 +360,18 @@ impl SlidingSyncViewBuilder { Arc::new(builder) } + pub fn filters(self: Arc, filters: SlidingSyncRequestListFilters) -> Arc { + let mut builder = unwrap_or_clone_arc(self); + builder.inner = builder.inner.filters(Some(filters.into())); + Arc::new(builder) + } + + pub fn no_filters(self: Arc) -> Arc { + let mut builder = unwrap_or_clone_arc(self); + builder.inner = builder.inner.filters(None); + Arc::new(builder) + } + pub fn batch_size(self: Arc, batch_size: u32) -> Arc { let mut builder = unwrap_or_clone_arc(self); builder.inner = builder.inner.batch_size(batch_size);