Skip to content

Commit 1127a48

Browse files
committed
chore(ffi): add RoomListItem::room_without_timeline that can return both an invited or a knocked room.
This deprecates `RoomListItem::invited_room`.
1 parent 08152bd commit 1127a48

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

bindings/matrix-sdk-ffi/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ mod platform;
1818
mod room;
1919
mod room_directory_search;
2020
mod room_info;
21+
22+
#[allow(deprecated)]
2123
mod room_list;
2224
mod room_member;
2325
mod room_preview;

bindings/matrix-sdk-ffi/src/room_list.rs

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ pub enum RoomListError {
5151
#[error("Event cache ran into an error: {error}")]
5252
EventCache { error: String },
5353
#[error("The requested room doesn't match the membership requirements {expected:?}, observed {actual:?}")]
54-
IncorrectRoomMembership { expected: Membership, actual: Membership },
54+
IncorrectRoomMembership { expected: Vec<Membership>, actual: Membership },
5555
}
5656

5757
impl From<matrix_sdk_ui::room_list_service::Error> for RoomListError {
@@ -584,16 +584,32 @@ impl RoomListItem {
584584
}
585585

586586
/// Builds a `Room` FFI from an invited room without initializing its
587-
/// internal timeline
587+
/// internal timeline.
588588
///
589-
/// An error will be returned if the room is a state different than invited
589+
/// An error will be returned if the room is a state different than invited.
590590
///
591591
/// ⚠️ Holding on to this room instance after it has been joined is not
592-
/// safe. Use `full_room` instead
592+
/// safe. Use `full_room` instead.
593+
#[deprecated(note = "Please use `room_without_timeline` instead.")]
593594
fn invited_room(&self) -> Result<Arc<Room>, RoomListError> {
594-
if !matches!(self.membership(), Membership::Invited) {
595+
self.room_without_timeline()
596+
}
597+
598+
/// Builds a `Room` FFI from a room without initializing its internal
599+
/// timeline.
600+
///
601+
/// An error will be returned if the room is a state other than invited
602+
/// or knocked, the 2 states that would match this use case.
603+
///
604+
/// ⚠️ Holding on to this room instance after it has been joined is not
605+
/// safe. Use `full_room` instead.
606+
fn room_without_timeline(&self) -> Result<Arc<Room>, RoomListError> {
607+
let membership = self.membership();
608+
if !matches!(membership, Membership::Invited)
609+
&& !matches!(self.membership(), Membership::Knocked)
610+
{
595611
return Err(RoomListError::IncorrectRoomMembership {
596-
expected: Membership::Invited,
612+
expected: vec![Membership::Invited, Membership::Knocked],
597613
actual: self.membership(),
598614
});
599615
}
@@ -608,7 +624,7 @@ impl RoomListItem {
608624
fn full_room(&self) -> Result<Arc<Room>, RoomListError> {
609625
if !matches!(self.membership(), Membership::Joined) {
610626
return Err(RoomListError::IncorrectRoomMembership {
611-
expected: Membership::Joined,
627+
expected: vec![Membership::Joined],
612628
actual: self.membership(),
613629
});
614630
}

0 commit comments

Comments
 (0)