fix: Make Client.findDM return a Result (#4816)

This commit is contained in:
Jorge Martin Espinosa 2025-06-04 10:41:26 +02:00 committed by GitHub
parent fa2ac28166
commit 07af7cc643
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 44 additions and 22 deletions

View file

@ -55,7 +55,7 @@ interface MatrixClient {
val ignoredUsersFlow: StateFlow<ImmutableList<UserId>>
suspend fun getJoinedRoom(roomId: RoomId): JoinedRoom?
suspend fun getRoom(roomId: RoomId): BaseRoom?
suspend fun findDM(userId: UserId): RoomId?
suspend fun findDM(userId: UserId): Result<RoomId?>
suspend fun ignoreUser(userId: UserId): Result<Unit>
suspend fun unignoreUser(userId: UserId): Result<Unit>
suspend fun createRoom(createRoomParams: CreateRoomParameters): Result<RoomId>

View file

@ -18,17 +18,24 @@ suspend fun MatrixClient.startDM(
userId: UserId,
createIfDmDoesNotExist: Boolean,
): StartDMResult {
val existingDM = findDM(userId)
return if (existingDM != null) {
StartDMResult.Success(existingDM, isNew = false)
} else if (createIfDmDoesNotExist) {
createDM(userId).fold(
{ StartDMResult.Success(it, isNew = true) },
{ StartDMResult.Failure(it) }
return findDM(userId)
.fold(
onSuccess = { existingDM ->
if (existingDM != null) {
StartDMResult.Success(existingDM, isNew = false)
} else if (createIfDmDoesNotExist) {
createDM(userId).fold(
{ StartDMResult.Success(it, isNew = true) },
{ StartDMResult.Failure(it) }
)
} else {
StartDMResult.DmDoesNotExist
}
},
onFailure = { error ->
StartDMResult.Failure(error)
}
)
} else {
StartDMResult.DmDoesNotExist
}
}
sealed interface StartDMResult {