Add MatrixClient.getRoomPreview method.
This commit is contained in:
parent
0550da3e3b
commit
fb3d49cc2f
5 changed files with 102 additions and 0 deletions
|
|
@ -30,6 +30,7 @@ import io.element.android.libraries.matrix.api.pusher.PushersService
|
||||||
import io.element.android.libraries.matrix.api.room.MatrixRoom
|
import io.element.android.libraries.matrix.api.room.MatrixRoom
|
||||||
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.RoomMembershipObserver
|
import io.element.android.libraries.matrix.api.room.RoomMembershipObserver
|
||||||
|
import io.element.android.libraries.matrix.api.room.preview.RoomPreview
|
||||||
import io.element.android.libraries.matrix.api.roomdirectory.RoomDirectoryService
|
import io.element.android.libraries.matrix.api.roomdirectory.RoomDirectoryService
|
||||||
import io.element.android.libraries.matrix.api.roomlist.RoomListService
|
import io.element.android.libraries.matrix.api.roomlist.RoomListService
|
||||||
import io.element.android.libraries.matrix.api.sync.SyncService
|
import io.element.android.libraries.matrix.api.sync.SyncService
|
||||||
|
|
@ -99,4 +100,5 @@ interface MatrixClient : Closeable {
|
||||||
suspend fun trackRecentlyVisitedRoom(roomId: RoomId): Result<Unit>
|
suspend fun trackRecentlyVisitedRoom(roomId: RoomId): Result<Unit>
|
||||||
suspend fun getRecentlyVisitedRooms(): Result<List<RoomId>>
|
suspend fun getRecentlyVisitedRooms(): Result<List<RoomId>>
|
||||||
suspend fun resolveRoomAlias(roomAlias: String): Result<RoomId>
|
suspend fun resolveRoomAlias(roomAlias: String): Result<RoomId>
|
||||||
|
suspend fun getRoomPreview(roomIdOrAlias: String): Result<RoomPreview>
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,46 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2024 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.room.preview
|
||||||
|
|
||||||
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
|
|
||||||
|
data class RoomPreview(
|
||||||
|
/** The room id for this room. */
|
||||||
|
val roomId: RoomId,
|
||||||
|
/** The canonical alias for the room. */
|
||||||
|
val canonicalAlias: String?,
|
||||||
|
/** The room's name, if set. */
|
||||||
|
val name: String?,
|
||||||
|
/** The room's topic, if set. */
|
||||||
|
val topic: String?,
|
||||||
|
/** The MXC URI to the room's avatar, if set. */
|
||||||
|
val avatarUrl: String?,
|
||||||
|
/** The number of joined members. */
|
||||||
|
val numberOfJoinedMembers: Long,
|
||||||
|
/** The room type (space, custom) or nothing, if it's a regular room. */
|
||||||
|
val roomType: String?,
|
||||||
|
/** Is the history world-readable for this room? */
|
||||||
|
val isHistoryWorldReadable: Boolean,
|
||||||
|
/** Is the room joined by the current user? */
|
||||||
|
val isJoined: Boolean,
|
||||||
|
/** Is the current user invited to this room? */
|
||||||
|
val isInvited: Boolean,
|
||||||
|
/** is the join rule public for this room? */
|
||||||
|
val isPublic: Boolean,
|
||||||
|
/** Can we knock (or restricted-knock) to this room? */
|
||||||
|
val canKnock: Boolean,
|
||||||
|
)
|
||||||
|
|
@ -37,6 +37,7 @@ import io.element.android.libraries.matrix.api.pusher.PushersService
|
||||||
import io.element.android.libraries.matrix.api.room.MatrixRoom
|
import io.element.android.libraries.matrix.api.room.MatrixRoom
|
||||||
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.RoomMembershipObserver
|
import io.element.android.libraries.matrix.api.room.RoomMembershipObserver
|
||||||
|
import io.element.android.libraries.matrix.api.room.preview.RoomPreview
|
||||||
import io.element.android.libraries.matrix.api.roomdirectory.RoomDirectoryService
|
import io.element.android.libraries.matrix.api.roomdirectory.RoomDirectoryService
|
||||||
import io.element.android.libraries.matrix.api.roomlist.RoomListService
|
import io.element.android.libraries.matrix.api.roomlist.RoomListService
|
||||||
import io.element.android.libraries.matrix.api.roomlist.awaitLoaded
|
import io.element.android.libraries.matrix.api.roomlist.awaitLoaded
|
||||||
|
|
@ -58,6 +59,7 @@ import io.element.android.libraries.matrix.impl.room.RoomContentForwarder
|
||||||
import io.element.android.libraries.matrix.impl.room.RoomSyncSubscriber
|
import io.element.android.libraries.matrix.impl.room.RoomSyncSubscriber
|
||||||
import io.element.android.libraries.matrix.impl.room.RustMatrixRoom
|
import io.element.android.libraries.matrix.impl.room.RustMatrixRoom
|
||||||
import io.element.android.libraries.matrix.impl.room.map
|
import io.element.android.libraries.matrix.impl.room.map
|
||||||
|
import io.element.android.libraries.matrix.impl.room.preview.RoomPreviewMapper
|
||||||
import io.element.android.libraries.matrix.impl.roomdirectory.RustRoomDirectoryService
|
import io.element.android.libraries.matrix.impl.roomdirectory.RustRoomDirectoryService
|
||||||
import io.element.android.libraries.matrix.impl.roomlist.RoomListFactory
|
import io.element.android.libraries.matrix.impl.roomlist.RoomListFactory
|
||||||
import io.element.android.libraries.matrix.impl.roomlist.RustRoomListService
|
import io.element.android.libraries.matrix.impl.roomlist.RustRoomListService
|
||||||
|
|
@ -466,6 +468,12 @@ class RustMatrixClient(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override suspend fun getRoomPreview(roomIdOrAlias: String): Result<RoomPreview> = withContext(sessionDispatcher) {
|
||||||
|
runCatching {
|
||||||
|
client.getRoomPreview(roomIdOrAlias).let(RoomPreviewMapper::map)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun syncService(): SyncService = rustSyncService
|
override fun syncService(): SyncService = rustSyncService
|
||||||
|
|
||||||
override fun sessionVerificationService(): SessionVerificationService = verificationService
|
override fun sessionVerificationService(): SessionVerificationService = verificationService
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2024 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.impl.room.preview
|
||||||
|
|
||||||
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
|
import io.element.android.libraries.matrix.api.room.preview.RoomPreview
|
||||||
|
import org.matrix.rustcomponents.sdk.RoomPreview as RustRoomPreview
|
||||||
|
|
||||||
|
object RoomPreviewMapper {
|
||||||
|
fun map(roomPreview: RustRoomPreview): RoomPreview {
|
||||||
|
return RoomPreview(
|
||||||
|
roomId = RoomId(roomPreview.roomId),
|
||||||
|
canonicalAlias = roomPreview.canonicalAlias,
|
||||||
|
name = roomPreview.name,
|
||||||
|
topic = roomPreview.topic,
|
||||||
|
avatarUrl = roomPreview.avatarUrl,
|
||||||
|
numberOfJoinedMembers = roomPreview.numJoinedMembers.toLong(),
|
||||||
|
roomType = roomPreview.roomType,
|
||||||
|
isHistoryWorldReadable = roomPreview.isHistoryWorldReadable,
|
||||||
|
isJoined = roomPreview.isJoined,
|
||||||
|
isInvited = roomPreview.isInvited,
|
||||||
|
isPublic = roomPreview.isPublic,
|
||||||
|
canKnock = roomPreview.canKnock
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -31,6 +31,7 @@ import io.element.android.libraries.matrix.api.pusher.PushersService
|
||||||
import io.element.android.libraries.matrix.api.room.MatrixRoom
|
import io.element.android.libraries.matrix.api.room.MatrixRoom
|
||||||
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.RoomMembershipObserver
|
import io.element.android.libraries.matrix.api.room.RoomMembershipObserver
|
||||||
|
import io.element.android.libraries.matrix.api.room.preview.RoomPreview
|
||||||
import io.element.android.libraries.matrix.api.roomdirectory.RoomDirectoryService
|
import io.element.android.libraries.matrix.api.roomdirectory.RoomDirectoryService
|
||||||
import io.element.android.libraries.matrix.api.roomlist.RoomListService
|
import io.element.android.libraries.matrix.api.roomlist.RoomListService
|
||||||
import io.element.android.libraries.matrix.api.user.MatrixSearchUserResults
|
import io.element.android.libraries.matrix.api.user.MatrixSearchUserResults
|
||||||
|
|
@ -74,6 +75,7 @@ class FakeMatrixClient(
|
||||||
private val roomDirectoryService: RoomDirectoryService = FakeRoomDirectoryService(),
|
private val roomDirectoryService: RoomDirectoryService = FakeRoomDirectoryService(),
|
||||||
private val accountManagementUrlString: Result<String?> = Result.success(null),
|
private val accountManagementUrlString: Result<String?> = Result.success(null),
|
||||||
private val resolveRoomAliasResult: (String) -> Result<RoomId> = { Result.success(A_ROOM_ID) },
|
private val resolveRoomAliasResult: (String) -> Result<RoomId> = { Result.success(A_ROOM_ID) },
|
||||||
|
private val getRoomPreviewResult: (String) -> Result<RoomPreview> = { TODO("Not implemented") },
|
||||||
) : MatrixClient {
|
) : MatrixClient {
|
||||||
var setDisplayNameCalled: Boolean = false
|
var setDisplayNameCalled: Boolean = false
|
||||||
private set
|
private set
|
||||||
|
|
@ -281,6 +283,10 @@ class FakeMatrixClient(
|
||||||
return resolveRoomAliasResult(roomAlias)
|
return resolveRoomAliasResult(roomAlias)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override suspend fun getRoomPreview(roomIdOrAlias: String): Result<RoomPreview> {
|
||||||
|
return getRoomPreviewResult(roomIdOrAlias)
|
||||||
|
}
|
||||||
|
|
||||||
override suspend fun getRecentlyVisitedRooms(): Result<List<RoomId>> {
|
override suspend fun getRecentlyVisitedRooms(): Result<List<RoomId>> {
|
||||||
return Result.success(visitedRoomsId)
|
return Result.success(visitedRoomsId)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue