mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2025-01-23 07:40:20 +01:00
Fail first (before creating the room) when trying to create a DM without at least one invitee
This commit is contained in:
parent
a6150beed2
commit
c6c8ef07a6
@ -18,6 +18,9 @@
|
||||
package org.matrix.android.sdk.internal.session.room.create
|
||||
|
||||
import com.zhuinden.monarchy.Monarchy
|
||||
import io.realm.RealmConfiguration
|
||||
import kotlinx.coroutines.TimeoutCancellationException
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import org.matrix.android.sdk.api.session.room.failure.CreateRoomFailure
|
||||
import org.matrix.android.sdk.api.session.room.model.create.CreateRoomParams
|
||||
import org.matrix.android.sdk.api.session.room.model.create.CreateRoomPreset
|
||||
@ -34,9 +37,6 @@ import org.matrix.android.sdk.internal.session.user.accountdata.DirectChatsHelpe
|
||||
import org.matrix.android.sdk.internal.session.user.accountdata.UpdateUserAccountDataTask
|
||||
import org.matrix.android.sdk.internal.task.Task
|
||||
import org.matrix.android.sdk.internal.util.awaitTransaction
|
||||
import io.realm.RealmConfiguration
|
||||
import kotlinx.coroutines.TimeoutCancellationException
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import java.util.concurrent.TimeUnit
|
||||
import javax.inject.Inject
|
||||
|
||||
@ -55,6 +55,11 @@ internal class DefaultCreateRoomTask @Inject constructor(
|
||||
) : CreateRoomTask {
|
||||
|
||||
override suspend fun execute(params: CreateRoomParams): String {
|
||||
val otherUserId = if (params.isDirect()) {
|
||||
params.getFirstInvitedUserId()
|
||||
?: throw IllegalStateException("You can't create a direct room without an invitedUser")
|
||||
} else null
|
||||
|
||||
val createRoomBody = createRoomBodyBuilder.build(params)
|
||||
|
||||
val createRoomResponse = executeRequest<CreateRoomResponse>(eventBus) {
|
||||
@ -70,17 +75,14 @@ internal class DefaultCreateRoomTask @Inject constructor(
|
||||
} catch (exception: TimeoutCancellationException) {
|
||||
throw CreateRoomFailure.CreatedWithTimeout
|
||||
}
|
||||
if (params.isDirect()) {
|
||||
handleDirectChatCreation(params, roomId)
|
||||
if (otherUserId != null) {
|
||||
handleDirectChatCreation(roomId, otherUserId)
|
||||
}
|
||||
setReadMarkers(roomId)
|
||||
return roomId
|
||||
}
|
||||
|
||||
private suspend fun handleDirectChatCreation(params: CreateRoomParams, roomId: String) {
|
||||
val otherUserId = params.getFirstInvitedUserId()
|
||||
?: throw IllegalStateException("You can't create a direct room without an invitedUser")
|
||||
|
||||
private suspend fun handleDirectChatCreation(roomId: String, otherUserId: String) {
|
||||
monarchy.awaitTransaction { realm ->
|
||||
RoomSummaryEntity.where(realm, roomId).findFirst()?.apply {
|
||||
this.directUserId = otherUserId
|
||||
|
Loading…
Reference in New Issue
Block a user