Remove roomCreatorUserId and use current userId by default

This commit is contained in:
Florian Renaud 2022-08-25 14:16:20 +02:00
parent 90d688c222
commit eab4ebc3b1
3 changed files with 22 additions and 27 deletions

View File

@ -48,6 +48,7 @@ import org.matrix.android.sdk.api.session.room.model.redactOrDefault
import org.matrix.android.sdk.api.session.room.model.stateDefaultOrDefault import org.matrix.android.sdk.api.session.room.model.stateDefaultOrDefault
import org.matrix.android.sdk.api.session.room.model.usersDefaultOrDefault import org.matrix.android.sdk.api.session.room.model.usersDefaultOrDefault
import org.matrix.android.sdk.api.session.user.UserService import org.matrix.android.sdk.api.session.user.UserService
import org.matrix.android.sdk.internal.di.UserId
import org.matrix.android.sdk.internal.session.room.create.CreateLocalRoomStateEventsTask.Params import org.matrix.android.sdk.internal.session.room.create.CreateLocalRoomStateEventsTask.Params
import org.matrix.android.sdk.internal.session.room.membership.threepid.toThreePid import org.matrix.android.sdk.internal.session.room.membership.threepid.toThreePid
import org.matrix.android.sdk.internal.task.Task import org.matrix.android.sdk.internal.task.Task
@ -62,29 +63,25 @@ import javax.inject.Inject
* Ref: https://spec.matrix.org/latest/client-server-api/#post_matrixclientv3createroom * Ref: https://spec.matrix.org/latest/client-server-api/#post_matrixclientv3createroom
*/ */
internal interface CreateLocalRoomStateEventsTask : Task<Params, List<Event>> { internal interface CreateLocalRoomStateEventsTask : Task<Params, List<Event>> {
data class Params( data class Params(val createRoomBody: CreateRoomBody)
val roomCreatorUserId: String,
val createRoomBody: CreateRoomBody
)
} }
internal class DefaultCreateLocalRoomStateEventsTask @Inject constructor( internal class DefaultCreateLocalRoomStateEventsTask @Inject constructor(
@UserId private val myUserId: String,
private val userService: UserService, private val userService: UserService,
private val clock: Clock, private val clock: Clock,
) : CreateLocalRoomStateEventsTask { ) : CreateLocalRoomStateEventsTask {
private lateinit var createRoomBody: CreateRoomBody private lateinit var createRoomBody: CreateRoomBody
private lateinit var roomCreatorUserId: String
override suspend fun execute(params: Params): List<Event> { override suspend fun execute(params: Params): List<Event> {
createRoomBody = params.createRoomBody createRoomBody = params.createRoomBody
roomCreatorUserId = params.roomCreatorUserId
// Build the list of the state events following the priorities from the matrix specification // Build the list of the state events following the priorities from the matrix specification
// Changing the order of the events might break the correct display of the room on the client side // Changing the order of the events might break the correct display of the room on the client side
return buildList { return buildList {
createRoomCreateEvent() createRoomCreateEvent()
createRoomMemberEvents(listOf(roomCreatorUserId)) createRoomMemberEvents(listOf(myUserId))
createRoomPowerLevelsEvent() createRoomPowerLevelsEvent()
createRoomAliasEvent() createRoomAliasEvent()
createRoomPresetEvents() createRoomPresetEvents()
@ -103,7 +100,7 @@ internal class DefaultCreateLocalRoomStateEventsTask @Inject constructor(
val roomCreateEvent = createLocalStateEvent( val roomCreateEvent = createLocalStateEvent(
type = EventType.STATE_ROOM_CREATE, type = EventType.STATE_ROOM_CREATE,
content = RoomCreateContent( content = RoomCreateContent(
creator = roomCreatorUserId, creator = myUserId,
roomVersion = createRoomBody.roomVersion, roomVersion = createRoomBody.roomVersion,
type = (createRoomBody.creationContent as? Map<*, *>)?.get(CreateRoomParams.CREATION_CONTENT_KEY_ROOM_TYPE) as? String type = (createRoomBody.creationContent as? Map<*, *>)?.get(CreateRoomParams.CREATION_CONTENT_KEY_ROOM_TYPE) as? String
@ -144,8 +141,8 @@ internal class DefaultCreateLocalRoomStateEventsTask @Inject constructor(
createLocalStateEvent( createLocalStateEvent(
type = EventType.STATE_ROOM_MEMBER, type = EventType.STATE_ROOM_MEMBER,
content = RoomMemberContent( content = RoomMemberContent(
isDirect = createRoomBody.isDirect.takeUnless { user.userId == roomCreatorUserId }.orFalse(), isDirect = createRoomBody.isDirect.takeUnless { user.userId == myUserId }.orFalse(),
membership = if (user.userId == roomCreatorUserId) Membership.JOIN else Membership.INVITE, membership = if (user.userId == myUserId) Membership.JOIN else Membership.INVITE,
displayName = user.displayName, displayName = user.displayName,
avatarUrl = user.avatarUrl avatarUrl = user.avatarUrl
).toContent(), ).toContent(),
@ -186,7 +183,7 @@ internal class DefaultCreateLocalRoomStateEventsTask @Inject constructor(
val canonicalAliasContent = createLocalStateEvent( val canonicalAliasContent = createLocalStateEvent(
type = EventType.STATE_ROOM_CANONICAL_ALIAS, type = EventType.STATE_ROOM_CANONICAL_ALIAS,
content = RoomCanonicalAliasContent( content = RoomCanonicalAliasContent(
canonicalAlias = "${createRoomBody.roomAliasName}:${roomCreatorUserId.getServerName()}" canonicalAlias = "${createRoomBody.roomAliasName}:${myUserId.getServerName()}"
).toContent(), ).toContent(),
) )
add(canonicalAliasContent) add(canonicalAliasContent)
@ -287,7 +284,7 @@ internal class DefaultCreateLocalRoomStateEventsTask @Inject constructor(
private fun createLocalStateEvent(type: String?, content: Content?, stateKey: String? = ""): Event { private fun createLocalStateEvent(type: String?, content: Content?, stateKey: String? = ""): Event {
return Event( return Event(
type = type, type = type,
senderId = roomCreatorUserId, senderId = myUserId,
stateKey = stateKey, stateKey = stateKey,
content = content, content = content,
originServerTs = clock.epochMillis(), originServerTs = clock.epochMillis(),

View File

@ -46,7 +46,6 @@ 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.getOrNull import org.matrix.android.sdk.internal.database.query.getOrNull
import org.matrix.android.sdk.internal.di.SessionDatabase import org.matrix.android.sdk.internal.di.SessionDatabase
import org.matrix.android.sdk.internal.di.UserId
import org.matrix.android.sdk.internal.session.events.getFixedRoomMemberContent import org.matrix.android.sdk.internal.session.events.getFixedRoomMemberContent
import org.matrix.android.sdk.internal.session.room.membership.RoomMemberEventHandler import org.matrix.android.sdk.internal.session.room.membership.RoomMemberEventHandler
import org.matrix.android.sdk.internal.session.room.summary.RoomSummaryUpdater import org.matrix.android.sdk.internal.session.room.summary.RoomSummaryUpdater
@ -60,7 +59,6 @@ import javax.inject.Inject
internal interface CreateLocalRoomTask : Task<CreateRoomParams, String> internal interface CreateLocalRoomTask : Task<CreateRoomParams, String>
internal class DefaultCreateLocalRoomTask @Inject constructor( internal class DefaultCreateLocalRoomTask @Inject constructor(
@UserId private val myUserId: String,
@SessionDatabase private val monarchy: Monarchy, @SessionDatabase private val monarchy: Monarchy,
private val roomMemberEventHandler: RoomMemberEventHandler, private val roomMemberEventHandler: RoomMemberEventHandler,
private val roomSummaryUpdater: RoomSummaryUpdater, private val roomSummaryUpdater: RoomSummaryUpdater,
@ -156,7 +154,7 @@ internal class DefaultCreateLocalRoomTask @Inject constructor(
isLastForward = true isLastForward = true
} }
val eventList = createLocalRoomStateEventsTask.execute(CreateLocalRoomStateEventsTask.Params(myUserId, createRoomBody)) val eventList = createLocalRoomStateEventsTask.execute(CreateLocalRoomStateEventsTask.Params(createRoomBody))
val roomMemberContentsByUser = HashMap<String, RoomMemberContent?>() val roomMemberContentsByUser = HashMap<String, RoomMemberContent?>()
for (event in eventList) { for (event in eventList) {

View File

@ -71,6 +71,7 @@ internal class DefaultCreateLocalRoomStateEventsTaskTest {
private val userService = mockk<UserService>() private val userService = mockk<UserService>()
private val defaultCreateLocalRoomStateEventsTask = DefaultCreateLocalRoomStateEventsTask( private val defaultCreateLocalRoomStateEventsTask = DefaultCreateLocalRoomStateEventsTask(
myUserId = MY_USER_ID,
userService = userService, userService = userService,
clock = clock clock = clock
) )
@ -103,20 +104,19 @@ internal class DefaultCreateLocalRoomStateEventsTaskTest {
@Test @Test
fun `given a CreateRoomBody when execute then the resulting list of events contains the correct room create state event`() = runTest { fun `given a CreateRoomBody when execute then the resulting list of events contains the correct room create state event`() = runTest {
// Given // Given
val aRoomCreator = MY_USER_ID
val aRoomVersion = "a_room_version" val aRoomVersion = "a_room_version"
every { createRoomBody.roomVersion } returns aRoomVersion every { createRoomBody.roomVersion } returns aRoomVersion
// When // When
val params = CreateLocalRoomStateEventsTask.Params(aRoomCreator, createRoomBody) val params = CreateLocalRoomStateEventsTask.Params(createRoomBody)
val result = defaultCreateLocalRoomStateEventsTask.execute(params) val result = defaultCreateLocalRoomStateEventsTask.execute(params)
// Then // Then
val roomCreateEvent = result.find { it.type == EventType.STATE_ROOM_CREATE } val roomCreateEvent = result.find { it.type == EventType.STATE_ROOM_CREATE }
val roomCreateContent = roomCreateEvent?.content.toModel<RoomCreateContent>() val roomCreateContent = roomCreateEvent?.content.toModel<RoomCreateContent>()
roomCreateContent?.creator shouldBeEqualTo aRoomCreator roomCreateContent?.creator shouldBeEqualTo MY_USER_ID
roomCreateContent?.roomVersion shouldBeEqualTo aRoomVersion roomCreateContent?.roomVersion shouldBeEqualTo aRoomVersion
} }
@ -130,7 +130,7 @@ internal class DefaultCreateLocalRoomStateEventsTaskTest {
every { createRoomBody.topic } returns aRoomTopic every { createRoomBody.topic } returns aRoomTopic
// When // When
val params = CreateLocalRoomStateEventsTask.Params(MY_USER_ID, createRoomBody) val params = CreateLocalRoomStateEventsTask.Params(createRoomBody)
val result = defaultCreateLocalRoomStateEventsTask.execute(params) val result = defaultCreateLocalRoomStateEventsTask.execute(params)
// Then // Then
@ -158,7 +158,7 @@ internal class DefaultCreateLocalRoomStateEventsTaskTest {
} }
// When // When
val params = CreateLocalRoomStateEventsTask.Params(MY_USER_ID, createRoomBody) val params = CreateLocalRoomStateEventsTask.Params(createRoomBody)
val result = defaultCreateLocalRoomStateEventsTask.execute(params) val result = defaultCreateLocalRoomStateEventsTask.execute(params)
// Then // Then
@ -195,7 +195,7 @@ internal class DefaultCreateLocalRoomStateEventsTaskTest {
every { createRoomBody.powerLevelContentOverride } returns aPowerLevelsContent every { createRoomBody.powerLevelContentOverride } returns aPowerLevelsContent
// When // When
val params = CreateLocalRoomStateEventsTask.Params(MY_USER_ID, createRoomBody) val params = CreateLocalRoomStateEventsTask.Params(createRoomBody)
val result = defaultCreateLocalRoomStateEventsTask.execute(params) val result = defaultCreateLocalRoomStateEventsTask.execute(params)
// Then // Then
@ -212,7 +212,7 @@ internal class DefaultCreateLocalRoomStateEventsTaskTest {
every { createRoomBody.roomAliasName } returns aRoomAlias every { createRoomBody.roomAliasName } returns aRoomAlias
// When // When
val params = CreateLocalRoomStateEventsTask.Params(MY_USER_ID, createRoomBody) val params = CreateLocalRoomStateEventsTask.Params(createRoomBody)
val result = defaultCreateLocalRoomStateEventsTask.execute(params) val result = defaultCreateLocalRoomStateEventsTask.execute(params)
// Then // Then
@ -244,7 +244,7 @@ internal class DefaultCreateLocalRoomStateEventsTaskTest {
every { createRoomBody.preset } returns case.preset every { createRoomBody.preset } returns case.preset
// When // When
val params = CreateLocalRoomStateEventsTask.Params(MY_USER_ID, createRoomBody) val params = CreateLocalRoomStateEventsTask.Params(createRoomBody)
val result = defaultCreateLocalRoomStateEventsTask.execute(params) val result = defaultCreateLocalRoomStateEventsTask.execute(params)
// Then // Then
@ -284,7 +284,7 @@ internal class DefaultCreateLocalRoomStateEventsTaskTest {
every { createRoomBody.initialStates } returns aListOfInitialStateEvents every { createRoomBody.initialStates } returns aListOfInitialStateEvents
// When // When
val params = CreateLocalRoomStateEventsTask.Params(MY_USER_ID, createRoomBody) val params = CreateLocalRoomStateEventsTask.Params(createRoomBody)
val result = defaultCreateLocalRoomStateEventsTask.execute(params) val result = defaultCreateLocalRoomStateEventsTask.execute(params)
// Then // Then
@ -319,7 +319,7 @@ internal class DefaultCreateLocalRoomStateEventsTaskTest {
every { createRoomBody.invite3pids } returns aListOf3pids every { createRoomBody.invite3pids } returns aListOf3pids
// When // When
val params = CreateLocalRoomStateEventsTask.Params(MY_USER_ID, createRoomBody) val params = CreateLocalRoomStateEventsTask.Params(createRoomBody)
val result = defaultCreateLocalRoomStateEventsTask.execute(params) val result = defaultCreateLocalRoomStateEventsTask.execute(params)
// Then // Then
@ -358,7 +358,7 @@ internal class DefaultCreateLocalRoomStateEventsTaskTest {
} }
// When // When
val params = CreateLocalRoomStateEventsTask.Params(MY_USER_ID, createRoomBody) val params = CreateLocalRoomStateEventsTask.Params(createRoomBody)
val result = defaultCreateLocalRoomStateEventsTask.execute(params) val result = defaultCreateLocalRoomStateEventsTask.execute(params)
// Then // Then
@ -447,7 +447,7 @@ internal class DefaultCreateLocalRoomStateEventsTaskTest {
) )
// When // When
val params = CreateLocalRoomStateEventsTask.Params(MY_USER_ID, createRoomBody) val params = CreateLocalRoomStateEventsTask.Params(createRoomBody)
val result = defaultCreateLocalRoomStateEventsTask.execute(params) val result = defaultCreateLocalRoomStateEventsTask.execute(params)
// Then // Then