From c135f5a3b9db000388923ea7d5d607a053e23de0 Mon Sep 17 00:00:00 2001 From: ganfra Date: Fri, 18 Oct 2024 20:58:39 +0200 Subject: [PATCH] knock : add knock function to the matrix client --- .../libraries/matrix/api/MatrixClient.kt | 2 +- .../libraries/matrix/impl/RustMatrixClient.kt | 20 +++++++++++++------ .../libraries/matrix/test/FakeMatrixClient.kt | 6 +++--- 3 files changed, 18 insertions(+), 10 deletions(-) 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 d021f9733d..adf8fa960b 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 @@ -65,7 +65,7 @@ interface MatrixClient : Closeable { suspend fun removeAvatar(): Result suspend fun joinRoom(roomId: RoomId): Result suspend fun joinRoomByIdOrAlias(roomIdOrAlias: RoomIdOrAlias, serverNames: List): Result - suspend fun knockRoom(roomId: RoomId): Result + suspend fun knockRoom(roomId: RoomId): Result fun syncService(): SyncService fun sessionVerificationService(): SessionVerificationService fun pushersService(): PushersService 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 02f7f3d71d..328be9608b 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 @@ -270,7 +270,7 @@ class RustMatrixClient( return withTimeout(timeout) { getRoomSummaryFlow(roomIdOrAlias) .mapNotNull { optionalRoomSummary -> optionalRoomSummary.getOrNull() } - .filter { roomSummary -> roomSummary.info.currentUserMembership == CurrentUserMembership.JOINED } + .filter { roomSummary -> roomSummary.info.currentUserMembership == currentUserMembership } .first() // Ensure that the room is ready .also { client.awaitRoomRemoteEcho(it.roomId.value) } @@ -316,7 +316,7 @@ class RustMatrixClient( val roomId = RoomId(client.createRoom(rustParams)) // Wait to receive the room back from the sync but do not returns failure if it fails. try { - awaitJoinedRoom(roomId.toRoomIdOrAlias(), 30.seconds) + awaitRoom(roomId.toRoomIdOrAlias(), 30.seconds, CurrentUserMembership.JOINED) } catch (e: Exception) { Timber.e(e, "Timeout waiting for the room to be available in the room list") } @@ -371,7 +371,7 @@ class RustMatrixClient( runCatching { client.joinRoomById(roomId.value).destroy() try { - awaitJoinedRoom(roomId.toRoomIdOrAlias(), 10.seconds) + awaitRoom(roomId.toRoomIdOrAlias(), 10.seconds, CurrentUserMembership.JOINED) } catch (e: Exception) { Timber.e(e, "Timeout waiting for the room to be available in the room list") null @@ -386,7 +386,7 @@ class RustMatrixClient( serverNames = serverNames, ).destroy() try { - awaitJoinedRoom(roomIdOrAlias, 10.seconds) + awaitRoom(roomIdOrAlias, 10.seconds, CurrentUserMembership.JOINED) } catch (e: Exception) { Timber.e(e, "Timeout waiting for the room to be available in the room list") null @@ -394,8 +394,16 @@ class RustMatrixClient( } } - override suspend fun knockRoom(roomId: RoomId): Result { - return Result.failure(NotImplementedError("Not yet implemented")) + override suspend fun knockRoom(roomId: RoomId): Result = withContext(sessionDispatcher){ + runCatching { + client.knock(roomId.toRoomIdOrAlias().identifier).destroy() + try { + awaitRoom(roomId.toRoomIdOrAlias(), 10.seconds, CurrentUserMembership.KNOCKED) + } catch (e: Exception) { + Timber.e(e, "Timeout waiting for the room to be available in the room list") + null + } + } } override suspend fun trackRecentlyVisitedRoom(roomId: RoomId): Result = withContext(sessionDispatcher) { 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 b71fb6b668..69c0cc00b6 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 @@ -114,8 +114,8 @@ class FakeMatrixClient( var joinRoomByIdOrAliasLambda: (RoomIdOrAlias, List) -> Result = { _, _ -> Result.success(null) } - var knockRoomLambda: (RoomId) -> Result = { - Result.success(Unit) + var knockRoomLambda: (RoomId) -> Result = { + Result.success(null) } var getRoomSummaryFlowLambda = { _: RoomIdOrAlias -> flowOf>(Optional.empty()) @@ -223,7 +223,7 @@ class FakeMatrixClient( return joinRoomByIdOrAliasLambda(roomIdOrAlias, serverNames) } - override suspend fun knockRoom(roomId: RoomId): Result = knockRoomLambda(roomId) + override suspend fun knockRoom(roomId: RoomId): Result = knockRoomLambda(roomId) override fun sessionVerificationService(): SessionVerificationService = sessionVerificationService