Leave space: notify the room membership change
This commit is contained in:
parent
35dd2c76c1
commit
2c3e4a45e4
3 changed files with 16 additions and 1 deletions
|
|
@ -147,6 +147,8 @@ class RustMatrixClient(
|
||||||
private val innerRoomListService = innerSyncService.roomListService()
|
private val innerRoomListService = innerSyncService.roomListService()
|
||||||
private val innerSpaceService = innerClient.spaceService()
|
private val innerSpaceService = innerClient.spaceService()
|
||||||
|
|
||||||
|
private val roomMembershipObserver = RoomMembershipObserver()
|
||||||
|
|
||||||
private val rustSyncService = RustSyncService(
|
private val rustSyncService = RustSyncService(
|
||||||
inner = innerSyncService,
|
inner = innerSyncService,
|
||||||
dispatcher = sessionDispatcher,
|
dispatcher = sessionDispatcher,
|
||||||
|
|
@ -189,6 +191,7 @@ class RustMatrixClient(
|
||||||
|
|
||||||
override val spaceService: SpaceService = RustSpaceService(
|
override val spaceService: SpaceService = RustSpaceService(
|
||||||
innerSpaceService = innerSpaceService,
|
innerSpaceService = innerSpaceService,
|
||||||
|
roomMembershipObserver = roomMembershipObserver,
|
||||||
sessionCoroutineScope = sessionCoroutineScope,
|
sessionCoroutineScope = sessionCoroutineScope,
|
||||||
sessionDispatcher = sessionDispatcher,
|
sessionDispatcher = sessionDispatcher,
|
||||||
)
|
)
|
||||||
|
|
@ -200,7 +203,7 @@ class RustMatrixClient(
|
||||||
)
|
)
|
||||||
|
|
||||||
private val roomInfoMapper = RoomInfoMapper()
|
private val roomInfoMapper = RoomInfoMapper()
|
||||||
private val roomMembershipObserver = RoomMembershipObserver()
|
|
||||||
private val roomFactory = RustRoomFactory(
|
private val roomFactory = RustRoomFactory(
|
||||||
roomListService = roomListService,
|
roomListService = roomListService,
|
||||||
innerRoomListService = innerRoomListService,
|
innerRoomListService = innerRoomListService,
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,8 @@ package io.element.android.libraries.matrix.impl.spaces
|
||||||
|
|
||||||
import io.element.android.libraries.core.extensions.runCatchingExceptions
|
import io.element.android.libraries.core.extensions.runCatchingExceptions
|
||||||
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.RoomMembershipObserver
|
||||||
import io.element.android.libraries.matrix.api.spaces.LeaveSpaceHandle
|
import io.element.android.libraries.matrix.api.spaces.LeaveSpaceHandle
|
||||||
import io.element.android.libraries.matrix.api.spaces.LeaveSpaceRoom
|
import io.element.android.libraries.matrix.api.spaces.LeaveSpaceRoom
|
||||||
import kotlinx.coroutines.CompletableDeferred
|
import kotlinx.coroutines.CompletableDeferred
|
||||||
|
|
@ -21,6 +23,7 @@ import org.matrix.rustcomponents.sdk.LeaveSpaceHandle as RustLeaveSpaceHandle
|
||||||
class RustLeaveSpaceHandle(
|
class RustLeaveSpaceHandle(
|
||||||
override val id: RoomId,
|
override val id: RoomId,
|
||||||
private val spaceRoomMapper: SpaceRoomMapper,
|
private val spaceRoomMapper: SpaceRoomMapper,
|
||||||
|
private val roomMembershipObserver: RoomMembershipObserver,
|
||||||
sessionCoroutineScope: CoroutineScope,
|
sessionCoroutineScope: CoroutineScope,
|
||||||
private val innerProvider: suspend () -> RustLeaveSpaceHandle,
|
private val innerProvider: suspend () -> RustLeaveSpaceHandle,
|
||||||
) : LeaveSpaceHandle {
|
) : LeaveSpaceHandle {
|
||||||
|
|
@ -45,6 +48,12 @@ class RustLeaveSpaceHandle(
|
||||||
// Ensure the space is included and is the last room to be left
|
// Ensure the space is included and is the last room to be left
|
||||||
val roomToLeave = roomIds - id + id
|
val roomToLeave = roomIds - id + id
|
||||||
inner.await().leave(roomToLeave.map { it.value })
|
inner.await().leave(roomToLeave.map { it.value })
|
||||||
|
}.onSuccess {
|
||||||
|
roomMembershipObserver.notifyUserLeftRoom(
|
||||||
|
roomId = id,
|
||||||
|
isSpace = true,
|
||||||
|
membershipBeforeLeft = CurrentUserMembership.JOINED,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ExperimentalCoroutinesApi::class)
|
@OptIn(ExperimentalCoroutinesApi::class)
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ package io.element.android.libraries.matrix.impl.spaces
|
||||||
import io.element.android.libraries.core.coroutine.childScope
|
import io.element.android.libraries.core.coroutine.childScope
|
||||||
import io.element.android.libraries.core.extensions.runCatchingExceptions
|
import io.element.android.libraries.core.extensions.runCatchingExceptions
|
||||||
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.RoomMembershipObserver
|
||||||
import io.element.android.libraries.matrix.api.spaces.LeaveSpaceHandle
|
import io.element.android.libraries.matrix.api.spaces.LeaveSpaceHandle
|
||||||
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.spaces.SpaceRoomList
|
import io.element.android.libraries.matrix.api.spaces.SpaceRoomList
|
||||||
|
|
@ -38,6 +39,7 @@ class RustSpaceService(
|
||||||
private val innerSpaceService: ClientSpaceService,
|
private val innerSpaceService: ClientSpaceService,
|
||||||
private val sessionCoroutineScope: CoroutineScope,
|
private val sessionCoroutineScope: CoroutineScope,
|
||||||
private val sessionDispatcher: CoroutineDispatcher,
|
private val sessionDispatcher: CoroutineDispatcher,
|
||||||
|
private val roomMembershipObserver: RoomMembershipObserver,
|
||||||
) : SpaceService {
|
) : SpaceService {
|
||||||
private val spaceRoomMapper = SpaceRoomMapper()
|
private val spaceRoomMapper = SpaceRoomMapper()
|
||||||
override val spaceRoomsFlow = MutableSharedFlow<List<SpaceRoom>>(replay = 1, extraBufferCapacity = 1)
|
override val spaceRoomsFlow = MutableSharedFlow<List<SpaceRoom>>(replay = 1, extraBufferCapacity = 1)
|
||||||
|
|
@ -69,6 +71,7 @@ class RustSpaceService(
|
||||||
return RustLeaveSpaceHandle(
|
return RustLeaveSpaceHandle(
|
||||||
id = spaceId,
|
id = spaceId,
|
||||||
spaceRoomMapper = spaceRoomMapper,
|
spaceRoomMapper = spaceRoomMapper,
|
||||||
|
roomMembershipObserver = roomMembershipObserver,
|
||||||
sessionCoroutineScope = sessionCoroutineScope,
|
sessionCoroutineScope = sessionCoroutineScope,
|
||||||
) {
|
) {
|
||||||
innerSpaceService.leaveSpace(spaceId.value)
|
innerSpaceService.leaveSpace(spaceId.value)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue