@@ -22,6 +22,7 @@ import kotlinx.coroutines.TimeoutCancellationException
22
22
import org.greenrobot.eventbus.EventBus
23
23
import org.matrix.android.sdk.api.failure.Failure
24
24
import org.matrix.android.sdk.api.failure.MatrixError
25
+ import org.matrix.android.sdk.api.session.room.alias.RoomAliasError
25
26
import org.matrix.android.sdk.api.session.room.failure.CreateRoomFailure
26
27
import org.matrix.android.sdk.api.session.room.model.create.CreateRoomParams
27
28
import org.matrix.android.sdk.api.session.room.model.create.CreateRoomPreset
@@ -31,11 +32,9 @@ import org.matrix.android.sdk.internal.database.model.RoomEntityFields
31
32
import org.matrix.android.sdk.internal.database.model.RoomSummaryEntity
32
33
import org.matrix.android.sdk.internal.database.query.where
33
34
import org.matrix.android.sdk.internal.di.SessionDatabase
34
- import org.matrix.android.sdk.internal.di.UserId
35
35
import org.matrix.android.sdk.internal.network.executeRequest
36
- import org.matrix.android.sdk.internal.session.directory.DirectoryAPI
37
36
import org.matrix.android.sdk.internal.session.room.RoomAPI
38
- import org.matrix.android.sdk.internal.session.room.alias.RoomAliasDescription
37
+ import org.matrix.android.sdk.internal.session.room.alias.RoomAliasAvailabilityChecker
39
38
import org.matrix.android.sdk.internal.session.room.read.SetReadMarkersTask
40
39
import org.matrix.android.sdk.internal.session.user.accountdata.DirectChatsHelper
41
40
import org.matrix.android.sdk.internal.session.user.accountdata.UpdateUserAccountDataTask
@@ -48,9 +47,8 @@ internal interface CreateRoomTask : Task<CreateRoomParams, String>
48
47
49
48
internal class DefaultCreateRoomTask @Inject constructor(
50
49
private val roomAPI : RoomAPI ,
51
- private val directoryAPI : DirectoryAPI ,
52
- @UserId private val userId : String ,
53
50
@SessionDatabase private val monarchy : Monarchy ,
51
+ private val aliasAvailabilityChecker : RoomAliasAvailabilityChecker ,
54
52
private val directChatsHelper : DirectChatsHelper ,
55
53
private val updateUserAccountDataTask : UpdateUserAccountDataTask ,
56
54
private val readMarkersTask : SetReadMarkersTask ,
@@ -67,28 +65,11 @@ internal class DefaultCreateRoomTask @Inject constructor(
67
65
} else null
68
66
69
67
if (params.preset == CreateRoomPreset .PRESET_PUBLIC_CHAT ) {
70
- if (params.roomAliasName.isNullOrEmpty()) {
71
- throw CreateRoomFailure .RoomAliasError .AliasEmpty
72
- }
73
- // Check alias availability
74
- val fullAlias = " #" + params.roomAliasName + " :" + userId.substringAfter(" :" )
75
68
try {
76
- executeRequest<RoomAliasDescription >(eventBus) {
77
- apiCall = directoryAPI.getRoomIdByAlias(fullAlias)
78
- }
79
- } catch (throwable: Throwable ) {
80
- if (throwable is Failure .ServerError && throwable.httpCode == 404 ) {
81
- // This is a 404, so the alias is available: nominal case
82
- null
83
- } else {
84
- // Other error, propagate it
85
- throw throwable
86
- }
69
+ aliasAvailabilityChecker.check(params.roomAliasName)
70
+ } catch (aliasError: RoomAliasError ) {
71
+ throw CreateRoomFailure .AliasError (aliasError)
87
72
}
88
- ?.let {
89
- // Alias already exists: error case
90
- throw CreateRoomFailure .RoomAliasError .AliasNotAvailable
91
- }
92
73
}
93
74
94
75
val createRoomBody = createRoomBodyBuilder.build(params)
@@ -106,7 +87,7 @@ internal class DefaultCreateRoomTask @Inject constructor(
106
87
} else if (throwable.httpCode == 400
107
88
&& throwable.error.code == MatrixError .M_UNKNOWN
108
89
&& throwable.error.message == " Invalid characters in room alias" ) {
109
- throw CreateRoomFailure .RoomAliasError .AliasInvalid
90
+ throw CreateRoomFailure .AliasError ( RoomAliasError .AliasInvalid )
110
91
}
111
92
}
112
93
throw throwable
0 commit comments