Skip to content

Commit 5715f60

Browse files
committed
knock request : expose JoinRule from sdk
1 parent 759cd0f commit 5715f60

File tree

9 files changed

+91
-0
lines changed

9 files changed

+91
-0
lines changed

libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoomInfo.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import io.element.android.libraries.matrix.api.core.EventId
1212
import io.element.android.libraries.matrix.api.core.RoomAlias
1313
import io.element.android.libraries.matrix.api.core.RoomId
1414
import io.element.android.libraries.matrix.api.core.UserId
15+
import io.element.android.libraries.matrix.api.room.join.JoinRule
1516
import io.element.android.libraries.matrix.api.user.MatrixUser
1617
import kotlinx.collections.immutable.ImmutableList
1718
import kotlinx.collections.immutable.ImmutableMap
@@ -27,6 +28,7 @@ data class MatrixRoomInfo(
2728
val avatarUrl: String?,
2829
val isDirect: Boolean,
2930
val isPublic: Boolean,
31+
val joinRule: JoinRule?,
3032
val isSpace: Boolean,
3133
val isTombstoned: Boolean,
3234
val isFavorite: Boolean,
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/*
2+
* Copyright 2024 New Vector Ltd.
3+
*
4+
* SPDX-License-Identifier: AGPL-3.0-only
5+
* Please see LICENSE in the repository root for full details.
6+
*/
7+
8+
package io.element.android.libraries.matrix.api.room.join
9+
10+
import io.element.android.libraries.matrix.api.core.RoomId
11+
12+
sealed interface AllowRule {
13+
data class RoomMembership(val roomId: RoomId) : AllowRule
14+
data class Custom(val json: String) : AllowRule
15+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/*
2+
* Copyright 2024 New Vector Ltd.
3+
*
4+
* SPDX-License-Identifier: AGPL-3.0-only
5+
* Please see LICENSE in the repository root for full details.
6+
*/
7+
8+
package io.element.android.libraries.matrix.api.room.join
9+
10+
sealed interface JoinRule {
11+
data object Public : JoinRule
12+
data object Private: JoinRule
13+
data object Knock: JoinRule
14+
data object Invite: JoinRule
15+
data class Restricted(val rules: List<AllowRule>): JoinRule
16+
data class KnockRestricted(val rules: List<AllowRule>): JoinRule
17+
data class Custom(val value: String): JoinRule
18+
}

libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapper.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import io.element.android.libraries.matrix.api.room.CurrentUserMembership
1515
import io.element.android.libraries.matrix.api.room.MatrixRoomInfo
1616
import io.element.android.libraries.matrix.api.room.RoomNotificationMode
1717
import io.element.android.libraries.matrix.api.user.MatrixUser
18+
import io.element.android.libraries.matrix.impl.room.join.map
1819
import io.element.android.libraries.matrix.impl.room.member.RoomMemberMapper
1920
import kotlinx.collections.immutable.ImmutableMap
2021
import kotlinx.collections.immutable.toImmutableList
@@ -36,6 +37,7 @@ class MatrixRoomInfoMapper {
3637
avatarUrl = it.avatarUrl,
3738
isDirect = it.isDirect,
3839
isPublic = it.isPublic,
40+
joinRule = it.joinRule?.map(),
3941
isSpace = it.isSpace,
4042
isTombstoned = it.isTombstoned,
4143
isFavorite = it.isFavourite,
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/*
2+
* Copyright 2024 New Vector Ltd.
3+
*
4+
* SPDX-License-Identifier: AGPL-3.0-only
5+
* Please see LICENSE in the repository root for full details.
6+
*/
7+
8+
package io.element.android.libraries.matrix.impl.room.join
9+
10+
import io.element.android.libraries.matrix.api.core.RoomId
11+
import io.element.android.libraries.matrix.api.room.join.AllowRule
12+
import org.matrix.rustcomponents.sdk.AllowRule as RustAllowRule
13+
14+
fun RustAllowRule.map(): AllowRule {
15+
return when (this) {
16+
is RustAllowRule.RoomMembership -> AllowRule.RoomMembership(RoomId(roomId))
17+
is RustAllowRule.Custom -> AllowRule.Custom(json)
18+
}
19+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/*
2+
* Copyright 2024 New Vector Ltd.
3+
*
4+
* SPDX-License-Identifier: AGPL-3.0-only
5+
* Please see LICENSE in the repository root for full details.
6+
*/
7+
8+
package io.element.android.libraries.matrix.impl.room.join
9+
10+
import io.element.android.libraries.matrix.api.room.join.JoinRule
11+
import org.matrix.rustcomponents.sdk.JoinRule as RustJoinRule
12+
13+
fun RustJoinRule.map(): JoinRule {
14+
return when (this) {
15+
RustJoinRule.Public -> JoinRule.Public
16+
RustJoinRule.Private -> JoinRule.Private
17+
RustJoinRule.Knock -> JoinRule.Knock
18+
RustJoinRule.Invite -> JoinRule.Invite
19+
is RustJoinRule.Restricted -> JoinRule.Restricted(rules.map { it.map() })
20+
is RustJoinRule.Custom -> JoinRule.Custom(repr)
21+
is RustJoinRule.KnockRestricted -> JoinRule.KnockRestricted(rules.map { it.map() })
22+
}
23+
}

libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/MatrixRoomInfoMapperTest.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import io.element.android.libraries.matrix.api.core.UserId
1414
import io.element.android.libraries.matrix.api.room.CurrentUserMembership
1515
import io.element.android.libraries.matrix.api.room.MatrixRoomInfo
1616
import io.element.android.libraries.matrix.api.room.RoomNotificationMode
17+
import io.element.android.libraries.matrix.api.room.join.JoinRule
1718
import io.element.android.libraries.matrix.api.user.MatrixUser
1819
import io.element.android.libraries.matrix.impl.fixtures.factories.aRustRoomHero
1920
import io.element.android.libraries.matrix.impl.fixtures.factories.aRustRoomInfo
@@ -30,6 +31,7 @@ import kotlinx.collections.immutable.toImmutableList
3031
import kotlinx.collections.immutable.toImmutableMap
3132
import kotlinx.collections.immutable.toPersistentList
3233
import org.junit.Test
34+
import org.matrix.rustcomponents.sdk.JoinRule as RustJoinRule
3335
import org.matrix.rustcomponents.sdk.Membership
3436
import org.matrix.rustcomponents.sdk.RoomNotificationMode as RustRoomNotificationMode
3537

@@ -47,6 +49,7 @@ class MatrixRoomInfoMapperTest {
4749
isDirect = true,
4850
isPublic = false,
4951
isSpace = false,
52+
joinRule = RustJoinRule.Invite,
5053
isTombstoned = false,
5154
isFavourite = false,
5255
canonicalAlias = A_ROOM_ALIAS.value,
@@ -83,6 +86,7 @@ class MatrixRoomInfoMapperTest {
8386
isSpace = false,
8487
isTombstoned = false,
8588
isFavorite = false,
89+
joinRule = JoinRule.Invite,
8690
canonicalAlias = A_ROOM_ALIAS,
8791
alternativeAliases = listOf(A_ROOM_ALIAS).toImmutableList(),
8892
currentUserMembership = CurrentUserMembership.JOINED,
@@ -125,6 +129,7 @@ class MatrixRoomInfoMapperTest {
125129
avatarUrl = null,
126130
isDirect = false,
127131
isPublic = true,
132+
joinRule = null,
128133
isSpace = false,
129134
isTombstoned = false,
130135
isFavourite = true,
@@ -159,6 +164,7 @@ class MatrixRoomInfoMapperTest {
159164
avatarUrl = null,
160165
isDirect = false,
161166
isPublic = true,
167+
joinRule = null,
162168
isSpace = false,
163169
isTombstoned = false,
164170
isFavorite = true,

libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomInfoFixture.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import io.element.android.libraries.matrix.api.room.CurrentUserMembership
1515
import io.element.android.libraries.matrix.api.room.MatrixRoomInfo
1616
import io.element.android.libraries.matrix.api.room.RoomMember
1717
import io.element.android.libraries.matrix.api.room.RoomNotificationMode
18+
import io.element.android.libraries.matrix.api.room.join.JoinRule
1819
import io.element.android.libraries.matrix.api.user.MatrixUser
1920
import io.element.android.libraries.matrix.test.AN_AVATAR_URL
2021
import io.element.android.libraries.matrix.test.A_ROOM_ID
@@ -33,6 +34,7 @@ fun aRoomInfo(
3334
avatarUrl: String? = AN_AVATAR_URL,
3435
isDirect: Boolean = false,
3536
isPublic: Boolean = true,
37+
joinRule: JoinRule? = JoinRule.Public,
3638
isSpace: Boolean = false,
3739
isTombstoned: Boolean = false,
3840
isFavorite: Boolean = false,
@@ -64,6 +66,7 @@ fun aRoomInfo(
6466
avatarUrl = avatarUrl,
6567
isDirect = isDirect,
6668
isPublic = isPublic,
69+
joinRule = joinRule,
6770
isSpace = isSpace,
6871
isTombstoned = isTombstoned,
6972
isFavorite = isFavorite,

libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/RoomSummaryFixture.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import io.element.android.libraries.matrix.api.room.CurrentUserMembership
1515
import io.element.android.libraries.matrix.api.room.MatrixRoomInfo
1616
import io.element.android.libraries.matrix.api.room.RoomMember
1717
import io.element.android.libraries.matrix.api.room.RoomNotificationMode
18+
import io.element.android.libraries.matrix.api.room.join.JoinRule
1819
import io.element.android.libraries.matrix.api.room.message.RoomMessage
1920
import io.element.android.libraries.matrix.api.roomlist.RoomSummary
2021
import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem
@@ -46,6 +47,7 @@ fun aRoomSummary(
4647
avatarUrl: String? = null,
4748
isDirect: Boolean = false,
4849
isPublic: Boolean = true,
50+
joinRule: JoinRule? = JoinRule.Public,
4951
isSpace: Boolean = false,
5052
isTombstoned: Boolean = false,
5153
isFavorite: Boolean = false,
@@ -79,6 +81,7 @@ fun aRoomSummary(
7981
avatarUrl = avatarUrl,
8082
isDirect = isDirect,
8183
isPublic = isPublic,
84+
joinRule = joinRule,
8285
isSpace = isSpace,
8386
isTombstoned = isTombstoned,
8487
isFavorite = isFavorite,

0 commit comments

Comments
 (0)