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
This commit is contained in:
Benjamin Kampmann
2023-01-09 14:45:35 +00:00
committed by GitHub
parent 63c8696cac
commit 58aec0d126
2 changed files with 52 additions and 3 deletions
+3 -2
View File
@@ -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,
+49 -1
View File
@@ -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<bool>,
pub spaces: Vec<String>,
pub is_encrypted: Option<bool>,
pub is_invite: Option<bool>,
pub is_tombstoned: Option<bool>,
pub room_types: Vec<String>,
pub not_room_types: Vec<String>,
pub room_name_like: Option<String>,
pub tags: Vec<String>,
pub not_tags: Vec<String>,
// pub extensions: BTreeMap<String, Value>,
}
impl From<SlidingSyncRequestListFilters> 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<Self>, filters: SlidingSyncRequestListFilters) -> Arc<Self> {
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<Self>) -> Arc<Self> {
let mut builder = unwrap_or_clone_arc(self);
builder.inner = builder.inner.filters(None);
Arc::new(builder)
}
pub fn batch_size(self: Arc<Self>, batch_size: u32) -> Arc<Self> {
let mut builder = unwrap_or_clone_arc(self);
builder.inner = builder.inner.batch_size(batch_size);