Create local events using local echo

This commit is contained in:
Florian Renaud 2022-07-04 18:00:30 +02:00
parent e89bb0eea7
commit 2b6bfc1ebc

View File

@ -24,6 +24,7 @@ import org.matrix.android.sdk.api.extensions.tryOrNull
import org.matrix.android.sdk.api.session.events.model.Content import org.matrix.android.sdk.api.session.events.model.Content
import org.matrix.android.sdk.api.session.events.model.Event import org.matrix.android.sdk.api.session.events.model.Event
import org.matrix.android.sdk.api.session.events.model.EventType import org.matrix.android.sdk.api.session.events.model.EventType
import org.matrix.android.sdk.api.session.events.model.LocalEcho
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.room.model.GuestAccess import org.matrix.android.sdk.api.session.room.model.GuestAccess
import org.matrix.android.sdk.api.session.room.model.Membership import org.matrix.android.sdk.api.session.room.model.Membership
@ -58,7 +59,6 @@ import org.matrix.android.sdk.internal.session.room.timeline.PaginationDirection
import org.matrix.android.sdk.internal.task.Task 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 javax.inject.Inject import javax.inject.Inject
internal interface CreateLocalRoomTask : Task<CreateRoomParams, String> internal interface CreateLocalRoomTask : Task<CreateRoomParams, String>
@ -185,13 +185,13 @@ internal class DefaultCreateLocalRoomTask @Inject constructor(
val invitedUsers = createRoomBody.invitedUserIds.orEmpty() val invitedUsers = createRoomBody.invitedUserIds.orEmpty()
.mapNotNull { tryOrNull { userService.resolveUser(it) } } .mapNotNull { tryOrNull { userService.resolveUser(it) } }
val createRoomEvent = createFakeEvent( val createRoomEvent = createLocalEvent(
type = EventType.STATE_ROOM_CREATE, type = EventType.STATE_ROOM_CREATE,
content = RoomCreateContent( content = RoomCreateContent(
creator = userId creator = userId
).toContent() ).toContent()
) )
val myRoomMemberEvent = createFakeEvent( val myRoomMemberEvent = createLocalEvent(
type = EventType.STATE_ROOM_MEMBER, type = EventType.STATE_ROOM_MEMBER,
content = RoomMemberContent( content = RoomMemberContent(
membership = Membership.JOIN, membership = Membership.JOIN,
@ -201,7 +201,7 @@ internal class DefaultCreateLocalRoomTask @Inject constructor(
stateKey = userId stateKey = userId
) )
val roomMemberEvents = invitedUsers.map { val roomMemberEvents = invitedUsers.map {
createFakeEvent( createLocalEvent(
type = EventType.STATE_ROOM_MEMBER, type = EventType.STATE_ROOM_MEMBER,
content = RoomMemberContent( content = RoomMemberContent(
isDirect = createRoomBody.isDirect.orFalse(), isDirect = createRoomBody.isDirect.orFalse(),
@ -216,7 +216,7 @@ internal class DefaultCreateLocalRoomTask @Inject constructor(
return buildList { return buildList {
add(createRoomEvent) add(createRoomEvent)
add(myRoomMemberEvent) add(myRoomMemberEvent)
addAll(createRoomBody.initialStates.orEmpty().map { createFakeEvent(it.type, it.content, it.stateKey) }) addAll(createRoomBody.initialStates.orEmpty().map { createLocalEvent(it.type, it.content, it.stateKey) })
addAll(roomMemberEvents) addAll(roomMemberEvents)
} }
} }
@ -230,14 +230,14 @@ internal class DefaultCreateLocalRoomTask @Inject constructor(
* *
* @return a fake event * @return a fake event
*/ */
private fun createFakeEvent(type: String?, content: Content?, stateKey: String? = ""): Event { private fun createLocalEvent(type: String?, content: Content?, stateKey: String? = ""): Event {
return Event( return Event(
type = type, type = type,
senderId = userId, senderId = userId,
stateKey = stateKey, stateKey = stateKey,
content = content, content = content,
originServerTs = clock.epochMillis(), originServerTs = clock.epochMillis(),
eventId = UUID.randomUUID().toString() eventId = LocalEcho.createLocalEchoId()
) )
} }