Support update of order/autojoin of child

This commit is contained in:
Valere 2021-02-16 10:17:11 +01:00
parent 2cc5c76fb3
commit 5aa698768a
4 changed files with 42 additions and 13 deletions

View File

@ -26,5 +26,11 @@ interface Space {
suspend fun removeRoom(roomId: String)
@Throws
suspend fun setChildrenOrder(roomId: String, order: String?)
@Throws
suspend fun setChildrenAutoJoin(roomId: String, autoJoin: Boolean)
// fun getChildren() : List<IRoomSummary>
}

View File

@ -64,11 +64,6 @@ interface SpaceService {
fun getSpaceSummaries(spaceSummaryQueryParams: SpaceSummaryQueryParams): List<SpaceSummary>
data class ChildAutoJoinInfo(
val roomIdOrAlias: String,
val viaServers: List<String> = emptyList()
)
sealed class JoinSpaceResult {
object Success : JoinSpaceResult()
data class Fail(val error: Throwable) : JoinSpaceResult()

View File

@ -23,6 +23,7 @@ import org.matrix.android.sdk.api.session.events.model.toModel
import org.matrix.android.sdk.api.session.room.Room
import org.matrix.android.sdk.api.session.space.Space
import org.matrix.android.sdk.api.session.space.model.SpaceChildContent
import java.lang.IllegalArgumentException
class DefaultSpace(private val room: Room) : Space {
@ -61,11 +62,39 @@ class DefaultSpace(private val room: Room) : Space {
)
}
// override fun getChildren(): List<IRoomSummary> {
// // asRoom().getStateEvents(setOf(EventType.STATE_SPACE_CHILD)).mapNotNull {
// // // statekeys are the roomIds
// //
// // }
// return emptyList<IRoomSummary>()
// }
override suspend fun setChildrenOrder(roomId: String, order: String?) {
val existing = asRoom().getStateEvents(setOf(EventType.STATE_SPACE_CHILD), QueryStringValue.Equals(roomId))
.firstOrNull()
?.content.toModel<SpaceChildContent>()
?: throw IllegalArgumentException("$roomId is not a child of this space")
// edit state event and set via to null
asRoom().sendStateEvent(
eventType = EventType.STATE_SPACE_CHILD,
stateKey = roomId,
body = SpaceChildContent(
order = order,
via = existing.via,
autoJoin = existing.autoJoin
).toContent()
)
}
override suspend fun setChildrenAutoJoin(roomId: String, autoJoin: Boolean) {
val existing = asRoom().getStateEvents(setOf(EventType.STATE_SPACE_CHILD), QueryStringValue.Equals(roomId))
.firstOrNull()
?.content.toModel<SpaceChildContent>()
?: throw IllegalArgumentException("$roomId is not a child of this space")
// edit state event and set via to null
asRoom().sendStateEvent(
eventType = EventType.STATE_SPACE_CHILD,
stateKey = roomId,
body = SpaceChildContent(
order = existing.order,
via = existing.via,
autoJoin = autoJoin
).toContent()
)
}
}

View File

@ -3247,7 +3247,6 @@
<string name="dev_tools_success_state_event">State event sent!</string>
<string name="dev_tools_event_content_hint">Event content</string>
<string name="command_description_create_space">Create a community</string>
<string name="command_description_create_space">Create a Space</string>
<string name="command_description_join_space">Join the Space with the given id</string>
<string name="command_description_leave_room">Leave room with given id (or current room if null)</string>