From ef29c4ba97331a48c6725a68daa48560b77dc19d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 29 Sep 2025 15:31:40 +0200 Subject: [PATCH] Remove code duplication around UserProfile mapper. --- .../incoming/IncomingVerificationStateProvider.kt | 5 +++-- .../incoming/IncomingVerificationPresenterTest.kt | 3 ++- .../SessionVerificationRequestDetails.kt | 13 +++---------- .../libraries/matrix/impl/RustMatrixClient.kt | 4 ++-- .../{usersearch => mapper}/UserProfileMapper.kt | 15 ++++++--------- .../impl/usersearch/UserSearchResultMapper.kt | 5 ++++- .../SessionVerificationRequestDetails.kt | 8 +------- 7 files changed, 21 insertions(+), 32 deletions(-) rename libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/{usersearch => mapper}/UserProfileMapper.kt (53%) diff --git a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/IncomingVerificationStateProvider.kt b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/IncomingVerificationStateProvider.kt index 0c8eda94e9..478e696889 100644 --- a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/IncomingVerificationStateProvider.kt +++ b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/IncomingVerificationStateProvider.kt @@ -14,6 +14,7 @@ import io.element.android.features.verifysession.impl.ui.aEmojisSessionVerificat import io.element.android.libraries.matrix.api.core.DeviceId import io.element.android.libraries.matrix.api.core.FlowId import io.element.android.libraries.matrix.api.core.UserId +import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.api.verification.SessionVerificationRequestDetails import io.element.android.libraries.matrix.api.verification.VerificationRequest @@ -55,7 +56,7 @@ internal fun aStepInitial( internal fun anIncomingSessionVerificationRequest() = VerificationRequest.Incoming.OtherSession( details = SessionVerificationRequestDetails( - senderProfile = SessionVerificationRequestDetails.SenderProfile( + senderProfile = MatrixUser( userId = UserId("@alice:example.com"), displayName = "Alice", avatarUrl = null, @@ -69,7 +70,7 @@ internal fun anIncomingSessionVerificationRequest() = VerificationRequest.Incomi internal fun anIncomingUserVerificationRequest() = VerificationRequest.Incoming.User( details = SessionVerificationRequestDetails( - senderProfile = SessionVerificationRequestDetails.SenderProfile( + senderProfile = MatrixUser( userId = UserId("@alice:example.com"), displayName = "Alice", avatarUrl = null, diff --git a/features/verifysession/impl/src/test/kotlin/io/element/android/features/verifysession/impl/incoming/IncomingVerificationPresenterTest.kt b/features/verifysession/impl/src/test/kotlin/io/element/android/features/verifysession/impl/incoming/IncomingVerificationPresenterTest.kt index 4bbbb496ea..2bf7116990 100644 --- a/features/verifysession/impl/src/test/kotlin/io/element/android/features/verifysession/impl/incoming/IncomingVerificationPresenterTest.kt +++ b/features/verifysession/impl/src/test/kotlin/io/element/android/features/verifysession/impl/incoming/IncomingVerificationPresenterTest.kt @@ -12,6 +12,7 @@ import io.element.android.features.verifysession.impl.ui.aEmojisSessionVerificat import io.element.android.libraries.dateformatter.api.DateFormatter import io.element.android.libraries.dateformatter.test.FakeDateFormatter import io.element.android.libraries.matrix.api.core.FlowId +import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.api.verification.SessionVerificationRequestDetails import io.element.android.libraries.matrix.api.verification.SessionVerificationService import io.element.android.libraries.matrix.api.verification.VerificationFlowState @@ -293,7 +294,7 @@ class IncomingVerificationPresenterTest { private val anIncomingSessionVerificationRequest = VerificationRequest.Incoming.OtherSession( details = SessionVerificationRequestDetails( - senderProfile = SessionVerificationRequestDetails.SenderProfile( + senderProfile = MatrixUser( userId = A_USER_ID, displayName = "a user name", avatarUrl = null, diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/verification/SessionVerificationRequestDetails.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/verification/SessionVerificationRequestDetails.kt index 168cba70bf..edf8c6ff78 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/verification/SessionVerificationRequestDetails.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/verification/SessionVerificationRequestDetails.kt @@ -10,21 +10,14 @@ package io.element.android.libraries.matrix.api.verification import android.os.Parcelable import io.element.android.libraries.matrix.api.core.DeviceId import io.element.android.libraries.matrix.api.core.FlowId -import io.element.android.libraries.matrix.api.core.UserId +import io.element.android.libraries.matrix.api.user.MatrixUser import kotlinx.parcelize.Parcelize @Parcelize data class SessionVerificationRequestDetails( - val senderProfile: SenderProfile, + val senderProfile: MatrixUser, val flowId: FlowId, val deviceId: DeviceId, val deviceDisplayName: String?, val firstSeenTimestamp: Long, -) : Parcelable { - @Parcelize - data class SenderProfile( - val userId: UserId, - val displayName: String?, - val avatarUrl: String?, - ) : Parcelable -} +) : Parcelable 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 79d17746ef..3f84621cb7 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 @@ -51,6 +51,7 @@ import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.api.verification.SessionVerificationService import io.element.android.libraries.matrix.impl.encryption.RustEncryptionService import io.element.android.libraries.matrix.impl.exception.mapClientException +import io.element.android.libraries.matrix.impl.mapper.map import io.element.android.libraries.matrix.impl.media.RustMediaLoader import io.element.android.libraries.matrix.impl.media.RustMediaPreviewService import io.element.android.libraries.matrix.impl.notification.RustNotificationService @@ -75,7 +76,6 @@ import io.element.android.libraries.matrix.impl.roomlist.roomOrNull import io.element.android.libraries.matrix.impl.spaces.RustSpaceService import io.element.android.libraries.matrix.impl.sync.RustSyncService import io.element.android.libraries.matrix.impl.sync.map -import io.element.android.libraries.matrix.impl.usersearch.UserProfileMapper import io.element.android.libraries.matrix.impl.usersearch.UserSearchResultMapper import io.element.android.libraries.matrix.impl.util.SessionPathsProvider import io.element.android.libraries.matrix.impl.util.cancelAndDestroy @@ -403,7 +403,7 @@ class RustMatrixClient( override suspend fun getProfile(userId: UserId): Result = withContext(sessionDispatcher) { runCatchingExceptions { - innerClient.getProfile(userId.value).let(UserProfileMapper::map) + innerClient.getProfile(userId.value).map() } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/usersearch/UserProfileMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/mapper/UserProfileMapper.kt similarity index 53% rename from libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/usersearch/UserProfileMapper.kt rename to libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/mapper/UserProfileMapper.kt index f8f842c4be..6cc338610b 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/usersearch/UserProfileMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/mapper/UserProfileMapper.kt @@ -5,17 +5,14 @@ * Please see LICENSE files in the repository root for full details. */ -package io.element.android.libraries.matrix.impl.usersearch +package io.element.android.libraries.matrix.impl.mapper import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.user.MatrixUser import org.matrix.rustcomponents.sdk.UserProfile -object UserProfileMapper { - fun map(userProfile: UserProfile): MatrixUser = - MatrixUser( - userId = UserId(userProfile.userId), - displayName = userProfile.displayName, - avatarUrl = userProfile.avatarUrl, - ) -} +fun UserProfile.map() = MatrixUser( + userId = UserId(userId), + displayName = displayName, + avatarUrl = avatarUrl, +) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/usersearch/UserSearchResultMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/usersearch/UserSearchResultMapper.kt index 5b2e8fa9a2..172f3c4cb0 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/usersearch/UserSearchResultMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/usersearch/UserSearchResultMapper.kt @@ -8,13 +8,16 @@ package io.element.android.libraries.matrix.impl.usersearch import io.element.android.libraries.matrix.api.user.MatrixSearchUserResults +import io.element.android.libraries.matrix.impl.mapper.map import kotlinx.collections.immutable.toImmutableList import org.matrix.rustcomponents.sdk.SearchUsersResults object UserSearchResultMapper { fun map(result: SearchUsersResults): MatrixSearchUserResults { return MatrixSearchUserResults( - results = result.results.map(UserProfileMapper::map).toImmutableList(), + results = result.results + .map { userProfile -> userProfile.map() } + .toImmutableList(), limited = result.limited, ) } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/verification/SessionVerificationRequestDetails.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/verification/SessionVerificationRequestDetails.kt index cda6961b63..cd398fbfc1 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/verification/SessionVerificationRequestDetails.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/verification/SessionVerificationRequestDetails.kt @@ -12,8 +12,8 @@ import io.element.android.libraries.matrix.api.core.FlowId import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.verification.SessionVerificationRequestDetails import io.element.android.libraries.matrix.api.verification.VerificationRequest +import io.element.android.libraries.matrix.impl.mapper.map import org.matrix.rustcomponents.sdk.SessionVerificationRequestDetails as RustSessionVerificationRequestDetails -import org.matrix.rustcomponents.sdk.UserProfile as RustUserProfile fun RustSessionVerificationRequestDetails.map() = SessionVerificationRequestDetails( senderProfile = senderProfile.map(), @@ -23,12 +23,6 @@ fun RustSessionVerificationRequestDetails.map() = SessionVerificationRequestDeta firstSeenTimestamp = firstSeenTimestamp.toLong(), ) -fun RustUserProfile.map() = SessionVerificationRequestDetails.SenderProfile( - userId = UserId(userId), - displayName = displayName, - avatarUrl = avatarUrl, -) - fun RustSessionVerificationRequestDetails.toVerificationRequest(currentUserId: UserId): VerificationRequest.Incoming { val details = map() return if (currentUserId == details.senderProfile.userId) {