diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt index 0b3e828275..ba909a147b 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt @@ -42,7 +42,7 @@ import io.element.android.libraries.matrix.api.room.MatrixRoomInfo import io.element.android.libraries.matrix.api.room.RoomType import io.element.android.libraries.matrix.api.room.isDm import io.element.android.libraries.matrix.api.room.join.JoinRoom -import io.element.android.libraries.matrix.api.room.preview.RoomPreview +import io.element.android.libraries.matrix.api.room.preview.RoomPreviewInfo import io.element.android.libraries.matrix.ui.model.toInviteSender import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch @@ -96,10 +96,10 @@ class JoinRoomPresenter @AssistedInject constructor( } else -> { value = ContentState.Loading(roomIdOrAlias) - val result = matrixClient.getRoomPreview(roomIdOrAlias, serverNames) + val result = matrixClient.getRoomPreviewInfo(roomIdOrAlias, serverNames) value = result.fold( - onSuccess = { roomPreview -> - roomPreview.toContentState() + onSuccess = { previewInfo -> + previewInfo.toContentState() }, onFailure = { throwable -> if (throwable.message?.contains("403") == true) { @@ -184,7 +184,7 @@ class JoinRoomPresenter @AssistedInject constructor( } } -private fun RoomPreview.toContentState(): ContentState { +private fun RoomPreviewInfo.toContentState(): ContentState { return ContentState.Loaded( roomId = roomId, name = name, diff --git a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt index 48bf792447..30ea9c5f04 100644 --- a/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt +++ b/features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt @@ -26,7 +26,7 @@ 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.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.RoomType -import io.element.android.libraries.matrix.api.room.preview.RoomPreview +import io.element.android.libraries.matrix.api.room.preview.RoomPreviewInfo import io.element.android.libraries.matrix.test.AN_EXCEPTION import io.element.android.libraries.matrix.test.A_ROOM_ID import io.element.android.libraries.matrix.test.A_ROOM_NAME @@ -408,9 +408,9 @@ class JoinRoomPresenterTest { @Test fun `present - when room is not known RoomPreview is loaded`() = runTest { val client = FakeMatrixClient( - getRoomPreviewResult = { _, _ -> + getRoomPreviewInfoResult = { _, _ -> Result.success( - RoomPreview( + RoomPreviewInfo( roomId = A_ROOM_ID, canonicalAlias = RoomAlias("#alias:matrix.org"), name = "Room name", @@ -453,7 +453,7 @@ class JoinRoomPresenterTest { @Test fun `present - when room is not known RoomPreview is loaded with error`() = runTest { val client = FakeMatrixClient( - getRoomPreviewResult = { _, _ -> + getRoomPreviewInfoResult = { _, _ -> Result.failure(AN_EXCEPTION) } ) @@ -491,7 +491,7 @@ class JoinRoomPresenterTest { @Test fun `present - when room is not known RoomPreview is loaded with error 403`() = runTest { val client = FakeMatrixClient( - getRoomPreviewResult = { _, _ -> + getRoomPreviewInfoResult = { _, _ -> Result.failure(Exception("403")) } ) diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt index eca03afb0c..38b0edac82 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt @@ -26,7 +26,7 @@ import io.element.android.libraries.matrix.api.room.MatrixRoomInfo import io.element.android.libraries.matrix.api.room.PendingRoom import io.element.android.libraries.matrix.api.room.RoomMembershipObserver import io.element.android.libraries.matrix.api.room.alias.ResolvedRoomAlias -import io.element.android.libraries.matrix.api.room.preview.RoomPreview +import io.element.android.libraries.matrix.api.room.preview.RoomPreviewInfo 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.RoomSummary @@ -143,7 +143,7 @@ interface MatrixClient : Closeable { * Execute generic GET requests through the SDKs internal HTTP client. */ suspend fun getUrl(url: String): Result - suspend fun getRoomPreview(roomIdOrAlias: RoomIdOrAlias, serverNames: List): Result + suspend fun getRoomPreviewInfo(roomIdOrAlias: RoomIdOrAlias, serverNames: List): Result /** Returns `true` if the home server supports native sliding sync. */ suspend fun isNativeSlidingSyncSupported(): Boolean diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreview.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreviewInfo.kt similarity index 97% rename from libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreview.kt rename to libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreviewInfo.kt index 6f60dd4895..190354ea7d 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreview.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/preview/RoomPreviewInfo.kt @@ -11,7 +11,7 @@ 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.room.RoomType -data class RoomPreview( +data class RoomPreviewInfo( /** The room id for this room. */ val roomId: RoomId, /** The canonical alias for the room. */ diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt index dc852c900d..3c3498da48 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt @@ -37,7 +37,7 @@ import io.element.android.libraries.matrix.api.room.PendingRoom import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.RoomMembershipObserver import io.element.android.libraries.matrix.api.room.alias.ResolvedRoomAlias -import io.element.android.libraries.matrix.api.room.preview.RoomPreview +import io.element.android.libraries.matrix.api.room.preview.RoomPreviewInfo 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.RoomSummary @@ -57,7 +57,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.RustRoomFactory import io.element.android.libraries.matrix.impl.room.TimelineEventTypeFilterFactory -import io.element.android.libraries.matrix.impl.room.preview.RoomPreviewMapper +import io.element.android.libraries.matrix.impl.room.preview.RoomPreviewInfoMapper 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.RustRoomListService @@ -455,12 +455,14 @@ class RustMatrixClient( } } - override suspend fun getRoomPreview(roomIdOrAlias: RoomIdOrAlias, serverNames: List): Result = withContext(sessionDispatcher) { + override suspend fun getRoomPreviewInfo(roomIdOrAlias: RoomIdOrAlias, serverNames: List): Result = withContext(sessionDispatcher) { runCatching { when (roomIdOrAlias) { is RoomIdOrAlias.Alias -> client.getRoomPreviewFromRoomAlias(roomIdOrAlias.roomAlias.value) is RoomIdOrAlias.Id -> client.getRoomPreviewFromRoomId(roomIdOrAlias.roomId.value, serverNames) - }.let(RoomPreviewMapper::map) + }.use { roomPreview -> + RoomPreviewInfoMapper.map(roomPreview.info()) + } } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewInfoMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewInfoMapper.kt new file mode 100644 index 0000000000..a1031228a8 --- /dev/null +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewInfoMapper.kt @@ -0,0 +1,35 @@ +/* + * 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.preview + +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.room.preview.RoomPreviewInfo +import io.element.android.libraries.matrix.impl.room.toRoomType +import org.matrix.rustcomponents.sdk.JoinRule +import org.matrix.rustcomponents.sdk.Membership +import org.matrix.rustcomponents.sdk.RoomPreviewInfo as RustRoomPreviewInfo + +object RoomPreviewInfoMapper { + fun map(info: RustRoomPreviewInfo): RoomPreviewInfo { + return RoomPreviewInfo( + roomId = RoomId(info.roomId), + canonicalAlias = info.canonicalAlias?.let(::RoomAlias), + name = info.name, + topic = info.topic, + avatarUrl = info.avatarUrl, + numberOfJoinedMembers = info.numJoinedMembers.toLong(), + roomType = info.roomType.toRoomType(), + isHistoryWorldReadable = info.isHistoryWorldReadable, + isJoined = info.membership == Membership.JOINED, + isInvited = info.membership == Membership.INVITED, + isPublic = info.joinRule == JoinRule.Public, + canKnock = info.joinRule == JoinRule.Knock + ) + } +} diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt deleted file mode 100644 index b676d6909d..0000000000 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapper.kt +++ /dev/null @@ -1,38 +0,0 @@ -/* - * 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.preview - -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.room.preview.RoomPreview -import io.element.android.libraries.matrix.impl.room.toRoomType -import org.matrix.rustcomponents.sdk.JoinRule -import org.matrix.rustcomponents.sdk.Membership -import org.matrix.rustcomponents.sdk.RoomPreview as RustRoomPreview - -object RoomPreviewMapper { - fun map(roomPreview: RustRoomPreview): RoomPreview { - return roomPreview.use { - val info = roomPreview.info() - RoomPreview( - roomId = RoomId(info.roomId), - canonicalAlias = info.canonicalAlias?.let(::RoomAlias), - name = info.name, - topic = info.topic, - avatarUrl = info.avatarUrl, - numberOfJoinedMembers = info.numJoinedMembers.toLong(), - roomType = info.roomType.toRoomType(), - isHistoryWorldReadable = info.isHistoryWorldReadable, - isJoined = info.membership == Membership.JOINED, - isInvited = info.membership == Membership.INVITED, - isPublic = info.joinRule == JoinRule.Public, - canKnock = info.joinRule == JoinRule.Knock - ) - } - } -} diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeRustRoomPreview.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeRustRoomPreview.kt deleted file mode 100644 index fda57cd329..0000000000 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/fixtures/fakes/FakeRustRoomPreview.kt +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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.fixtures.fakes - -import io.element.android.libraries.matrix.impl.fixtures.factories.aRustRoomPreviewInfo -import org.matrix.rustcomponents.sdk.NoPointer -import org.matrix.rustcomponents.sdk.RoomPreview -import org.matrix.rustcomponents.sdk.RoomPreviewInfo - -class FakeRustRoomPreview( - private val info: RoomPreviewInfo = aRustRoomPreviewInfo(), -) : RoomPreview(NoPointer) { - override fun info(): RoomPreviewInfo { - return info - } -} diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapperTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewInfoMapperTest.kt similarity index 74% rename from libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapperTest.kt rename to libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewInfoMapperTest.kt index 1dc03bc49b..9bedf2ef18 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewMapperTest.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/room/preview/RoomPreviewInfoMapperTest.kt @@ -9,28 +9,25 @@ package io.element.android.libraries.matrix.impl.room.preview import com.google.common.truth.Truth.assertThat import io.element.android.libraries.matrix.api.room.RoomType -import io.element.android.libraries.matrix.api.room.preview.RoomPreview +import io.element.android.libraries.matrix.api.room.preview.RoomPreviewInfo import io.element.android.libraries.matrix.impl.fixtures.factories.aRustRoomPreviewInfo -import io.element.android.libraries.matrix.impl.fixtures.fakes.FakeRustRoomPreview import io.element.android.libraries.matrix.test.A_ROOM_ALIAS import io.element.android.libraries.matrix.test.A_ROOM_ID import org.junit.Test import org.matrix.rustcomponents.sdk.JoinRule import org.matrix.rustcomponents.sdk.Membership -class RoomPreviewMapperTest { +class RoomPreviewInfoMapperTest { @Test fun `map should map values 1`() { assertThat( - RoomPreviewMapper.map( - FakeRustRoomPreview( - info = aRustRoomPreviewInfo( - membership = null, - ) + RoomPreviewInfoMapper.map( + info = aRustRoomPreviewInfo( + membership = null, ) ) ).isEqualTo( - RoomPreview( + RoomPreviewInfo( roomId = A_ROOM_ID, canonicalAlias = A_ROOM_ALIAS, name = "name", @@ -50,17 +47,15 @@ class RoomPreviewMapperTest { @Test fun `map should map values 2`() { assertThat( - RoomPreviewMapper.map( - FakeRustRoomPreview( - info = aRustRoomPreviewInfo( - canonicalAlias = null, - membership = Membership.JOINED, - joinRule = JoinRule.Knock, - ) + RoomPreviewInfoMapper.map( + info = aRustRoomPreviewInfo( + canonicalAlias = null, + membership = Membership.JOINED, + joinRule = JoinRule.Knock, ) ) ).isEqualTo( - RoomPreview( + RoomPreviewInfo( roomId = A_ROOM_ID, canonicalAlias = null, name = "name", diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt index dd7869cdf7..e912fd2f40 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt @@ -26,7 +26,7 @@ import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.room.PendingRoom import io.element.android.libraries.matrix.api.room.RoomMembershipObserver import io.element.android.libraries.matrix.api.room.alias.ResolvedRoomAlias -import io.element.android.libraries.matrix.api.room.preview.RoomPreview +import io.element.android.libraries.matrix.api.room.preview.RoomPreviewInfo 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.RoomSummary @@ -78,7 +78,7 @@ class FakeMatrixClient( Optional.of(ResolvedRoomAlias(A_ROOM_ID, emptyList())) ) }, - private val getRoomPreviewResult: (RoomIdOrAlias, List) -> Result = { _, _ -> Result.failure(AN_EXCEPTION) }, + private val getRoomPreviewInfoResult: (RoomIdOrAlias, List) -> Result = { _, _ -> Result.failure(AN_EXCEPTION) }, private val clearCacheLambda: () -> Unit = { lambdaError() }, private val userIdServerNameLambda: () -> String = { lambdaError() }, private val getUrlLambda: (String) -> Result = { lambdaError() }, @@ -313,8 +313,8 @@ class FakeMatrixClient( resolveRoomAliasResult(roomAlias) } - override suspend fun getRoomPreview(roomIdOrAlias: RoomIdOrAlias, serverNames: List): Result = simulateLongTask { - getRoomPreviewResult(roomIdOrAlias, serverNames) + override suspend fun getRoomPreviewInfo(roomIdOrAlias: RoomIdOrAlias, serverNames: List): Result = simulateLongTask { + getRoomPreviewInfoResult(roomIdOrAlias, serverNames) } override suspend fun getRecentlyVisitedRooms(): Result> {