Add create room API
This commit is contained in:
parent
5699dcf39e
commit
335eb49b6c
6 changed files with 130 additions and 24 deletions
|
|
@ -19,6 +19,7 @@ package io.element.android.libraries.matrix.api
|
||||||
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.SessionId
|
import io.element.android.libraries.matrix.api.core.SessionId
|
||||||
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.createroom.CreateRoomParameters
|
||||||
import io.element.android.libraries.matrix.api.media.MediaResolver
|
import io.element.android.libraries.matrix.api.media.MediaResolver
|
||||||
import io.element.android.libraries.matrix.api.notification.NotificationService
|
import io.element.android.libraries.matrix.api.notification.NotificationService
|
||||||
import io.element.android.libraries.matrix.api.pusher.PushersService
|
import io.element.android.libraries.matrix.api.pusher.PushersService
|
||||||
|
|
@ -32,8 +33,9 @@ interface MatrixClient : Closeable {
|
||||||
val sessionId: SessionId
|
val sessionId: SessionId
|
||||||
val roomSummaryDataSource: RoomSummaryDataSource
|
val roomSummaryDataSource: RoomSummaryDataSource
|
||||||
fun getRoom(roomId: RoomId): MatrixRoom?
|
fun getRoom(roomId: RoomId): MatrixRoom?
|
||||||
suspend fun createDM(userId: UserId): Result<RoomId>
|
|
||||||
fun findDM(userId: UserId): MatrixRoom?
|
fun findDM(userId: UserId): MatrixRoom?
|
||||||
|
suspend fun createRoom(createRoomParams: CreateRoomParameters): Result<RoomId>
|
||||||
|
suspend fun createDM(userId: UserId): Result<RoomId>
|
||||||
fun startSync()
|
fun startSync()
|
||||||
fun stopSync()
|
fun stopSync()
|
||||||
fun mediaResolver(): MediaResolver
|
fun mediaResolver(): MediaResolver
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2023 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.element.android.libraries.matrix.api.createroom
|
||||||
|
|
||||||
|
import io.element.android.libraries.matrix.api.core.UserId
|
||||||
|
|
||||||
|
data class CreateRoomParameters(
|
||||||
|
val name: String?,
|
||||||
|
val topic: String? = null,
|
||||||
|
val isEncrypted: Boolean,
|
||||||
|
val isDirect: Boolean = false,
|
||||||
|
val visibility: RoomVisibility,
|
||||||
|
val preset: RoomPreset,
|
||||||
|
val invite: List<UserId>? = null,
|
||||||
|
val avatar: String? = null,
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2023 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package io.element.android.libraries.matrix.api.createroom
|
||||||
|
|
||||||
|
enum class RoomPreset {
|
||||||
|
PRIVATE_CHAT,
|
||||||
|
PUBLIC_CHAT,
|
||||||
|
TRUSTED_PRIVATE_CHAT,
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2023 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package io.element.android.libraries.matrix.api.createroom
|
||||||
|
|
||||||
|
enum class RoomVisibility {
|
||||||
|
PUBLIC,
|
||||||
|
PRIVATE,
|
||||||
|
}
|
||||||
|
|
@ -20,6 +20,9 @@ import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||||
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.core.UserId
|
import io.element.android.libraries.matrix.api.core.UserId
|
||||||
|
import io.element.android.libraries.matrix.api.createroom.CreateRoomParameters
|
||||||
|
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.media.MediaResolver
|
import io.element.android.libraries.matrix.api.media.MediaResolver
|
||||||
import io.element.android.libraries.matrix.api.notification.NotificationService
|
import io.element.android.libraries.matrix.api.notification.NotificationService
|
||||||
import io.element.android.libraries.matrix.api.pusher.PushersService
|
import io.element.android.libraries.matrix.api.pusher.PushersService
|
||||||
|
|
@ -42,10 +45,7 @@ import kotlinx.coroutines.flow.onEach
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import org.matrix.rustcomponents.sdk.Client
|
import org.matrix.rustcomponents.sdk.Client
|
||||||
import org.matrix.rustcomponents.sdk.ClientDelegate
|
import org.matrix.rustcomponents.sdk.ClientDelegate
|
||||||
import org.matrix.rustcomponents.sdk.CreateRoomParameters
|
|
||||||
import org.matrix.rustcomponents.sdk.RequiredState
|
import org.matrix.rustcomponents.sdk.RequiredState
|
||||||
import org.matrix.rustcomponents.sdk.RoomPreset
|
|
||||||
import org.matrix.rustcomponents.sdk.RoomVisibility
|
|
||||||
import org.matrix.rustcomponents.sdk.SlidingSyncListBuilder
|
import org.matrix.rustcomponents.sdk.SlidingSyncListBuilder
|
||||||
import org.matrix.rustcomponents.sdk.SlidingSyncMode
|
import org.matrix.rustcomponents.sdk.SlidingSyncMode
|
||||||
import org.matrix.rustcomponents.sdk.SlidingSyncRequestListFilters
|
import org.matrix.rustcomponents.sdk.SlidingSyncRequestListFilters
|
||||||
|
|
@ -55,6 +55,9 @@ import org.matrix.rustcomponents.sdk.use
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.concurrent.atomic.AtomicBoolean
|
import java.util.concurrent.atomic.AtomicBoolean
|
||||||
|
import org.matrix.rustcomponents.sdk.CreateRoomParameters as RustCreateRoomParameters
|
||||||
|
import org.matrix.rustcomponents.sdk.RoomPreset as RustRoomPreset
|
||||||
|
import org.matrix.rustcomponents.sdk.RoomVisibility as RustRoomVisibility
|
||||||
|
|
||||||
class RustMatrixClient constructor(
|
class RustMatrixClient constructor(
|
||||||
private val client: Client,
|
private val client: Client,
|
||||||
|
|
@ -175,24 +178,46 @@ class RustMatrixClient constructor(
|
||||||
return roomId?.let { getRoom(it) }
|
return roomId?.let { getRoom(it) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun createDM(userId: UserId): Result<RoomId> =
|
override suspend fun createRoom(createRoomParams: CreateRoomParameters): Result<RoomId> = withContext(dispatchers.io) {
|
||||||
withContext(dispatchers.io) {
|
runCatching {
|
||||||
runCatching {
|
val roomId = client.createRoom(
|
||||||
val roomId = client.createRoom(
|
RustCreateRoomParameters(
|
||||||
CreateRoomParameters(
|
name = createRoomParams.name,
|
||||||
name = null,
|
topic = createRoomParams.topic,
|
||||||
topic = null,
|
isEncrypted = createRoomParams.isEncrypted,
|
||||||
isEncrypted = true,
|
isDirect = createRoomParams.isDirect,
|
||||||
isDirect = true,
|
visibility = when (createRoomParams.visibility) {
|
||||||
visibility = RoomVisibility.PRIVATE,
|
RoomVisibility.PUBLIC -> RustRoomVisibility.PUBLIC
|
||||||
preset = RoomPreset.TRUSTED_PRIVATE_CHAT,
|
RoomVisibility.PRIVATE -> RustRoomVisibility.PRIVATE
|
||||||
invite = listOf(userId.value),
|
},
|
||||||
avatar = null,
|
preset = when (createRoomParams.preset) {
|
||||||
)
|
RoomPreset.PRIVATE_CHAT -> RustRoomPreset.PRIVATE_CHAT
|
||||||
|
RoomPreset.PUBLIC_CHAT -> RustRoomPreset.PUBLIC_CHAT
|
||||||
|
RoomPreset.TRUSTED_PRIVATE_CHAT -> RustRoomPreset.TRUSTED_PRIVATE_CHAT
|
||||||
|
},
|
||||||
|
invite = createRoomParams.invite?.map { it.value },
|
||||||
|
avatar = createRoomParams.avatar,
|
||||||
)
|
)
|
||||||
RoomId(roomId)
|
)
|
||||||
}
|
RoomId(roomId)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun createDM(userId: UserId): Result<RoomId> = withContext(dispatchers.io) {
|
||||||
|
runCatching {
|
||||||
|
val roomId = client.createRoom(
|
||||||
|
RustCreateRoomParameters(
|
||||||
|
name = null,
|
||||||
|
isEncrypted = true,
|
||||||
|
isDirect = true,
|
||||||
|
visibility = RustRoomVisibility.PRIVATE,
|
||||||
|
preset = RustRoomPreset.TRUSTED_PRIVATE_CHAT,
|
||||||
|
invite = listOf(userId.value),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
RoomId(roomId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun mediaResolver(): MediaResolver = mediaResolver
|
override fun mediaResolver(): MediaResolver = mediaResolver
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ 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.core.SessionId
|
import io.element.android.libraries.matrix.api.core.SessionId
|
||||||
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.createroom.CreateRoomParameters
|
||||||
import io.element.android.libraries.matrix.api.media.MediaResolver
|
import io.element.android.libraries.matrix.api.media.MediaResolver
|
||||||
import io.element.android.libraries.matrix.api.notification.NotificationService
|
import io.element.android.libraries.matrix.api.notification.NotificationService
|
||||||
import io.element.android.libraries.matrix.api.pusher.PushersService
|
import io.element.android.libraries.matrix.api.pusher.PushersService
|
||||||
|
|
@ -54,16 +55,21 @@ class FakeMatrixClient(
|
||||||
return FakeMatrixRoom(roomId)
|
return FakeMatrixRoom(roomId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun findDM(userId: UserId): MatrixRoom? {
|
||||||
|
return findDmResult
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun createRoom(createRoomParams: CreateRoomParameters): Result<RoomId> {
|
||||||
|
delay(100)
|
||||||
|
return Result.success(A_ROOM_ID)
|
||||||
|
}
|
||||||
|
|
||||||
override suspend fun createDM(userId: UserId): Result<RoomId> {
|
override suspend fun createDM(userId: UserId): Result<RoomId> {
|
||||||
delay(100)
|
delay(100)
|
||||||
createDmFailure?.let { throw it }
|
createDmFailure?.let { throw it }
|
||||||
return createDmResult
|
return createDmResult
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun findDM(userId: UserId): MatrixRoom? {
|
|
||||||
return findDmResult
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun startSync() = Unit
|
override fun startSync() = Unit
|
||||||
|
|
||||||
override fun stopSync() = Unit
|
override fun stopSync() = Unit
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue