Skip to content

Commit 71f9660

Browse files
committed
Leave space: notify the room membership change
1 parent 99f3209 commit 71f9660

File tree

3 files changed

+16
-1
lines changed

3 files changed

+16
-1
lines changed

libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,8 @@ class RustMatrixClient(
147147
private val innerRoomListService = innerSyncService.roomListService()
148148
private val innerSpaceService = innerClient.spaceService()
149149

150+
private val roomMembershipObserver = RoomMembershipObserver()
151+
150152
private val rustSyncService = RustSyncService(
151153
inner = innerSyncService,
152154
dispatcher = sessionDispatcher,
@@ -189,6 +191,7 @@ class RustMatrixClient(
189191

190192
override val spaceService: SpaceService = RustSpaceService(
191193
innerSpaceService = innerSpaceService,
194+
roomMembershipObserver = roomMembershipObserver,
192195
sessionCoroutineScope = sessionCoroutineScope,
193196
sessionDispatcher = sessionDispatcher,
194197
)
@@ -200,7 +203,7 @@ class RustMatrixClient(
200203
)
201204

202205
private val roomInfoMapper = RoomInfoMapper()
203-
private val roomMembershipObserver = RoomMembershipObserver()
206+
204207
private val roomFactory = RustRoomFactory(
205208
roomListService = roomListService,
206209
innerRoomListService = innerRoomListService,

libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/spaces/RustLeaveSpaceHandle.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ package io.element.android.libraries.matrix.impl.spaces
99

1010
import io.element.android.libraries.core.extensions.runCatchingExceptions
1111
import io.element.android.libraries.matrix.api.core.RoomId
12+
import io.element.android.libraries.matrix.api.room.CurrentUserMembership
13+
import io.element.android.libraries.matrix.api.room.RoomMembershipObserver
1214
import io.element.android.libraries.matrix.api.spaces.LeaveSpaceHandle
1315
import io.element.android.libraries.matrix.api.spaces.LeaveSpaceRoom
1416
import kotlinx.coroutines.CompletableDeferred
@@ -21,6 +23,7 @@ import org.matrix.rustcomponents.sdk.LeaveSpaceHandle as RustLeaveSpaceHandle
2123
class RustLeaveSpaceHandle(
2224
override val id: RoomId,
2325
private val spaceRoomMapper: SpaceRoomMapper,
26+
private val roomMembershipObserver: RoomMembershipObserver,
2427
sessionCoroutineScope: CoroutineScope,
2528
private val innerProvider: suspend () -> RustLeaveSpaceHandle,
2629
) : LeaveSpaceHandle {
@@ -45,6 +48,12 @@ class RustLeaveSpaceHandle(
4548
// Ensure the space is included and is the last room to be left
4649
val roomToLeave = roomIds - id + id
4750
inner.await().leave(roomToLeave.map { it.value })
51+
}.onSuccess {
52+
roomMembershipObserver.notifyUserLeftRoom(
53+
roomId = id,
54+
isSpace = true,
55+
membershipBeforeLeft = CurrentUserMembership.JOINED,
56+
)
4857
}
4958

5059
@OptIn(ExperimentalCoroutinesApi::class)

libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/spaces/RustSpaceService.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ package io.element.android.libraries.matrix.impl.spaces
1010
import io.element.android.libraries.core.coroutine.childScope
1111
import io.element.android.libraries.core.extensions.runCatchingExceptions
1212
import io.element.android.libraries.matrix.api.core.RoomId
13+
import io.element.android.libraries.matrix.api.room.RoomMembershipObserver
1314
import io.element.android.libraries.matrix.api.spaces.LeaveSpaceHandle
1415
import io.element.android.libraries.matrix.api.spaces.SpaceRoom
1516
import io.element.android.libraries.matrix.api.spaces.SpaceRoomList
@@ -38,6 +39,7 @@ class RustSpaceService(
3839
private val innerSpaceService: ClientSpaceService,
3940
private val sessionCoroutineScope: CoroutineScope,
4041
private val sessionDispatcher: CoroutineDispatcher,
42+
private val roomMembershipObserver: RoomMembershipObserver,
4143
) : SpaceService {
4244
private val spaceRoomMapper = SpaceRoomMapper()
4345
override val spaceRoomsFlow = MutableSharedFlow<List<SpaceRoom>>(replay = 1, extraBufferCapacity = 1)
@@ -69,6 +71,7 @@ class RustSpaceService(
6971
return RustLeaveSpaceHandle(
7072
id = spaceId,
7173
spaceRoomMapper = spaceRoomMapper,
74+
roomMembershipObserver = roomMembershipObserver,
7275
sessionCoroutineScope = sessionCoroutineScope,
7376
) {
7477
innerSpaceService.leaveSpace(spaceId.value)

0 commit comments

Comments
 (0)