From f3c1eb6738166fd2b0f5cae15e27e8c3e16277bc Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 6 Feb 2024 16:04:44 +0100 Subject: [PATCH] Use the new setIsFavorite api --- .../impl/DefaultSetRoomIsFavoriteAction.kt | 16 ++++++---------- .../DefaultSetRoomIsFavoriteActionTests.kt | 2 +- .../libraries/matrix/api/room/MatrixRoom.kt | 2 +- .../matrix/api/room/tags/RoomNotableTags.kt | 2 ++ .../matrix/impl/room/RustMatrixRoom.kt | 9 ++------- .../impl/room/tags/RoomNotableTagsMapper.kt | 6 ++++-- .../matrix/test/room/FakeMatrixRoom.kt | 18 ++++++++++++------ 7 files changed, 28 insertions(+), 27 deletions(-) diff --git a/features/roomactions/impl/src/main/kotlin/io/element/android/features/roomactions/impl/DefaultSetRoomIsFavoriteAction.kt b/features/roomactions/impl/src/main/kotlin/io/element/android/features/roomactions/impl/DefaultSetRoomIsFavoriteAction.kt index 947c56ebcb..dab51fa884 100644 --- a/features/roomactions/impl/src/main/kotlin/io/element/android/features/roomactions/impl/DefaultSetRoomIsFavoriteAction.kt +++ b/features/roomactions/impl/src/main/kotlin/io/element/android/features/roomactions/impl/DefaultSetRoomIsFavoriteAction.kt @@ -22,25 +22,20 @@ import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.room.MatrixRoom -import kotlinx.coroutines.flow.first import javax.inject.Inject import kotlin.coroutines.cancellation.CancellationException @ContributesBinding(SessionScope::class) class DefaultSetRoomIsFavoriteAction @Inject constructor(private val client: MatrixClient) : SetRoomIsFavoriteAction { + override suspend operator fun invoke(roomId: RoomId, isFavorite: Boolean): SetRoomIsFavoriteAction.Result { - return client.getRoom(roomId).use { room -> - room?.setIsFavorite(isFavorite) ?: SetRoomIsFavoriteAction.Result.RoomNotFound - } + return client.getRoom(roomId)?.use { room -> + invoke(room, isFavorite) + } ?: SetRoomIsFavoriteAction.Result.RoomNotFound } override suspend fun invoke(room: MatrixRoom, isFavorite: Boolean): SetRoomIsFavoriteAction.Result { - return room.setIsFavorite(isFavorite) - } - - private suspend fun MatrixRoom.setIsFavorite(isFavorite: Boolean): SetRoomIsFavoriteAction.Result { - val notableTags = notableTagsFlow.first().copy(isFavorite = isFavorite) - return updateNotableTags(notableTags).fold( + return room.setIsFavorite(isFavorite).fold( onSuccess = { SetRoomIsFavoriteAction.Result.Success }, @@ -53,4 +48,5 @@ class DefaultSetRoomIsFavoriteAction @Inject constructor(private val client: Mat } ) } + } diff --git a/features/roomactions/impl/src/test/kotlin/io/element/android/features/roomactions/impl/DefaultSetRoomIsFavoriteActionTests.kt b/features/roomactions/impl/src/test/kotlin/io/element/android/features/roomactions/impl/DefaultSetRoomIsFavoriteActionTests.kt index 93c7518cd7..0dd25d35ac 100644 --- a/features/roomactions/impl/src/test/kotlin/io/element/android/features/roomactions/impl/DefaultSetRoomIsFavoriteActionTests.kt +++ b/features/roomactions/impl/src/test/kotlin/io/element/android/features/roomactions/impl/DefaultSetRoomIsFavoriteActionTests.kt @@ -52,7 +52,7 @@ class DefaultSetRoomIsFavoriteActionTests { @Test fun `given a room, when action is invoked and fail, then it returns Result_Exception`() = runTest { val action = DefaultSetRoomIsFavoriteAction(FakeMatrixClient()) - room.givenUpdateNotableTagsResult(Result.failure(Exception())) + room.givenSetIsFavoriteResult(Result.failure(Exception())) val result = action(room, true) assert(result is SetRoomIsFavoriteAction.Result.Exception) } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt index 7c40d37155..762121a8fe 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/MatrixRoom.kt @@ -156,7 +156,7 @@ interface MatrixRoom : Closeable { suspend fun reportContent(eventId: EventId, reason: String, blockUserId: UserId?): Result - suspend fun updateNotableTags(notableTags: RoomNotableTags): Result + suspend fun setIsFavorite(isFavorite: Boolean): Result /** * Share a location message in the room. diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/tags/RoomNotableTags.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/tags/RoomNotableTags.kt index aabd6fc4f0..6d12749657 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/tags/RoomNotableTags.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/tags/RoomNotableTags.kt @@ -19,7 +19,9 @@ package io.element.android.libraries.matrix.api.room.tags /** * Represents the notable tags of a room. * @param isFavorite true if the room is marked as favorite. + * @param isLowPriority true if the room is marked as low priority. */ data class RoomNotableTags( val isFavorite: Boolean = false, + val isLowPriority: Boolean = false, ) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt index d9bd6bfa96..bf67064f2a 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RustMatrixRoom.kt @@ -435,14 +435,9 @@ class RustMatrixRoom( } } - override suspend fun updateNotableTags(notableTags: RoomNotableTags): Result = withContext(roomDispatcher) { + override suspend fun setIsFavorite(isFavorite: Boolean): Result = withContext(roomDispatcher) { runCatching { - Timber.i("Update notable tags with : $notableTags") - innerRoom.updateNotableTags(notableTags.map()) - }.onFailure { - Timber.w("Failed to update notable tags: $it") - }.onSuccess { - Timber.i("Successfully updated notable tags") + innerRoom.setIsFavorite(isFavorite, null) } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/tags/RoomNotableTagsMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/tags/RoomNotableTagsMapper.kt index 36fe0eb98e..cd779d24a7 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/tags/RoomNotableTagsMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/tags/RoomNotableTagsMapper.kt @@ -20,9 +20,11 @@ import io.element.android.libraries.matrix.api.room.tags.RoomNotableTags import uniffi.matrix_sdk_base.RoomNotableTags as RustRoomNotableTags fun RustRoomNotableTags.map() = RoomNotableTags( - isFavorite = isFavorite + isFavorite = isFavorite, + isLowPriority = isLowPriority ) fun RoomNotableTags.map() = RustRoomNotableTags( - isFavorite = isFavorite + isFavorite = isFavorite, + isLowPriority = isLowPriority ) diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt index c5d1f88a81..b0b77761d8 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/room/FakeMatrixRoom.kt @@ -114,7 +114,7 @@ class FakeMatrixRoom( private var getWidgetDriverResult: Result = Result.success(FakeWidgetDriver()) private var canUserTriggerRoomNotificationResult: Result = Result.success(true) private var canUserJoinCallResult: Result = Result.success(true) - private var updateNotableTagsResult = Result.success(Unit) + private var setIsFavoriteResult = Result.success(Unit) var sendMessageMentions = emptyList() val editMessageCalls = mutableListOf>() private val _typingRecord = mutableListOf() @@ -171,7 +171,7 @@ class FakeMatrixRoom( private val _roomInfoFlow: MutableSharedFlow = MutableSharedFlow(replay = 1) override val roomInfoFlow: Flow = _roomInfoFlow - private val _notableTagsFlow: MutableSharedFlow = MutableStateFlow(aRoomNotableTags()) + private val _notableTagsFlow: MutableStateFlow = MutableStateFlow(aRoomNotableTags()) override val notableTagsFlow: Flow = _notableTagsFlow override val membersStateFlow: MutableStateFlow = MutableStateFlow(MatrixRoomMembersState.Unknown) @@ -379,9 +379,15 @@ class FakeMatrixRoom( return reportContentResult } - override suspend fun updateNotableTags(notableTags: RoomNotableTags): Result { - return updateNotableTagsResult.also { result -> + override suspend fun setIsFavorite(isFavorite: Boolean): Result { + return setIsFavoriteResult.also { result -> if (result.isSuccess) { + val lowPriority = if (isFavorite) { + false + } else { + _notableTagsFlow.value.isLowPriority + } + val notableTags = RoomNotableTags(isFavorite, lowPriority) _notableTagsFlow.emit(notableTags) } } @@ -584,8 +590,8 @@ class FakeMatrixRoom( getWidgetDriverResult = result } - fun givenUpdateNotableTagsResult(result: Result) { - updateNotableTagsResult = result + fun givenSetIsFavoriteResult(result: Result) { + setIsFavoriteResult = result } fun givenRoomInfo(roomInfo: MatrixRoomInfo) {