Skip to content

Commit eac74bd

Browse files
author
Florian Renaud
committed
Improve nullability check in CreateRoomFromLocalRoomTask
1 parent 3f88811 commit eac74bd

File tree

1 file changed

+30
-15
lines changed

1 file changed

+30
-15
lines changed

matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/create/CreateRoomFromLocalRoomTask.kt

+30-15
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ import kotlinx.coroutines.TimeoutCancellationException
2121
import org.matrix.android.sdk.api.session.events.model.EventType
2222
import org.matrix.android.sdk.api.session.room.failure.CreateRoomFailure
2323
import org.matrix.android.sdk.api.session.room.model.LocalRoomCreationState
24-
import org.matrix.android.sdk.api.session.room.model.LocalRoomSummary
2524
import org.matrix.android.sdk.api.session.room.model.RoomSummary
25+
import org.matrix.android.sdk.api.session.room.model.create.CreateRoomParams
2626
import org.matrix.android.sdk.internal.database.awaitNotEmptyResult
2727
import org.matrix.android.sdk.internal.database.model.EventEntity
2828
import org.matrix.android.sdk.internal.database.model.EventEntityFields
@@ -57,56 +57,71 @@ internal class DefaultCreateRoomFromLocalRoomTask @Inject constructor(
5757

5858
override suspend fun execute(params: CreateRoomFromLocalRoomTask.Params): String {
5959
val localRoomSummary = roomSummaryDataSource.getLocalRoomSummary(params.localRoomId)
60-
?.takeIf { it.createRoomParams != null && it.roomSummary != null }
61-
?: error("Invalid LocalRoomSummary for ${params.localRoomId}")
60+
?: error("## CreateRoomFromLocalRoomTask - Cannot retrieve LocalRoomSummary with roomId ${params.localRoomId}")
6261

6362
// If a room has already been created for the given local room, return the existing roomId
6463
if (localRoomSummary.replacementRoomId != null) {
6564
return localRoomSummary.replacementRoomId
6665
}
6766

68-
return createRoom(localRoomSummary)
67+
if (localRoomSummary.createRoomParams != null && localRoomSummary.roomSummary != null) {
68+
return createRoom(params.localRoomId, localRoomSummary.roomSummary, localRoomSummary.createRoomParams)
69+
} else {
70+
error("## CreateRoomFromLocalRoomTask - Invalid LocalRoomSummary: $localRoomSummary")
71+
}
6972
}
7073

71-
private suspend fun createRoom(localRoomSummary: LocalRoomSummary): String {
72-
updateCreationState(localRoomSummary.roomId, LocalRoomCreationState.CREATING)
74+
/**
75+
* Create a room on the server for the given local room.
76+
*
77+
* @param localRoomId the local room identifier.
78+
* @param localRoomSummary the RoomSummary of the local room.
79+
* @param createRoomParams the CreateRoomParams object which was used to configure the local room.
80+
*
81+
* @return the identifier of the created room.
82+
*/
83+
private suspend fun createRoom(localRoomId: String, localRoomSummary: RoomSummary, createRoomParams: CreateRoomParams): String {
84+
updateCreationState(localRoomId, LocalRoomCreationState.CREATING)
7385
val replacementRoomId = runCatching {
74-
createRoomTask.execute(localRoomSummary.createRoomParams!!)
86+
createRoomTask.execute(createRoomParams)
7587
}.fold(
7688
{ it },
7789
{
78-
updateCreationState(roomId = localRoomSummary.roomId, LocalRoomCreationState.FAILURE)
90+
updateCreationState(localRoomId, LocalRoomCreationState.FAILURE)
7991
throw it
8092
}
8193
)
82-
updateReplacementRoomId(localRoomSummary.roomId, replacementRoomId)
83-
waitForRoomEvents(replacementRoomId, localRoomSummary.roomSummary!!)
84-
updateCreationState(localRoomSummary.roomId, LocalRoomCreationState.CREATED)
94+
updateReplacementRoomId(localRoomId, replacementRoomId)
95+
waitForRoomEvents(replacementRoomId, localRoomSummary)
96+
updateCreationState(localRoomId, LocalRoomCreationState.CREATED)
8597
return replacementRoomId
8698
}
8799

88100
/**
89101
* Wait for all the room events before triggering the created state.
102+
*
103+
* @param replacementRoomId the identifier of the created room
104+
* @param localRoomSummary the RoomSummary of the local room.
90105
*/
91-
private suspend fun waitForRoomEvents(replacementRoomId: String, roomSummary: RoomSummary) {
106+
private suspend fun waitForRoomEvents(replacementRoomId: String, localRoomSummary: RoomSummary) {
92107
try {
93108
awaitNotEmptyResult(realmConfiguration, TimeUnit.MINUTES.toMillis(1L)) { realm ->
94109
realm.where(RoomSummaryEntity::class.java)
95110
.equalTo(RoomSummaryEntityFields.ROOM_ID, replacementRoomId)
96-
.equalTo(RoomSummaryEntityFields.INVITED_MEMBERS_COUNT, roomSummary.invitedMembersCount)
111+
.equalTo(RoomSummaryEntityFields.INVITED_MEMBERS_COUNT, localRoomSummary.invitedMembersCount)
97112
}
98113
awaitNotEmptyResult(realmConfiguration, TimeUnit.MINUTES.toMillis(1L)) { realm ->
99114
EventEntity.whereRoomId(realm, replacementRoomId)
100115
.equalTo(EventEntityFields.TYPE, EventType.STATE_ROOM_HISTORY_VISIBILITY)
101116
}
102-
if (roomSummary.isEncrypted) {
117+
if (localRoomSummary.isEncrypted) {
103118
awaitNotEmptyResult(realmConfiguration, TimeUnit.MINUTES.toMillis(1L)) { realm ->
104119
EventEntity.whereRoomId(realm, replacementRoomId)
105120
.equalTo(EventEntityFields.TYPE, EventType.STATE_ROOM_ENCRYPTION)
106121
}
107122
}
108123
} catch (exception: TimeoutCancellationException) {
109-
updateCreationState(roomSummary.roomId, LocalRoomCreationState.FAILURE)
124+
updateCreationState(localRoomSummary.roomId, LocalRoomCreationState.FAILURE)
110125
throw CreateRoomFailure.CreatedWithTimeout(replacementRoomId)
111126
}
112127
}

0 commit comments

Comments
 (0)