create room : branch the join rule override
This commit is contained in:
parent
c968bc6200
commit
93bb02ef3b
5 changed files with 46 additions and 4 deletions
|
|
@ -27,6 +27,7 @@ import io.element.android.libraries.core.mimetype.MimeTypes
|
||||||
import io.element.android.libraries.matrix.api.MatrixClient
|
import io.element.android.libraries.matrix.api.MatrixClient
|
||||||
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.createroom.CreateRoomParameters
|
import io.element.android.libraries.matrix.api.createroom.CreateRoomParameters
|
||||||
|
import io.element.android.libraries.matrix.api.createroom.JoinRuleOverride
|
||||||
import io.element.android.libraries.matrix.api.createroom.RoomPreset
|
import io.element.android.libraries.matrix.api.createroom.RoomPreset
|
||||||
import io.element.android.libraries.matrix.api.createroom.RoomVisibility
|
import io.element.android.libraries.matrix.api.createroom.RoomVisibility
|
||||||
import io.element.android.libraries.matrix.ui.media.AvatarAction
|
import io.element.android.libraries.matrix.ui.media.AvatarAction
|
||||||
|
|
@ -38,6 +39,7 @@ import io.element.android.services.analytics.api.AnalyticsService
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
import java.util.Optional
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class ConfigureRoomPresenter @Inject constructor(
|
class ConfigureRoomPresenter @Inject constructor(
|
||||||
|
|
@ -138,6 +140,7 @@ class ConfigureRoomPresenter @Inject constructor(
|
||||||
isEncrypted = config.roomVisibility is RoomVisibilityState.Private,
|
isEncrypted = config.roomVisibility is RoomVisibilityState.Private,
|
||||||
isDirect = false,
|
isDirect = false,
|
||||||
visibility = if (config.roomVisibility is RoomVisibilityState.Public) RoomVisibility.PUBLIC else RoomVisibility.PRIVATE,
|
visibility = if (config.roomVisibility is RoomVisibilityState.Public) RoomVisibility.PUBLIC else RoomVisibility.PRIVATE,
|
||||||
|
joinRuleOverride = if (config.roomVisibility is RoomVisibilityState.Public) config.roomVisibility.roomAccess.toJoinRule() else JoinRuleOverride.None,
|
||||||
preset = if (config.roomVisibility is RoomVisibilityState.Public) RoomPreset.PUBLIC_CHAT else RoomPreset.PRIVATE_CHAT,
|
preset = if (config.roomVisibility is RoomVisibilityState.Public) RoomPreset.PUBLIC_CHAT else RoomPreset.PRIVATE_CHAT,
|
||||||
invite = config.invites.map { it.userId },
|
invite = config.invites.map { it.userId },
|
||||||
avatar = avatarUrl,
|
avatar = avatarUrl,
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,15 @@
|
||||||
|
|
||||||
package io.element.android.features.createroom.impl.configureroom
|
package io.element.android.features.createroom.impl.configureroom
|
||||||
|
|
||||||
|
import io.element.android.libraries.matrix.api.createroom.JoinRuleOverride
|
||||||
|
|
||||||
enum class RoomAccess {
|
enum class RoomAccess {
|
||||||
Anyone, Knocking
|
Anyone, Knocking
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun RoomAccess.toJoinRule(): JoinRuleOverride {
|
||||||
|
return when (this) {
|
||||||
|
RoomAccess.Anyone -> JoinRuleOverride.None
|
||||||
|
RoomAccess.Knocking -> JoinRuleOverride.Knock
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,4 +18,5 @@ data class CreateRoomParameters(
|
||||||
val preset: RoomPreset,
|
val preset: RoomPreset,
|
||||||
val invite: List<UserId>? = null,
|
val invite: List<UserId>? = null,
|
||||||
val avatar: String? = null,
|
val avatar: String? = null,
|
||||||
|
val joinRuleOverride: JoinRuleOverride = JoinRuleOverride.None,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
/*
|
||||||
|
* 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.createroom
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rules to override the default room join rules.
|
||||||
|
*/
|
||||||
|
sealed interface JoinRuleOverride {
|
||||||
|
data object Knock : JoinRuleOverride
|
||||||
|
data object None : JoinRuleOverride
|
||||||
|
}
|
||||||
|
|
@ -21,6 +21,7 @@ import io.element.android.libraries.matrix.api.core.RoomIdOrAlias
|
||||||
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.core.toRoomIdOrAlias
|
import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias
|
||||||
import io.element.android.libraries.matrix.api.createroom.CreateRoomParameters
|
import io.element.android.libraries.matrix.api.createroom.CreateRoomParameters
|
||||||
|
import io.element.android.libraries.matrix.api.createroom.JoinRuleOverride
|
||||||
import io.element.android.libraries.matrix.api.createroom.RoomPreset
|
import io.element.android.libraries.matrix.api.createroom.RoomPreset
|
||||||
import io.element.android.libraries.matrix.api.createroom.RoomVisibility
|
import io.element.android.libraries.matrix.api.createroom.RoomVisibility
|
||||||
import io.element.android.libraries.matrix.api.encryption.EncryptionService
|
import io.element.android.libraries.matrix.api.encryption.EncryptionService
|
||||||
|
|
@ -108,6 +109,7 @@ import kotlin.jvm.optionals.getOrNull
|
||||||
import kotlin.time.Duration
|
import kotlin.time.Duration
|
||||||
import kotlin.time.Duration.Companion.seconds
|
import kotlin.time.Duration.Companion.seconds
|
||||||
import org.matrix.rustcomponents.sdk.CreateRoomParameters as RustCreateRoomParameters
|
import org.matrix.rustcomponents.sdk.CreateRoomParameters as RustCreateRoomParameters
|
||||||
|
import org.matrix.rustcomponents.sdk.JoinRule as RustJoinRule
|
||||||
import org.matrix.rustcomponents.sdk.RoomPreset as RustRoomPreset
|
import org.matrix.rustcomponents.sdk.RoomPreset as RustRoomPreset
|
||||||
import org.matrix.rustcomponents.sdk.RoomVisibility as RustRoomVisibility
|
import org.matrix.rustcomponents.sdk.RoomVisibility as RustRoomVisibility
|
||||||
import org.matrix.rustcomponents.sdk.SyncService as ClientSyncService
|
import org.matrix.rustcomponents.sdk.SyncService as ClientSyncService
|
||||||
|
|
@ -304,14 +306,25 @@ class RustMatrixClient(
|
||||||
RoomVisibility.PUBLIC -> RustRoomVisibility.PUBLIC
|
RoomVisibility.PUBLIC -> RustRoomVisibility.PUBLIC
|
||||||
RoomVisibility.PRIVATE -> RustRoomVisibility.PRIVATE
|
RoomVisibility.PRIVATE -> RustRoomVisibility.PRIVATE
|
||||||
},
|
},
|
||||||
preset = when (createRoomParams.preset) {
|
preset = when (createRoomParams.visibility) {
|
||||||
RoomPreset.PRIVATE_CHAT -> RustRoomPreset.PRIVATE_CHAT
|
RoomVisibility.PRIVATE -> {
|
||||||
RoomPreset.PUBLIC_CHAT -> RustRoomPreset.PUBLIC_CHAT
|
if (createRoomParams.isDirect) {
|
||||||
RoomPreset.TRUSTED_PRIVATE_CHAT -> RustRoomPreset.TRUSTED_PRIVATE_CHAT
|
RustRoomPreset.TRUSTED_PRIVATE_CHAT
|
||||||
|
} else {
|
||||||
|
RustRoomPreset.PRIVATE_CHAT
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RoomVisibility.PUBLIC -> {
|
||||||
|
RustRoomPreset.PUBLIC_CHAT
|
||||||
|
}
|
||||||
},
|
},
|
||||||
invite = createRoomParams.invite?.map { it.value },
|
invite = createRoomParams.invite?.map { it.value },
|
||||||
avatar = createRoomParams.avatar,
|
avatar = createRoomParams.avatar,
|
||||||
powerLevelContentOverride = defaultRoomCreationPowerLevels,
|
powerLevelContentOverride = defaultRoomCreationPowerLevels,
|
||||||
|
joinRuleOverride = when (createRoomParams.joinRuleOverride) {
|
||||||
|
JoinRuleOverride.Knock -> RustJoinRule.Knock
|
||||||
|
JoinRuleOverride.None -> null
|
||||||
|
}
|
||||||
)
|
)
|
||||||
val roomId = RoomId(client.createRoom(rustParams))
|
val roomId = RoomId(client.createRoom(rustParams))
|
||||||
// Wait to receive the room back from the sync but do not returns failure if it fails.
|
// Wait to receive the room back from the sync but do not returns failure if it fails.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue