Let SpaceRoom be stable the proper way.

This commit is contained in:
Benoit Marty 2025-10-08 16:42:48 +02:00
parent 4dd9c9ab73
commit 9dd6f7be68
3 changed files with 9 additions and 8 deletions

View file

@ -7,15 +7,14 @@
package io.element.android.libraries.matrix.api.spaces package io.element.android.libraries.matrix.api.spaces
import androidx.compose.runtime.Immutable
import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomAlias
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.room.CurrentUserMembership
import io.element.android.libraries.matrix.api.room.RoomType import io.element.android.libraries.matrix.api.room.RoomType
import io.element.android.libraries.matrix.api.room.join.JoinRule import io.element.android.libraries.matrix.api.room.join.JoinRule
import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.api.user.MatrixUser
import kotlinx.collections.immutable.ImmutableList
@Immutable
data class SpaceRoom( data class SpaceRoom(
val rawName: String?, val rawName: String?,
val displayName: String, val displayName: String,
@ -23,7 +22,7 @@ data class SpaceRoom(
val canonicalAlias: RoomAlias?, val canonicalAlias: RoomAlias?,
val childrenCount: Int, val childrenCount: Int,
val guestCanJoin: Boolean, val guestCanJoin: Boolean,
val heroes: List<MatrixUser>, val heroes: ImmutableList<MatrixUser>,
val joinRule: JoinRule?, val joinRule: JoinRule?,
val numJoinedMembers: Int, val numJoinedMembers: Int,
val roomId: RoomId, val roomId: RoomId,
@ -34,7 +33,7 @@ data class SpaceRoom(
/** /**
* The via parameters of the room. * The via parameters of the room.
*/ */
val via: List<String>, val via: ImmutableList<String>,
val isDirect: Boolean?, val isDirect: Boolean?,
) { ) {
val isSpace = roomType == RoomType.Space val isSpace = roomType == RoomType.Space

View file

@ -13,6 +13,7 @@ import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.spaces.SpaceRoom import io.element.android.libraries.matrix.api.spaces.SpaceRoom
import io.element.android.libraries.matrix.impl.room.join.map import io.element.android.libraries.matrix.impl.room.join.map
import io.element.android.libraries.matrix.impl.room.map import io.element.android.libraries.matrix.impl.room.map
import kotlinx.collections.immutable.toImmutableList
import org.matrix.rustcomponents.sdk.SpaceRoom as RustSpaceRoom import org.matrix.rustcomponents.sdk.SpaceRoom as RustSpaceRoom
class SpaceRoomMapper { class SpaceRoomMapper {
@ -22,7 +23,7 @@ class SpaceRoomMapper {
canonicalAlias = spaceRoom.canonicalAlias?.let(::RoomAlias), canonicalAlias = spaceRoom.canonicalAlias?.let(::RoomAlias),
childrenCount = spaceRoom.childrenCount.toInt(), childrenCount = spaceRoom.childrenCount.toInt(),
guestCanJoin = spaceRoom.guestCanJoin, guestCanJoin = spaceRoom.guestCanJoin,
heroes = spaceRoom.heroes.orEmpty().map { it.map() }, heroes = spaceRoom.heroes.orEmpty().map { it.map() }.toImmutableList(),
joinRule = spaceRoom.joinRule?.map(), joinRule = spaceRoom.joinRule?.map(),
rawName = spaceRoom.rawName, rawName = spaceRoom.rawName,
displayName = spaceRoom.displayName, displayName = spaceRoom.displayName,
@ -32,7 +33,7 @@ class SpaceRoomMapper {
state = spaceRoom.state?.map(), state = spaceRoom.state?.map(),
topic = spaceRoom.topic, topic = spaceRoom.topic,
worldReadable = spaceRoom.worldReadable.orFalse(), worldReadable = spaceRoom.worldReadable.orFalse(),
via = spaceRoom.via, via = spaceRoom.via.toImmutableList(),
isDirect = spaceRoom.isDirect, isDirect = spaceRoom.isDirect,
) )
} }

View file

@ -14,6 +14,7 @@ import io.element.android.libraries.matrix.api.room.RoomType
import io.element.android.libraries.matrix.api.room.join.JoinRule import io.element.android.libraries.matrix.api.room.join.JoinRule
import io.element.android.libraries.matrix.api.spaces.SpaceRoom import io.element.android.libraries.matrix.api.spaces.SpaceRoom
import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.api.user.MatrixUser
import kotlinx.collections.immutable.toImmutableList
fun aSpaceRoom( fun aSpaceRoom(
rawName: String? = null, rawName: String? = null,
@ -39,7 +40,7 @@ fun aSpaceRoom(
canonicalAlias = canonicalAlias, canonicalAlias = canonicalAlias,
childrenCount = childrenCount, childrenCount = childrenCount,
guestCanJoin = guestCanJoin, guestCanJoin = guestCanJoin,
heroes = heroes, heroes = heroes.toImmutableList(),
joinRule = joinRule, joinRule = joinRule,
numJoinedMembers = numJoinedMembers, numJoinedMembers = numJoinedMembers,
roomId = roomId, roomId = roomId,
@ -47,6 +48,6 @@ fun aSpaceRoom(
state = state, state = state,
topic = topic, topic = topic,
worldReadable = worldReadable, worldReadable = worldReadable,
via = via, via = via.toImmutableList(),
isDirect = isDirect isDirect = isDirect
) )