Fix thread-safety and dispatcher consistency in user status stubs

This commit is contained in:
ganfra
2026-06-12 14:56:41 +02:00
parent 42966b393f
commit 1640adcf9d
2 changed files with 7 additions and 7 deletions
@@ -260,7 +260,7 @@ class RustMatrixClient(
private var clientDelegateTaskHandle: TaskHandle? = innerClient.setDelegate(sessionDelegate)
private var localUserStatus: UserStatus? = null
@Volatile private var localUserStatus: UserStatus? = null
private val _userProfile: MutableStateFlow<MatrixUser> = MutableStateFlow(
MatrixUser(
@@ -482,7 +482,7 @@ class RustMatrixClient(
runCatchingExceptions { innerClient.removeAvatar() }
}
override suspend fun setUserStatus(status: UserStatus): Result<Unit> {
override suspend fun setUserStatus(status: UserStatus): Result<Unit> = withContext(sessionDispatcher) {
localUserStatus = status
_userProfile.emit(
_userProfile.value.copy(
@@ -490,10 +490,10 @@ class RustMatrixClient(
displayedStatus = DisplayedStatus.UserSet(status),
)
)
return Result.success(Unit)
Result.success(Unit)
}
override suspend fun clearUserStatus(): Result<Unit> {
override suspend fun clearUserStatus(): Result<Unit> = withContext(sessionDispatcher) {
localUserStatus = null
_userProfile.emit(
_userProfile.value.copy(
@@ -501,7 +501,7 @@ class RustMatrixClient(
displayedStatus = null,
)
)
return Result.success(Unit)
Result.success(Unit)
}
override suspend fun joinRoom(roomId: RoomId): Result<RoomInfo?> = withContext(sessionDispatcher) {
@@ -258,7 +258,7 @@ class FakeMatrixClient(
return removeAvatarResult
}
override suspend fun setUserStatus(status: UserStatus): Result<Unit> {
override suspend fun setUserStatus(status: UserStatus): Result<Unit> = simulateLongTask {
setUserStatusCalled = true
if (setUserStatusResult.isSuccess) {
_userProfile.emit(_userProfile.value.copy(
@@ -269,7 +269,7 @@ class FakeMatrixClient(
return setUserStatusResult
}
override suspend fun clearUserStatus(): Result<Unit> {
override suspend fun clearUserStatus(): Result<Unit> = simulateLongTask {
clearUserStatusCalled = true
if (clearUserStatusResult.isSuccess) {
_userProfile.emit(_userProfile.value.copy(