Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -212,4 +212,11 @@ interface JoinedRoom : BaseRoom {
* @return Result indicating success or failure.
*/
suspend fun sendLiveLocation(geoUri: String): Result<Unit>

/**
* Sets the display name of the current user within this room.
* This is different from the global setDisplayName which updates
* the user's display name across all of their rooms.
*/
suspend fun setOwnMemberDisplayName(displayName: String): Result<Unit>
}
Original file line number Diff line number Diff line change
Expand Up @@ -546,6 +546,12 @@ class JoinedRustRoom(
}
}

override suspend fun setOwnMemberDisplayName(displayName: String): Result<Unit> = withContext(roomDispatcher) {
runCatchingExceptions {
innerRoom.setOwnMemberDisplayName(displayName)
}
}

override fun close() = destroy()

override fun destroy() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ class FakeJoinedRoom(
private val startLiveLocationShareResult: (Long) -> Result<EventId> = { lambdaError() },
private val stopLiveLocationShareResult: () -> Result<Unit> = { lambdaError() },
private val sendLiveLocationResult: (String) -> Result<Unit> = { lambdaError() },
private val setOwnMemberDisplayNameResult: (String) -> Result<Unit> = { lambdaError() },
) : JoinedRoom, BaseRoom by baseRoom {
private val sendQueueUpdates = MutableSharedFlow<SendQueueUpdate>(extraBufferCapacity = 10)

Expand Down Expand Up @@ -255,6 +256,10 @@ class FakeJoinedRoom(
sendLiveLocationResult(geoUri)
}

override suspend fun setOwnMemberDisplayName(displayName: String): Result<Unit> = simulateLongTask {
setOwnMemberDisplayNameResult(displayName)
}

private suspend fun simulateSendMediaProgress(progressCallback: ProgressCallback?) {
progressCallbackValues.forEach { (current, total) ->
progressCallback?.onProgress(current, total)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ enum class Command(
parameters = "<display-name>",
description = R.string.slash_command_description_nick_for_room,
isAllowedInThread = false,
isSupported = false,
isSupported = true,
),
ROOM_AVATAR(
command = "/roomavatar",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ class CommandExecutor(
is SlashCommand.ChangeAvatar -> changeAvatar()
is SlashCommand.ChangeAvatarForRoom -> changeAvatarForRoom()
is SlashCommand.ChangeDisplayName -> changeDisplayName(slashCommand)
is SlashCommand.ChangeDisplayNameForRoom -> changeDisplayNameForRoom()
is SlashCommand.ChangeDisplayNameForRoom -> changeDisplayNameForRoom(slashCommand)
is SlashCommand.ChangeRoomAvatar -> changeRoomAvatar()
is SlashCommand.ChangeRoomName -> changeRoomName(slashCommand)
is SlashCommand.ChangeTopic -> changeTopic(slashCommand)
Expand Down Expand Up @@ -171,8 +171,8 @@ class CommandExecutor(
return Result.failure(Exception("Not yet implemented"))
}

private fun changeDisplayNameForRoom(): Result<Unit> {
return Result.failure(Exception("Not yet implemented"))
private suspend fun changeDisplayNameForRoom(slashCommand: SlashCommand.ChangeDisplayNameForRoom): Result<Unit> {
return joinedRoom.setOwnMemberDisplayName(slashCommand.displayName)
}

private suspend fun changeDisplayName(slashCommand: SlashCommand.ChangeDisplayName): Result<Unit> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import io.element.android.libraries.matrix.api.timeline.MsgType
import io.element.android.libraries.matrix.test.AN_AVATAR_URL
import io.element.android.libraries.matrix.test.A_MESSAGE
import io.element.android.libraries.matrix.test.A_USER_ID
import io.element.android.libraries.matrix.test.A_USER_NAME
import io.element.android.libraries.matrix.test.FakeMatrixClient
import io.element.android.libraries.matrix.test.room.FakeBaseRoom
import io.element.android.libraries.matrix.test.room.FakeJoinedRoom
Expand Down Expand Up @@ -185,10 +184,18 @@ class CommandExecutorTest {
}

@Test
fun `change display name for room is not supported`() = runTest {
val sut = createCommandExecutor()
val res = sut.proceedAdmin(SlashCommand.ChangeDisplayNameForRoom(A_USER_NAME))
assertThat(res.isFailure).isTrue()
fun `change display name for room delegates to joined room`() = runTest {
var capturedDisplayName: String? = null
val joinedRoom = FakeJoinedRoom(
setOwnMemberDisplayNameResult = { displayName ->
capturedDisplayName = displayName
Result.success(Unit)
}
)
val sut = createCommandExecutor(joinedRoom = joinedRoom)
val res = sut.proceedAdmin(SlashCommand.ChangeDisplayNameForRoom("room nick"))
assertThat(res.isSuccess).isTrue()
assertThat(capturedDisplayName).isEqualTo("room nick")
}

@Test
Expand Down
Loading