knock request : expose JoinRule from sdk
This commit is contained in:
parent
71c6b2a0e3
commit
7e523df08c
9 changed files with 91 additions and 0 deletions
|
|
@ -12,6 +12,7 @@ import io.element.android.libraries.matrix.api.core.EventId
|
||||||
import io.element.android.libraries.matrix.api.core.RoomAlias
|
import io.element.android.libraries.matrix.api.core.RoomAlias
|
||||||
import io.element.android.libraries.matrix.api.core.RoomId
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
import io.element.android.libraries.matrix.api.core.UserId
|
import io.element.android.libraries.matrix.api.core.UserId
|
||||||
|
import io.element.android.libraries.matrix.api.room.join.JoinRule
|
||||||
import io.element.android.libraries.matrix.api.user.MatrixUser
|
import io.element.android.libraries.matrix.api.user.MatrixUser
|
||||||
import kotlinx.collections.immutable.ImmutableList
|
import kotlinx.collections.immutable.ImmutableList
|
||||||
import kotlinx.collections.immutable.ImmutableMap
|
import kotlinx.collections.immutable.ImmutableMap
|
||||||
|
|
@ -27,6 +28,7 @@ data class MatrixRoomInfo(
|
||||||
val avatarUrl: String?,
|
val avatarUrl: String?,
|
||||||
val isDirect: Boolean,
|
val isDirect: Boolean,
|
||||||
val isPublic: Boolean,
|
val isPublic: Boolean,
|
||||||
|
val joinRule: JoinRule?,
|
||||||
val isSpace: Boolean,
|
val isSpace: Boolean,
|
||||||
val isTombstoned: Boolean,
|
val isTombstoned: Boolean,
|
||||||
val isFavorite: Boolean,
|
val isFavorite: Boolean,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 New Vector Ltd.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
* Please see LICENSE in the repository root for full details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.element.android.libraries.matrix.api.room.join
|
||||||
|
|
||||||
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
|
|
||||||
|
sealed interface AllowRule {
|
||||||
|
data class RoomMembership(val roomId: RoomId) : AllowRule
|
||||||
|
data class Custom(val json: String) : AllowRule
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 New Vector Ltd.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
* Please see LICENSE in the repository root for full details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.element.android.libraries.matrix.api.room.join
|
||||||
|
|
||||||
|
sealed interface JoinRule {
|
||||||
|
data object Public : JoinRule
|
||||||
|
data object Private: JoinRule
|
||||||
|
data object Knock: JoinRule
|
||||||
|
data object Invite: JoinRule
|
||||||
|
data class Restricted(val rules: List<AllowRule>): JoinRule
|
||||||
|
data class KnockRestricted(val rules: List<AllowRule>): JoinRule
|
||||||
|
data class Custom(val value: String): JoinRule
|
||||||
|
}
|
||||||
|
|
@ -15,6 +15,7 @@ import io.element.android.libraries.matrix.api.room.CurrentUserMembership
|
||||||
import io.element.android.libraries.matrix.api.room.MatrixRoomInfo
|
import io.element.android.libraries.matrix.api.room.MatrixRoomInfo
|
||||||
import io.element.android.libraries.matrix.api.room.RoomNotificationMode
|
import io.element.android.libraries.matrix.api.room.RoomNotificationMode
|
||||||
import io.element.android.libraries.matrix.api.user.MatrixUser
|
import io.element.android.libraries.matrix.api.user.MatrixUser
|
||||||
|
import io.element.android.libraries.matrix.impl.room.join.map
|
||||||
import io.element.android.libraries.matrix.impl.room.member.RoomMemberMapper
|
import io.element.android.libraries.matrix.impl.room.member.RoomMemberMapper
|
||||||
import kotlinx.collections.immutable.ImmutableMap
|
import kotlinx.collections.immutable.ImmutableMap
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
|
|
@ -36,6 +37,7 @@ class MatrixRoomInfoMapper {
|
||||||
avatarUrl = it.avatarUrl,
|
avatarUrl = it.avatarUrl,
|
||||||
isDirect = it.isDirect,
|
isDirect = it.isDirect,
|
||||||
isPublic = it.isPublic,
|
isPublic = it.isPublic,
|
||||||
|
joinRule = it.joinRule?.map(),
|
||||||
isSpace = it.isSpace,
|
isSpace = it.isSpace,
|
||||||
isTombstoned = it.isTombstoned,
|
isTombstoned = it.isTombstoned,
|
||||||
isFavorite = it.isFavourite,
|
isFavorite = it.isFavourite,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 New Vector Ltd.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
* Please see LICENSE in the repository root for full details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.element.android.libraries.matrix.impl.room.join
|
||||||
|
|
||||||
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
|
import io.element.android.libraries.matrix.api.room.join.AllowRule
|
||||||
|
import org.matrix.rustcomponents.sdk.AllowRule as RustAllowRule
|
||||||
|
|
||||||
|
fun RustAllowRule.map(): AllowRule {
|
||||||
|
return when (this) {
|
||||||
|
is RustAllowRule.RoomMembership -> AllowRule.RoomMembership(RoomId(roomId))
|
||||||
|
is RustAllowRule.Custom -> AllowRule.Custom(json)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2024 New Vector Ltd.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
* Please see LICENSE in the repository root for full details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.element.android.libraries.matrix.impl.room.join
|
||||||
|
|
||||||
|
import io.element.android.libraries.matrix.api.room.join.JoinRule
|
||||||
|
import org.matrix.rustcomponents.sdk.JoinRule as RustJoinRule
|
||||||
|
|
||||||
|
fun RustJoinRule.map(): JoinRule {
|
||||||
|
return when (this) {
|
||||||
|
RustJoinRule.Public -> JoinRule.Public
|
||||||
|
RustJoinRule.Private -> JoinRule.Private
|
||||||
|
RustJoinRule.Knock -> JoinRule.Knock
|
||||||
|
RustJoinRule.Invite -> JoinRule.Invite
|
||||||
|
is RustJoinRule.Restricted -> JoinRule.Restricted(rules.map { it.map() })
|
||||||
|
is RustJoinRule.Custom -> JoinRule.Custom(repr)
|
||||||
|
is RustJoinRule.KnockRestricted -> JoinRule.KnockRestricted(rules.map { it.map() })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -14,6 +14,7 @@ import io.element.android.libraries.matrix.api.core.UserId
|
||||||
import io.element.android.libraries.matrix.api.room.CurrentUserMembership
|
import io.element.android.libraries.matrix.api.room.CurrentUserMembership
|
||||||
import io.element.android.libraries.matrix.api.room.MatrixRoomInfo
|
import io.element.android.libraries.matrix.api.room.MatrixRoomInfo
|
||||||
import io.element.android.libraries.matrix.api.room.RoomNotificationMode
|
import io.element.android.libraries.matrix.api.room.RoomNotificationMode
|
||||||
|
import io.element.android.libraries.matrix.api.room.join.JoinRule
|
||||||
import io.element.android.libraries.matrix.api.user.MatrixUser
|
import io.element.android.libraries.matrix.api.user.MatrixUser
|
||||||
import io.element.android.libraries.matrix.impl.fixtures.factories.aRustRoomHero
|
import io.element.android.libraries.matrix.impl.fixtures.factories.aRustRoomHero
|
||||||
import io.element.android.libraries.matrix.impl.fixtures.factories.aRustRoomInfo
|
import io.element.android.libraries.matrix.impl.fixtures.factories.aRustRoomInfo
|
||||||
|
|
@ -30,6 +31,7 @@ import kotlinx.collections.immutable.toImmutableList
|
||||||
import kotlinx.collections.immutable.toImmutableMap
|
import kotlinx.collections.immutable.toImmutableMap
|
||||||
import kotlinx.collections.immutable.toPersistentList
|
import kotlinx.collections.immutable.toPersistentList
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
import org.matrix.rustcomponents.sdk.JoinRule as RustJoinRule
|
||||||
import org.matrix.rustcomponents.sdk.Membership
|
import org.matrix.rustcomponents.sdk.Membership
|
||||||
import org.matrix.rustcomponents.sdk.RoomNotificationMode as RustRoomNotificationMode
|
import org.matrix.rustcomponents.sdk.RoomNotificationMode as RustRoomNotificationMode
|
||||||
|
|
||||||
|
|
@ -47,6 +49,7 @@ class MatrixRoomInfoMapperTest {
|
||||||
isDirect = true,
|
isDirect = true,
|
||||||
isPublic = false,
|
isPublic = false,
|
||||||
isSpace = false,
|
isSpace = false,
|
||||||
|
joinRule = RustJoinRule.Invite,
|
||||||
isTombstoned = false,
|
isTombstoned = false,
|
||||||
isFavourite = false,
|
isFavourite = false,
|
||||||
canonicalAlias = A_ROOM_ALIAS.value,
|
canonicalAlias = A_ROOM_ALIAS.value,
|
||||||
|
|
@ -83,6 +86,7 @@ class MatrixRoomInfoMapperTest {
|
||||||
isSpace = false,
|
isSpace = false,
|
||||||
isTombstoned = false,
|
isTombstoned = false,
|
||||||
isFavorite = false,
|
isFavorite = false,
|
||||||
|
joinRule = JoinRule.Invite,
|
||||||
canonicalAlias = A_ROOM_ALIAS,
|
canonicalAlias = A_ROOM_ALIAS,
|
||||||
alternativeAliases = listOf(A_ROOM_ALIAS).toImmutableList(),
|
alternativeAliases = listOf(A_ROOM_ALIAS).toImmutableList(),
|
||||||
currentUserMembership = CurrentUserMembership.JOINED,
|
currentUserMembership = CurrentUserMembership.JOINED,
|
||||||
|
|
@ -125,6 +129,7 @@ class MatrixRoomInfoMapperTest {
|
||||||
avatarUrl = null,
|
avatarUrl = null,
|
||||||
isDirect = false,
|
isDirect = false,
|
||||||
isPublic = true,
|
isPublic = true,
|
||||||
|
joinRule = null,
|
||||||
isSpace = false,
|
isSpace = false,
|
||||||
isTombstoned = false,
|
isTombstoned = false,
|
||||||
isFavourite = true,
|
isFavourite = true,
|
||||||
|
|
@ -159,6 +164,7 @@ class MatrixRoomInfoMapperTest {
|
||||||
avatarUrl = null,
|
avatarUrl = null,
|
||||||
isDirect = false,
|
isDirect = false,
|
||||||
isPublic = true,
|
isPublic = true,
|
||||||
|
joinRule = null,
|
||||||
isSpace = false,
|
isSpace = false,
|
||||||
isTombstoned = false,
|
isTombstoned = false,
|
||||||
isFavorite = true,
|
isFavorite = true,
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ import io.element.android.libraries.matrix.api.room.CurrentUserMembership
|
||||||
import io.element.android.libraries.matrix.api.room.MatrixRoomInfo
|
import io.element.android.libraries.matrix.api.room.MatrixRoomInfo
|
||||||
import io.element.android.libraries.matrix.api.room.RoomMember
|
import io.element.android.libraries.matrix.api.room.RoomMember
|
||||||
import io.element.android.libraries.matrix.api.room.RoomNotificationMode
|
import io.element.android.libraries.matrix.api.room.RoomNotificationMode
|
||||||
|
import io.element.android.libraries.matrix.api.room.join.JoinRule
|
||||||
import io.element.android.libraries.matrix.api.user.MatrixUser
|
import io.element.android.libraries.matrix.api.user.MatrixUser
|
||||||
import io.element.android.libraries.matrix.test.AN_AVATAR_URL
|
import io.element.android.libraries.matrix.test.AN_AVATAR_URL
|
||||||
import io.element.android.libraries.matrix.test.A_ROOM_ID
|
import io.element.android.libraries.matrix.test.A_ROOM_ID
|
||||||
|
|
@ -33,6 +34,7 @@ fun aRoomInfo(
|
||||||
avatarUrl: String? = AN_AVATAR_URL,
|
avatarUrl: String? = AN_AVATAR_URL,
|
||||||
isDirect: Boolean = false,
|
isDirect: Boolean = false,
|
||||||
isPublic: Boolean = true,
|
isPublic: Boolean = true,
|
||||||
|
joinRule: JoinRule? = JoinRule.Public,
|
||||||
isSpace: Boolean = false,
|
isSpace: Boolean = false,
|
||||||
isTombstoned: Boolean = false,
|
isTombstoned: Boolean = false,
|
||||||
isFavorite: Boolean = false,
|
isFavorite: Boolean = false,
|
||||||
|
|
@ -64,6 +66,7 @@ fun aRoomInfo(
|
||||||
avatarUrl = avatarUrl,
|
avatarUrl = avatarUrl,
|
||||||
isDirect = isDirect,
|
isDirect = isDirect,
|
||||||
isPublic = isPublic,
|
isPublic = isPublic,
|
||||||
|
joinRule = joinRule,
|
||||||
isSpace = isSpace,
|
isSpace = isSpace,
|
||||||
isTombstoned = isTombstoned,
|
isTombstoned = isTombstoned,
|
||||||
isFavorite = isFavorite,
|
isFavorite = isFavorite,
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ import io.element.android.libraries.matrix.api.room.CurrentUserMembership
|
||||||
import io.element.android.libraries.matrix.api.room.MatrixRoomInfo
|
import io.element.android.libraries.matrix.api.room.MatrixRoomInfo
|
||||||
import io.element.android.libraries.matrix.api.room.RoomMember
|
import io.element.android.libraries.matrix.api.room.RoomMember
|
||||||
import io.element.android.libraries.matrix.api.room.RoomNotificationMode
|
import io.element.android.libraries.matrix.api.room.RoomNotificationMode
|
||||||
|
import io.element.android.libraries.matrix.api.room.join.JoinRule
|
||||||
import io.element.android.libraries.matrix.api.room.message.RoomMessage
|
import io.element.android.libraries.matrix.api.room.message.RoomMessage
|
||||||
import io.element.android.libraries.matrix.api.roomlist.RoomSummary
|
import io.element.android.libraries.matrix.api.roomlist.RoomSummary
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem
|
import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem
|
||||||
|
|
@ -46,6 +47,7 @@ fun aRoomSummary(
|
||||||
avatarUrl: String? = null,
|
avatarUrl: String? = null,
|
||||||
isDirect: Boolean = false,
|
isDirect: Boolean = false,
|
||||||
isPublic: Boolean = true,
|
isPublic: Boolean = true,
|
||||||
|
joinRule: JoinRule? = JoinRule.Public,
|
||||||
isSpace: Boolean = false,
|
isSpace: Boolean = false,
|
||||||
isTombstoned: Boolean = false,
|
isTombstoned: Boolean = false,
|
||||||
isFavorite: Boolean = false,
|
isFavorite: Boolean = false,
|
||||||
|
|
@ -79,6 +81,7 @@ fun aRoomSummary(
|
||||||
avatarUrl = avatarUrl,
|
avatarUrl = avatarUrl,
|
||||||
isDirect = isDirect,
|
isDirect = isDirect,
|
||||||
isPublic = isPublic,
|
isPublic = isPublic,
|
||||||
|
joinRule = joinRule,
|
||||||
isSpace = isSpace,
|
isSpace = isSpace,
|
||||||
isTombstoned = isTombstoned,
|
isTombstoned = isTombstoned,
|
||||||
isFavorite = isFavorite,
|
isFavorite = isFavorite,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue