Start DM - Fix first message not encrypted
This commit is contained in:
parent
72896f1c8a
commit
b14e3c61b3
@ -41,6 +41,7 @@ import org.matrix.android.sdk.api.session.room.send.SendState
|
|||||||
import org.matrix.android.sdk.api.session.sync.model.RoomSyncSummary
|
import org.matrix.android.sdk.api.session.sync.model.RoomSyncSummary
|
||||||
import org.matrix.android.sdk.api.session.user.UserService
|
import org.matrix.android.sdk.api.session.user.UserService
|
||||||
import org.matrix.android.sdk.api.session.user.model.User
|
import org.matrix.android.sdk.api.session.user.model.User
|
||||||
|
import org.matrix.android.sdk.internal.crypto.DefaultCryptoService
|
||||||
import org.matrix.android.sdk.internal.database.awaitNotEmptyResult
|
import org.matrix.android.sdk.internal.database.awaitNotEmptyResult
|
||||||
import org.matrix.android.sdk.internal.database.helper.addTimelineEvent
|
import org.matrix.android.sdk.internal.database.helper.addTimelineEvent
|
||||||
import org.matrix.android.sdk.internal.database.mapper.asDomain
|
import org.matrix.android.sdk.internal.database.mapper.asDomain
|
||||||
@ -77,6 +78,7 @@ internal class DefaultCreateLocalRoomTask @Inject constructor(
|
|||||||
@SessionDatabase private val realmConfiguration: RealmConfiguration,
|
@SessionDatabase private val realmConfiguration: RealmConfiguration,
|
||||||
private val createRoomBodyBuilder: CreateRoomBodyBuilder,
|
private val createRoomBodyBuilder: CreateRoomBodyBuilder,
|
||||||
private val userService: UserService,
|
private val userService: UserService,
|
||||||
|
private val cryptoService: DefaultCryptoService,
|
||||||
private val clock: Clock,
|
private val clock: Clock,
|
||||||
) : CreateLocalRoomTask {
|
) : CreateLocalRoomTask {
|
||||||
|
|
||||||
@ -169,6 +171,9 @@ internal class DefaultCreateLocalRoomTask @Inject constructor(
|
|||||||
roomMemberContentsByUser[event.stateKey] = event.getFixedRoomMemberContent()
|
roomMemberContentsByUser[event.stateKey] = event.getFixedRoomMemberContent()
|
||||||
roomMemberEventHandler.handle(realm, roomId, event, false)
|
roomMemberEventHandler.handle(realm, roomId, event, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Give info to crypto module
|
||||||
|
cryptoService.onStateEvent(roomId, event)
|
||||||
}
|
}
|
||||||
|
|
||||||
roomMemberContentsByUser.getOrPut(event.senderId) {
|
roomMemberContentsByUser.getOrPut(event.senderId) {
|
||||||
|
@ -22,6 +22,7 @@ import com.google.i18n.phonenumbers.NumberParseException
|
|||||||
import com.google.i18n.phonenumbers.PhoneNumberUtil
|
import com.google.i18n.phonenumbers.PhoneNumberUtil
|
||||||
import com.zhuinden.monarchy.Monarchy
|
import com.zhuinden.monarchy.Monarchy
|
||||||
import io.realm.Realm
|
import io.realm.Realm
|
||||||
|
import kotlinx.coroutines.TimeoutCancellationException
|
||||||
import org.matrix.android.sdk.api.extensions.ensurePrefix
|
import org.matrix.android.sdk.api.extensions.ensurePrefix
|
||||||
import org.matrix.android.sdk.api.query.QueryStringValue
|
import org.matrix.android.sdk.api.query.QueryStringValue
|
||||||
import org.matrix.android.sdk.api.session.events.model.Event
|
import org.matrix.android.sdk.api.session.events.model.Event
|
||||||
@ -29,6 +30,7 @@ import org.matrix.android.sdk.api.session.events.model.EventType
|
|||||||
import org.matrix.android.sdk.api.session.events.model.toContent
|
import org.matrix.android.sdk.api.session.events.model.toContent
|
||||||
import org.matrix.android.sdk.api.session.events.model.toModel
|
import org.matrix.android.sdk.api.session.events.model.toModel
|
||||||
import org.matrix.android.sdk.api.session.identity.ThreePid
|
import org.matrix.android.sdk.api.session.identity.ThreePid
|
||||||
|
import org.matrix.android.sdk.api.session.room.failure.CreateRoomFailure
|
||||||
import org.matrix.android.sdk.api.session.room.model.PowerLevelsContent
|
import org.matrix.android.sdk.api.session.room.model.PowerLevelsContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.RoomAliasesContent
|
import org.matrix.android.sdk.api.session.room.model.RoomAliasesContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.RoomAvatarContent
|
import org.matrix.android.sdk.api.session.room.model.RoomAvatarContent
|
||||||
@ -44,11 +46,15 @@ import org.matrix.android.sdk.api.session.room.model.create.CreateRoomParams
|
|||||||
import org.matrix.android.sdk.api.session.room.model.create.CreateRoomPreset
|
import org.matrix.android.sdk.api.session.room.model.create.CreateRoomPreset
|
||||||
import org.matrix.android.sdk.api.session.room.model.tombstone.RoomTombstoneContent
|
import org.matrix.android.sdk.api.session.room.model.tombstone.RoomTombstoneContent
|
||||||
import org.matrix.android.sdk.api.session.room.send.SendState
|
import org.matrix.android.sdk.api.session.room.send.SendState
|
||||||
|
import org.matrix.android.sdk.internal.database.awaitNotEmptyResult
|
||||||
import org.matrix.android.sdk.internal.database.mapper.asDomain
|
import org.matrix.android.sdk.internal.database.mapper.asDomain
|
||||||
import org.matrix.android.sdk.internal.database.mapper.toEntity
|
import org.matrix.android.sdk.internal.database.mapper.toEntity
|
||||||
import org.matrix.android.sdk.internal.database.model.CurrentStateEventEntity
|
import org.matrix.android.sdk.internal.database.model.CurrentStateEventEntity
|
||||||
import org.matrix.android.sdk.internal.database.model.EventEntity
|
import org.matrix.android.sdk.internal.database.model.EventEntity
|
||||||
|
import org.matrix.android.sdk.internal.database.model.EventEntityFields
|
||||||
import org.matrix.android.sdk.internal.database.model.EventInsertType
|
import org.matrix.android.sdk.internal.database.model.EventInsertType
|
||||||
|
import org.matrix.android.sdk.internal.database.model.RoomSummaryEntity
|
||||||
|
import org.matrix.android.sdk.internal.database.model.RoomSummaryEntityFields
|
||||||
import org.matrix.android.sdk.internal.database.query.copyToRealmOrIgnore
|
import org.matrix.android.sdk.internal.database.query.copyToRealmOrIgnore
|
||||||
import org.matrix.android.sdk.internal.database.query.getOrCreate
|
import org.matrix.android.sdk.internal.database.query.getOrCreate
|
||||||
import org.matrix.android.sdk.internal.database.query.where
|
import org.matrix.android.sdk.internal.database.query.where
|
||||||
@ -60,6 +66,7 @@ import org.matrix.android.sdk.internal.task.Task
|
|||||||
import org.matrix.android.sdk.internal.util.awaitTransaction
|
import org.matrix.android.sdk.internal.util.awaitTransaction
|
||||||
import org.matrix.android.sdk.internal.util.time.Clock
|
import org.matrix.android.sdk.internal.util.time.Clock
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
import java.util.concurrent.TimeUnit
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -81,8 +88,11 @@ internal class DefaultCreateRoomFromLocalRoomTask @Inject constructor(
|
|||||||
private val clock: Clock,
|
private val clock: Clock,
|
||||||
) : CreateRoomFromLocalRoomTask {
|
) : CreateRoomFromLocalRoomTask {
|
||||||
|
|
||||||
|
private val realmConfiguration
|
||||||
|
get() = monarchy.realmConfiguration
|
||||||
|
|
||||||
override suspend fun execute(params: CreateRoomFromLocalRoomTask.Params): String {
|
override suspend fun execute(params: CreateRoomFromLocalRoomTask.Params): String {
|
||||||
val replacementRoomId = stateEventDataSource.getStateEvent(params.localRoomId, EventType.STATE_ROOM_TOMBSTONE, QueryStringValue.NoCondition)
|
val replacementRoomId = stateEventDataSource.getStateEvent(params.localRoomId, EventType.STATE_ROOM_TOMBSTONE, QueryStringValue.IsEmpty)
|
||||||
?.content?.toModel<RoomTombstoneContent>()
|
?.content?.toModel<RoomTombstoneContent>()
|
||||||
?.replacementRoomId
|
?.replacementRoomId
|
||||||
|
|
||||||
@ -92,6 +102,30 @@ internal class DefaultCreateRoomFromLocalRoomTask @Inject constructor(
|
|||||||
|
|
||||||
val createRoomParams = getCreateRoomParams(params)
|
val createRoomParams = getCreateRoomParams(params)
|
||||||
val roomId = createRoomTask.execute(createRoomParams)
|
val roomId = createRoomTask.execute(createRoomParams)
|
||||||
|
|
||||||
|
try {
|
||||||
|
awaitNotEmptyResult(realmConfiguration, TimeUnit.MINUTES.toMillis(1L)) { realm ->
|
||||||
|
realm.where(RoomSummaryEntity::class.java)
|
||||||
|
.equalTo(RoomSummaryEntityFields.ROOM_ID, roomId)
|
||||||
|
.equalTo(
|
||||||
|
RoomSummaryEntityFields.INVITED_MEMBERS_COUNT,
|
||||||
|
createRoomParams.invitedUserIds.size.minus(1) + createRoomParams.invite3pids.size
|
||||||
|
)
|
||||||
|
}
|
||||||
|
awaitNotEmptyResult(realmConfiguration, TimeUnit.MINUTES.toMillis(1L)) { realm ->
|
||||||
|
EventEntity.whereRoomId(realm, roomId)
|
||||||
|
.equalTo(EventEntityFields.TYPE, EventType.STATE_ROOM_HISTORY_VISIBILITY)
|
||||||
|
}
|
||||||
|
if (createRoomParams.algorithm != null) {
|
||||||
|
awaitNotEmptyResult(realmConfiguration, TimeUnit.MINUTES.toMillis(1L)) { realm ->
|
||||||
|
EventEntity.whereRoomId(realm, roomId)
|
||||||
|
.equalTo(EventEntityFields.TYPE, EventType.STATE_ROOM_ENCRYPTION)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (exception: TimeoutCancellationException) {
|
||||||
|
throw CreateRoomFailure.CreatedWithTimeout(roomId)
|
||||||
|
}
|
||||||
|
|
||||||
createTombstoneEvent(params, roomId)
|
createTombstoneEvent(params, roomId)
|
||||||
return roomId
|
return roomId
|
||||||
}
|
}
|
||||||
|
@ -54,8 +54,7 @@ internal class DefaultCreateRoomTask @Inject constructor(
|
|||||||
private val directChatsHelper: DirectChatsHelper,
|
private val directChatsHelper: DirectChatsHelper,
|
||||||
private val updateUserAccountDataTask: UpdateUserAccountDataTask,
|
private val updateUserAccountDataTask: UpdateUserAccountDataTask,
|
||||||
private val readMarkersTask: SetReadMarkersTask,
|
private val readMarkersTask: SetReadMarkersTask,
|
||||||
@SessionDatabase
|
@SessionDatabase private val realmConfiguration: RealmConfiguration,
|
||||||
private val realmConfiguration: RealmConfiguration,
|
|
||||||
private val createRoomBodyBuilder: CreateRoomBodyBuilder,
|
private val createRoomBodyBuilder: CreateRoomBodyBuilder,
|
||||||
private val globalErrorReceiver: GlobalErrorReceiver,
|
private val globalErrorReceiver: GlobalErrorReceiver,
|
||||||
private val clock: Clock,
|
private val clock: Clock,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user