Skip to content

Commit 5b54749

Browse files
committed
refactor: Adapt to the changes of the room summary and directory endpoints
Signed-off-by: Kévin Commaille <zecakeh@tedomum.fr>
1 parent 302b0b5 commit 5b54749

File tree

6 files changed

+60
-60
lines changed

6 files changed

+60
-60
lines changed

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

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,21 @@ use crate::{error::ClientError, runtime::get_runtime_handle, task_handle::TaskHa
2828
pub enum PublicRoomJoinRule {
2929
Public,
3030
Knock,
31+
Restricted,
32+
KnockRestricted,
33+
Invite,
3134
}
3235

33-
impl TryFrom<ruma::directory::PublicRoomJoinRule> for PublicRoomJoinRule {
36+
impl TryFrom<ruma::room::JoinRuleKind> for PublicRoomJoinRule {
3437
type Error = String;
3538

36-
fn try_from(value: ruma::directory::PublicRoomJoinRule) -> Result<Self, Self::Error> {
39+
fn try_from(value: ruma::room::JoinRuleKind) -> Result<Self, Self::Error> {
3740
match value {
38-
ruma::directory::PublicRoomJoinRule::Public => Ok(Self::Public),
39-
ruma::directory::PublicRoomJoinRule::Knock => Ok(Self::Knock),
41+
ruma::room::JoinRuleKind::Public => Ok(Self::Public),
42+
ruma::room::JoinRuleKind::Knock => Ok(Self::Knock),
43+
ruma::room::JoinRuleKind::Restricted => Ok(Self::Restricted),
44+
ruma::room::JoinRuleKind::KnockRestricted => Ok(Self::KnockRestricted),
45+
ruma::room::JoinRuleKind::Invite => Ok(Self::Invite),
4046
rule => Err(format!("unsupported join rule: {rule:?}")),
4147
}
4248
}

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

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
use anyhow::Context as _;
22
use matrix_sdk::{room_preview::RoomPreview as SdkRoomPreview, Client};
3-
use ruma::{room::RoomType as RumaRoomType, space::SpaceRoomJoinRule};
3+
use ruma::room::{JoinRuleSummary, RoomType as RumaRoomType};
44
use tracing::warn;
55

66
use crate::{
7-
client::JoinRule,
7+
client::{AllowRule, JoinRule},
88
error::ClientError,
99
room::{Membership, RoomHero},
1010
room_member::{RoomMember, RoomMemberWithSenderInfo},
@@ -40,7 +40,7 @@ impl RoomPreview {
4040
.as_ref()
4141
.map(TryInto::try_into)
4242
.transpose()
43-
.map_err(|_| anyhow::anyhow!("unhandled SpaceRoomJoinRule kind"))?,
43+
.map_err(|_| anyhow::anyhow!("unhandled JoinRuleSummary kind"))?,
4444
is_direct: info.is_direct,
4545
heroes: info
4646
.heroes
@@ -122,20 +122,32 @@ pub struct RoomPreviewInfo {
122122
pub heroes: Option<Vec<RoomHero>>,
123123
}
124124

125-
impl TryFrom<&SpaceRoomJoinRule> for JoinRule {
125+
impl TryFrom<&JoinRuleSummary> for JoinRule {
126126
type Error = ();
127127

128-
fn try_from(join_rule: &SpaceRoomJoinRule) -> Result<Self, ()> {
128+
fn try_from(join_rule: &JoinRuleSummary) -> Result<Self, ()> {
129129
Ok(match join_rule {
130-
SpaceRoomJoinRule::Invite => JoinRule::Invite,
131-
SpaceRoomJoinRule::Knock => JoinRule::Knock,
132-
SpaceRoomJoinRule::Private => JoinRule::Private,
133-
SpaceRoomJoinRule::Restricted => JoinRule::Restricted { rules: Vec::new() },
134-
SpaceRoomJoinRule::KnockRestricted => JoinRule::KnockRestricted { rules: Vec::new() },
135-
SpaceRoomJoinRule::Public => JoinRule::Public,
136-
SpaceRoomJoinRule::_Custom(_) => JoinRule::Custom { repr: join_rule.to_string() },
130+
JoinRuleSummary::Invite => JoinRule::Invite,
131+
JoinRuleSummary::Knock => JoinRule::Knock,
132+
JoinRuleSummary::Private => JoinRule::Private,
133+
JoinRuleSummary::Restricted(summary) => JoinRule::Restricted {
134+
rules: summary
135+
.allowed_room_ids
136+
.iter()
137+
.map(|room_id| AllowRule::RoomMembership { room_id: room_id.to_string() })
138+
.collect(),
139+
},
140+
JoinRuleSummary::KnockRestricted(summary) => JoinRule::KnockRestricted {
141+
rules: summary
142+
.allowed_room_ids
143+
.iter()
144+
.map(|room_id| AllowRule::RoomMembership { room_id: room_id.to_string() })
145+
.collect(),
146+
},
147+
JoinRuleSummary::Public => JoinRule::Public,
148+
JoinRuleSummary::_Custom(_) => JoinRule::Custom { repr: join_rule.as_str().to_owned() },
137149
_ => {
138-
warn!("unhandled SpaceRoomJoinRule: {join_rule}");
150+
warn!("unhandled JoinRuleSummary: {}", join_rule.as_str());
139151
return Err(());
140152
}
141153
})

crates/matrix-sdk/src/room_directory_search.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ use futures_core::Stream;
2020
use imbl::Vector;
2121
use ruma::{
2222
api::client::directory::get_public_rooms_filtered::v3::Request as PublicRoomsFilterRequest,
23-
directory::{Filter, PublicRoomJoinRule},
24-
OwnedMxcUri, OwnedRoomAliasId, OwnedRoomId,
23+
directory::Filter, room::JoinRuleKind, OwnedMxcUri, OwnedRoomAliasId, OwnedRoomId,
2524
};
2625

2726
use crate::{Client, OwnedServerName, Result};
@@ -42,7 +41,7 @@ pub struct RoomDescription {
4241
/// The room's avatar URL, if any.
4342
pub avatar_url: Option<OwnedMxcUri>,
4443
/// The room's join rule.
45-
pub join_rule: PublicRoomJoinRule,
44+
pub join_rule: JoinRuleKind,
4645
/// Whether can be previewed
4746
pub is_world_readable: bool,
4847
/// The number of members that have joined the room.
@@ -220,7 +219,9 @@ mod tests {
220219
use eyeball_im::VectorDiff;
221220
use futures_util::StreamExt;
222221
use matrix_sdk_test::{async_test, test_json};
223-
use ruma::{directory::Filter, owned_server_name, serde::Raw, RoomAliasId, RoomId};
222+
use ruma::{
223+
directory::Filter, owned_server_name, room::JoinRuleKind, serde::Raw, RoomAliasId, RoomId,
224+
};
224225
use serde_json::Value as JsonValue;
225226
use stream_assert::assert_pending;
226227
use wiremock::{
@@ -279,7 +280,7 @@ mod tests {
279280
topic: Some("Tasty tasty cheese".into()),
280281
alias: None,
281282
avatar_url: Some("mxc://bleeker.street/CHEDDARandBRIE".into()),
282-
join_rule: ruma::directory::PublicRoomJoinRule::Public,
283+
join_rule: JoinRuleKind::Public,
283284
is_world_readable: true,
284285
joined_members: 37,
285286
}
@@ -292,7 +293,7 @@ mod tests {
292293
topic: Some("Tasty tasty pear".into()),
293294
alias: RoomAliasId::parse("#murrays:pear.bar").ok(),
294295
avatar_url: Some("mxc://bleeker.street/pear".into()),
295-
join_rule: ruma::directory::PublicRoomJoinRule::Knock,
296+
join_rule: JoinRuleKind::Knock,
296297
is_world_readable: false,
297298
joined_members: 20,
298299
}

crates/matrix-sdk/src/room_preview.rs

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,8 @@ use futures_util::future::join_all;
2222
use matrix_sdk_base::{RoomHero, RoomInfo, RoomState};
2323
use ruma::{
2424
api::client::{membership::joined_members, state::get_state_events},
25-
events::room::{history_visibility::HistoryVisibility, join_rules::JoinRule},
26-
room::RoomType,
27-
space::SpaceRoomJoinRule,
25+
events::room::history_visibility::HistoryVisibility,
26+
room::{JoinRuleSummary, RoomType},
2827
OwnedMxcUri, OwnedRoomAliasId, OwnedRoomId, OwnedServerName, RoomId, RoomOrAliasId, ServerName,
2928
};
3029
use tokio::try_join;
@@ -63,7 +62,7 @@ pub struct RoomPreview {
6362
pub room_type: Option<RoomType>,
6463

6564
/// What's the join rule for this room?
66-
pub join_rule: Option<SpaceRoomJoinRule>,
65+
pub join_rule: Option<JoinRuleSummary>,
6766

6867
/// Is the room world-readable (i.e. is its history_visibility set to
6968
/// world_readable)?
@@ -101,19 +100,7 @@ impl RoomPreview {
101100
topic: room_info.topic().map(ToOwned::to_owned),
102101
avatar_url: room_info.avatar_url().map(ToOwned::to_owned),
103102
room_type: room_info.room_type().cloned(),
104-
join_rule: room_info.join_rule().map(|rule| match rule {
105-
JoinRule::Invite => SpaceRoomJoinRule::Invite,
106-
JoinRule::Knock => SpaceRoomJoinRule::Knock,
107-
JoinRule::Private => SpaceRoomJoinRule::Private,
108-
JoinRule::Restricted(_) => SpaceRoomJoinRule::Restricted,
109-
JoinRule::KnockRestricted(_) => SpaceRoomJoinRule::KnockRestricted,
110-
JoinRule::Public => SpaceRoomJoinRule::Public,
111-
_ => {
112-
// The JoinRule enum is non-exhaustive. Let's do a white lie and pretend it's
113-
// private (a cautious choice).
114-
SpaceRoomJoinRule::Private
115-
}
116-
}),
103+
join_rule: room_info.join_rule().cloned().map(Into::into),
117104
is_world_readable: room_info
118105
.history_visibility()
119106
.map(|vis| *vis == HistoryVisibility::WorldReadable),
@@ -288,7 +275,7 @@ impl RoomPreview {
288275
num_joined_members: summary.num_joined_members.into(),
289276
num_active_members,
290277
room_type: summary.room_type,
291-
join_rule: Some(summary.join_rule.into()),
278+
join_rule: Some(summary.join_rule),
292279
is_world_readable: Some(summary.world_readable),
293280
state,
294281
is_direct,

crates/matrix-sdk/tests/integration/room_preview.rs

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ use matrix_sdk_test::{
99
async_test, InvitedRoomBuilder, JoinedRoomBuilder, KnockedRoomBuilder, SyncResponseBuilder,
1010
};
1111
use ruma::{
12-
api::client::sync::sync_events::{v5 as sliding_sync_http, v5::response::Hero},
12+
api::client::sync::sync_events::v5::{self as sliding_sync_http, response::Hero},
1313
assign,
1414
events::room::member::MembershipState,
15-
owned_user_id, room_id,
16-
space::SpaceRoomJoinRule,
17-
RoomId,
15+
owned_user_id,
16+
room::JoinRuleKind,
17+
room_id, RoomId,
1818
};
1919
use serde_json::json;
2020
use wiremock::{
@@ -39,7 +39,7 @@ async fn test_room_preview_leave_invited() {
3939
mock_unknown_summary(
4040
room_id,
4141
None,
42-
SpaceRoomJoinRule::Knock,
42+
JoinRuleKind::Knock,
4343
Some(MembershipState::Invite),
4444
&server,
4545
)
@@ -94,14 +94,8 @@ async fn test_room_preview_leave_knocked() {
9494
client.sync_once(SyncSettings::default()).await.unwrap();
9595
server.reset().await;
9696

97-
mock_unknown_summary(
98-
room_id,
99-
None,
100-
SpaceRoomJoinRule::Knock,
101-
Some(MembershipState::Knock),
102-
&server,
103-
)
104-
.await;
97+
mock_unknown_summary(room_id, None, JoinRuleKind::Knock, Some(MembershipState::Knock), &server)
98+
.await;
10599
mock_leave(room_id, &server).await;
106100

107101
let room_preview = client.get_room_preview(room_id.into(), Vec::new()).await.unwrap();
@@ -141,7 +135,7 @@ async fn test_room_preview_leave_unknown_room_fails() {
141135
let (client, server) = logged_in_client_with_server().await;
142136
let room_id = room_id!("!room:localhost");
143137

144-
mock_unknown_summary(room_id, None, SpaceRoomJoinRule::Knock, None, &server).await;
138+
mock_unknown_summary(room_id, None, JoinRuleKind::Knock, None, &server).await;
145139

146140
let room_preview = client.get_room_preview(room_id.into(), Vec::new()).await.unwrap();
147141
assert!(room_preview.state.is_none());
@@ -193,7 +187,7 @@ async fn mock_leave(room_id: &RoomId, server: &MockServer) {
193187
async fn mock_unknown_summary(
194188
room_id: &RoomId,
195189
alias: Option<String>,
196-
join_rule: SpaceRoomJoinRule,
190+
join_rule: JoinRuleKind,
197191
membership: Option<MembershipState>,
198192
server: &MockServer,
199193
) {

testing/matrix-sdk-integration-testing/src/tests/sliding_sync/room.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ use matrix_sdk::{
3232
},
3333
AnySyncMessageLikeEvent, InitialStateEvent, Mentions, StateEventType,
3434
},
35-
mxc_uri, owned_server_name, room_id,
36-
space::SpaceRoomJoinRule,
37-
uint, RoomId,
35+
mxc_uri, owned_server_name,
36+
room::JoinRuleSummary,
37+
room_id, uint, RoomId,
3838
},
3939
sliding_sync::VersionBuilder,
4040
test_utils::{logged_in_client_with_server, mocks::MatrixMockServer},
@@ -1228,7 +1228,7 @@ fn assert_room_preview(preview: &RoomPreview, room_alias: &str) {
12281228
assert_eq!(preview.avatar_url.as_ref().unwrap(), mxc_uri!("mxc://localhost/alice"));
12291229
assert_eq!(preview.num_joined_members, 1);
12301230
assert!(preview.room_type.is_none());
1231-
assert_eq!(preview.join_rule, Some(SpaceRoomJoinRule::Invite));
1231+
assert_eq!(preview.join_rule, Some(JoinRuleSummary::Invite));
12321232
assert!(preview.is_world_readable.unwrap());
12331233
}
12341234

0 commit comments

Comments
 (0)