From 3e61babc89cc483676f4eedc175a4019d8e5e112 Mon Sep 17 00:00:00 2001 From: Doug <6060466+pixlwave@users.noreply.github.com> Date: Thu, 9 Oct 2025 17:22:43 +0100 Subject: [PATCH] Make the `SpaceRoomListProxy` publish its `SpaceRoomProxy` updates. (#4607) Also removes an unused `parent` parameter that was missed when removing the parent name and includes some regenerated snapshots that were missed in the last PR. --- .../RoomFlowCoordinator.swift | 2 +- .../SpaceExplorerFlowCoordinator.swift | 4 +- .../SpaceFlowCoordinator.swift | 2 +- .../Mocks/Generated/GeneratedMocks.swift | 61 ++++++++++--------- .../Mocks/SpaceRoomListProxyMock.swift | 3 +- .../Sources/Mocks/SpaceServiceProxyMock.swift | 2 +- ElementX/Sources/Other/SDKListener.swift | 4 ++ .../HomeScreen/HomeScreenViewModel.swift | 2 +- .../JoinRoomScreenViewModel.swift | 2 +- .../SpaceListScreenViewModel.swift | 2 +- .../SpaceScreen/SpaceScreenModels.swift | 2 +- .../SpaceScreen/SpaceScreenViewModel.swift | 13 ++-- .../Services/Spaces/SpaceRoomListProxy.swift | 16 ++++- .../Spaces/SpaceRoomListProxyProtocol.swift | 3 +- .../Services/Spaces/SpaceServiceProxy.swift | 2 +- .../Spaces/SpaceServiceProxyProtocol.swift | 2 +- ...leaveSpaceRoomDetailsCell.iPad-en-GB-0.png | 4 +- ...eaveSpaceRoomDetailsCell.iPad-pseudo-0.png | 4 +- ...SpaceRoomDetailsCell.iPhone-16-en-GB-0.png | 4 +- ...paceRoomDetailsCell.iPhone-16-pseudo-0.png | 4 +- .../Sources/HomeScreenViewModelTests.swift | 4 +- .../JoinRoomScreenViewModelTests.swift | 2 +- .../SpaceListScreenViewModelTests.swift | 4 +- .../Sources/SpaceScreenViewModelTests.swift | 6 +- 24 files changed, 91 insertions(+), 63 deletions(-) diff --git a/ElementX/Sources/FlowCoordinators/RoomFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/RoomFlowCoordinator.swift index f0b424f15..df33b12ed 100644 --- a/ElementX/Sources/FlowCoordinators/RoomFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/RoomFlowCoordinator.swift @@ -260,7 +260,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol { switch room { case .joined(let roomProxy): if roomProxy.infoPublisher.value.isSpace { - switch await userSession.clientProxy.spaceService.spaceRoomList(spaceID: roomProxy.id, parent: nil) { + switch await userSession.clientProxy.spaceService.spaceRoomList(spaceID: roomProxy.id) { case .success(let spaceRoomListProxy): actionsSubject.send(.continueWithSpaceFlow(spaceRoomListProxy)) case .failure: diff --git a/ElementX/Sources/FlowCoordinators/SpaceExplorerFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/SpaceExplorerFlowCoordinator.swift index 4301efa45..e94e3f788 100644 --- a/ElementX/Sources/FlowCoordinators/SpaceExplorerFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/SpaceExplorerFlowCoordinator.swift @@ -93,7 +93,7 @@ class SpaceExplorerFlowCoordinator: FlowCoordinatorProtocol { stateMachine.addRouteMapping { event, fromState, userInfo in guard event == .selectSpace, case .spaceList = fromState else { return nil } guard let spaceRoomListProxy = userInfo as? SpaceRoomListProxyProtocol else { fatalError("A space proxy must be provided.") } - return .spaceList(selectedSpaceID: spaceRoomListProxy.spaceRoomProxy.id) + return .spaceList(selectedSpaceID: spaceRoomListProxy.id) } handler: { [weak self] context in guard let self, let spaceRoomListProxy = context.userInfo as? SpaceRoomListProxyProtocol else { return } startSpaceFlow(spaceRoomListProxy: spaceRoomListProxy) @@ -164,6 +164,6 @@ class SpaceExplorerFlowCoordinator: FlowCoordinatorProtocol { } coordinator.start() - selectedSpaceSubject.send(spaceRoomListProxy.spaceRoomProxy.id) + selectedSpaceSubject.send(spaceRoomListProxy.id) } } diff --git a/ElementX/Sources/FlowCoordinators/SpaceFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/SpaceFlowCoordinator.swift index 00007286a..9911ae3a6 100644 --- a/ElementX/Sources/FlowCoordinators/SpaceFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/SpaceFlowCoordinator.swift @@ -21,7 +21,7 @@ enum SpaceFlowCoordinatorEntryPoint { var spaceID: String { switch self { - case .space(let spaceRoomListProxy): spaceRoomListProxy.spaceRoomProxy.id + case .space(let spaceRoomListProxy): spaceRoomListProxy.id case .joinSpace(let spaceRoomProxy): spaceRoomProxy.id } } diff --git a/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift b/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift index bb2658de2..929597fd2 100644 --- a/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift +++ b/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift @@ -15943,11 +15943,16 @@ class SessionVerificationControllerProxyMock: SessionVerificationControllerProxy } } class SpaceRoomListProxyMock: SpaceRoomListProxyProtocol, @unchecked Sendable { - var spaceRoomProxy: SpaceRoomProxyProtocol { - get { return underlyingSpaceRoomProxy } - set(value) { underlyingSpaceRoomProxy = value } + var id: String { + get { return underlyingId } + set(value) { underlyingId = value } } - var underlyingSpaceRoomProxy: SpaceRoomProxyProtocol! + var underlyingId: String! + var spaceRoomProxyPublisher: CurrentValuePublisher { + get { return underlyingSpaceRoomProxyPublisher } + set(value) { underlyingSpaceRoomProxyPublisher = value } + } + var underlyingSpaceRoomProxyPublisher: CurrentValuePublisher! var spaceRoomsPublisher: CurrentValuePublisher<[SpaceRoomProxyProtocol], Never> { get { return underlyingSpaceRoomsPublisher } set(value) { underlyingSpaceRoomsPublisher = value } @@ -16047,15 +16052,15 @@ class SpaceServiceProxyMock: SpaceServiceProxyProtocol, @unchecked Sendable { //MARK: - spaceRoomList - var spaceRoomListSpaceIDParentUnderlyingCallsCount = 0 - var spaceRoomListSpaceIDParentCallsCount: Int { + var spaceRoomListSpaceIDUnderlyingCallsCount = 0 + var spaceRoomListSpaceIDCallsCount: Int { get { if Thread.isMainThread { - return spaceRoomListSpaceIDParentUnderlyingCallsCount + return spaceRoomListSpaceIDUnderlyingCallsCount } else { var returnValue: Int? = nil DispatchQueue.main.sync { - returnValue = spaceRoomListSpaceIDParentUnderlyingCallsCount + returnValue = spaceRoomListSpaceIDUnderlyingCallsCount } return returnValue! @@ -16063,29 +16068,29 @@ class SpaceServiceProxyMock: SpaceServiceProxyProtocol, @unchecked Sendable { } set { if Thread.isMainThread { - spaceRoomListSpaceIDParentUnderlyingCallsCount = newValue + spaceRoomListSpaceIDUnderlyingCallsCount = newValue } else { DispatchQueue.main.sync { - spaceRoomListSpaceIDParentUnderlyingCallsCount = newValue + spaceRoomListSpaceIDUnderlyingCallsCount = newValue } } } } - var spaceRoomListSpaceIDParentCalled: Bool { - return spaceRoomListSpaceIDParentCallsCount > 0 + var spaceRoomListSpaceIDCalled: Bool { + return spaceRoomListSpaceIDCallsCount > 0 } - var spaceRoomListSpaceIDParentReceivedArguments: (spaceID: String, parent: SpaceRoomProxyProtocol?)? - var spaceRoomListSpaceIDParentReceivedInvocations: [(spaceID: String, parent: SpaceRoomProxyProtocol?)] = [] + var spaceRoomListSpaceIDReceivedSpaceID: String? + var spaceRoomListSpaceIDReceivedInvocations: [String] = [] - var spaceRoomListSpaceIDParentUnderlyingReturnValue: Result! - var spaceRoomListSpaceIDParentReturnValue: Result! { + var spaceRoomListSpaceIDUnderlyingReturnValue: Result! + var spaceRoomListSpaceIDReturnValue: Result! { get { if Thread.isMainThread { - return spaceRoomListSpaceIDParentUnderlyingReturnValue + return spaceRoomListSpaceIDUnderlyingReturnValue } else { var returnValue: Result? = nil DispatchQueue.main.sync { - returnValue = spaceRoomListSpaceIDParentUnderlyingReturnValue + returnValue = spaceRoomListSpaceIDUnderlyingReturnValue } return returnValue! @@ -16093,26 +16098,26 @@ class SpaceServiceProxyMock: SpaceServiceProxyProtocol, @unchecked Sendable { } set { if Thread.isMainThread { - spaceRoomListSpaceIDParentUnderlyingReturnValue = newValue + spaceRoomListSpaceIDUnderlyingReturnValue = newValue } else { DispatchQueue.main.sync { - spaceRoomListSpaceIDParentUnderlyingReturnValue = newValue + spaceRoomListSpaceIDUnderlyingReturnValue = newValue } } } } - var spaceRoomListSpaceIDParentClosure: ((String, SpaceRoomProxyProtocol?) async -> Result)? + var spaceRoomListSpaceIDClosure: ((String) async -> Result)? - func spaceRoomList(spaceID: String, parent: SpaceRoomProxyProtocol?) async -> Result { - spaceRoomListSpaceIDParentCallsCount += 1 - spaceRoomListSpaceIDParentReceivedArguments = (spaceID: spaceID, parent: parent) + func spaceRoomList(spaceID: String) async -> Result { + spaceRoomListSpaceIDCallsCount += 1 + spaceRoomListSpaceIDReceivedSpaceID = spaceID DispatchQueue.main.async { - self.spaceRoomListSpaceIDParentReceivedInvocations.append((spaceID: spaceID, parent: parent)) + self.spaceRoomListSpaceIDReceivedInvocations.append(spaceID) } - if let spaceRoomListSpaceIDParentClosure = spaceRoomListSpaceIDParentClosure { - return await spaceRoomListSpaceIDParentClosure(spaceID, parent) + if let spaceRoomListSpaceIDClosure = spaceRoomListSpaceIDClosure { + return await spaceRoomListSpaceIDClosure(spaceID) } else { - return spaceRoomListSpaceIDParentReturnValue + return spaceRoomListSpaceIDReturnValue } } //MARK: - leaveSpace diff --git a/ElementX/Sources/Mocks/SpaceRoomListProxyMock.swift b/ElementX/Sources/Mocks/SpaceRoomListProxyMock.swift index dd502a676..6893b1f59 100644 --- a/ElementX/Sources/Mocks/SpaceRoomListProxyMock.swift +++ b/ElementX/Sources/Mocks/SpaceRoomListProxyMock.swift @@ -32,7 +32,8 @@ extension SpaceRoomListProxyMock { let spaceRoomsSubject: CurrentValueSubject<[SpaceRoomProxyProtocol], Never> = .init(configuration.initialSpaceRooms) - spaceRoomProxy = configuration.spaceRoomProxy + id = configuration.spaceRoomProxy.id + spaceRoomProxyPublisher = .init(configuration.spaceRoomProxy) spaceRoomsPublisher = spaceRoomsSubject.asCurrentValuePublisher() paginationStatePublisher = configuration.paginationStateSubject.asCurrentValuePublisher() diff --git a/ElementX/Sources/Mocks/SpaceServiceProxyMock.swift b/ElementX/Sources/Mocks/SpaceServiceProxyMock.swift index ce2b6eaa2..64b981e9b 100644 --- a/ElementX/Sources/Mocks/SpaceServiceProxyMock.swift +++ b/ElementX/Sources/Mocks/SpaceServiceProxyMock.swift @@ -20,7 +20,7 @@ extension SpaceServiceProxyMock { self.init() joinedSpacesPublisher = .init(configuration.joinedSpaces) - spaceRoomListSpaceIDParentClosure = { spaceID, _ in + spaceRoomListSpaceIDClosure = { spaceID in if let spaceRoomList = configuration.spaceRoomLists[spaceID] { .success(spaceRoomList) } else { diff --git a/ElementX/Sources/Other/SDKListener.swift b/ElementX/Sources/Other/SDKListener.swift index 3569f4a20..72b00ee4e 100644 --- a/ElementX/Sources/Other/SDKListener.swift +++ b/ElementX/Sources/Other/SDKListener.swift @@ -92,6 +92,10 @@ extension SDKListener: SpaceRoomListPaginationStateListener where T == SpaceRoom func onUpdate(paginationState: SpaceRoomListPaginationState) { onUpdateClosure(paginationState) } } +extension SDKListener: SpaceRoomListSpaceListener where T == SpaceRoom? { + func onUpdate(space: SpaceRoom?) { onUpdateClosure(space) } +} + // MARK: Room extension SDKListener: RoomInfoListener where T == RoomInfo { diff --git a/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift b/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift index 8f7384197..84736fb3e 100644 --- a/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift +++ b/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift @@ -437,7 +437,7 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol if roomProxy.info.isSpace { let spaceService = userSession.clientProxy.spaceService - switch await spaceService.spaceRoomList(spaceID: roomProxy.id, parent: nil) { + switch await spaceService.spaceRoomList(spaceID: roomProxy.id) { case .success(let spaceRoomListProxy): actionsSubject.send(.presentSpace(spaceRoomListProxy)) case .failure(let error): diff --git a/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenViewModel.swift b/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenViewModel.swift index c21fb90e3..6b5a2767d 100644 --- a/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenViewModel.swift +++ b/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenViewModel.swift @@ -336,7 +336,7 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo return } - switch await clientProxy.spaceService.spaceRoomList(spaceID: roomID, parent: nil) { + switch await clientProxy.spaceService.spaceRoomList(spaceID: roomID) { case .success(let spaceRoomListProxy): actionsSubject.send(.joined(.space(spaceRoomListProxy))) case .failure(let error): diff --git a/ElementX/Sources/Screens/Spaces/SpaceListScreen/SpaceListScreenViewModel.swift b/ElementX/Sources/Screens/Spaces/SpaceListScreen/SpaceListScreenViewModel.swift index 2878b0799..72c59493f 100644 --- a/ElementX/Sources/Screens/Spaces/SpaceListScreen/SpaceListScreenViewModel.swift +++ b/ElementX/Sources/Screens/Spaces/SpaceListScreen/SpaceListScreenViewModel.swift @@ -78,7 +78,7 @@ class SpaceListScreenViewModel: SpaceListScreenViewModelType, SpaceListScreenVie // MARK: - Private private func selectSpace(_ spaceRoomProxy: SpaceRoomProxyProtocol) async { - switch await spaceServiceProxy.spaceRoomList(spaceID: spaceRoomProxy.id, parent: nil) { + switch await spaceServiceProxy.spaceRoomList(spaceID: spaceRoomProxy.id) { case .success(let spaceRoomListProxy): actionsSubject.send(.selectSpace(spaceRoomListProxy)) case .failure(let error): diff --git a/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenModels.swift b/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenModels.swift index c97135fe9..c717c6888 100644 --- a/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenModels.swift +++ b/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenModels.swift @@ -15,7 +15,7 @@ enum SpaceScreenViewModelAction { } struct SpaceScreenViewState: BindableState { - let space: SpaceRoomProxyProtocol + var space: SpaceRoomProxyProtocol var permalink: URL? diff --git a/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenViewModel.swift b/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenViewModel.swift index afe13ad8d..a2f031c58 100644 --- a/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenViewModel.swift +++ b/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenViewModel.swift @@ -31,11 +31,16 @@ class SpaceScreenViewModel: SpaceScreenViewModelType, SpaceScreenViewModelProtoc clientProxy = userSession.clientProxy self.userIndicatorController = userIndicatorController - super.init(initialViewState: SpaceScreenViewState(space: spaceRoomListProxy.spaceRoomProxy, + super.init(initialViewState: SpaceScreenViewState(space: spaceRoomListProxy.spaceRoomProxyPublisher.value, rooms: spaceRoomListProxy.spaceRoomsPublisher.value, selectedSpaceRoomID: selectedSpaceRoomPublisher.value), mediaProvider: userSession.mediaProvider) + spaceRoomListProxy.spaceRoomProxyPublisher + .receive(on: DispatchQueue.main) + .weakAssign(to: \.state.space, on: self) + .store(in: &cancellables) + spaceRoomListProxy.spaceRoomsPublisher .receive(on: DispatchQueue.main) .weakAssign(to: \.state.rooms, on: self) @@ -62,7 +67,7 @@ class SpaceScreenViewModel: SpaceScreenViewModelType, SpaceScreenViewModelProtoc .store(in: &cancellables) Task { - if case let .joined(roomProxy) = await userSession.clientProxy.roomForIdentifier(spaceRoomListProxy.spaceRoomProxy.id), + if case let .joined(roomProxy) = await userSession.clientProxy.roomForIdentifier(spaceRoomListProxy.id), case let .success(permalinkURL) = await roomProxy.matrixToPermalink() { state.permalink = permalinkURL } @@ -134,7 +139,7 @@ class SpaceScreenViewModel: SpaceScreenViewModelType, SpaceScreenViewModelProtoc } private func selectSpace(_ spaceRoomProxy: SpaceRoomProxyProtocol) async { - switch await spaceServiceProxy.spaceRoomList(spaceID: spaceRoomProxy.id, parent: spaceRoomListProxy.spaceRoomProxy) { + switch await spaceServiceProxy.spaceRoomList(spaceID: spaceRoomProxy.id) { case .success(let spaceRoomListProxy): actionsSubject.send(.selectSpace(spaceRoomListProxy)) case .failure(let error): @@ -144,7 +149,7 @@ class SpaceScreenViewModel: SpaceScreenViewModelType, SpaceScreenViewModelProtoc } private func showLeaveSpaceConfirmation() async { - guard case let .success(leaveHandle) = await spaceServiceProxy.leaveSpace(spaceID: spaceRoomListProxy.spaceRoomProxy.id) else { + guard case let .success(leaveHandle) = await spaceServiceProxy.leaveSpace(spaceID: spaceRoomListProxy.id) else { showFailureIndicator() return } diff --git a/ElementX/Sources/Services/Spaces/SpaceRoomListProxy.swift b/ElementX/Sources/Services/Spaces/SpaceRoomListProxy.swift index f5e76d778..03e639745 100644 --- a/ElementX/Sources/Services/Spaces/SpaceRoomListProxy.swift +++ b/ElementX/Sources/Services/Spaces/SpaceRoomListProxy.swift @@ -9,8 +9,15 @@ import Combine import MatrixRustSDK class SpaceRoomListProxy: SpaceRoomListProxyProtocol { + var id: String { spaceRoomProxyPublisher.value.id } + private let spaceRoomList: SpaceRoomListProtocol - let spaceRoomProxy: SpaceRoomProxyProtocol + + private var spaceRoomProxyHandle: TaskHandle? + private let spaceRoomProxySubject: CurrentValueSubject + var spaceRoomProxyPublisher: CurrentValuePublisher { + spaceRoomProxySubject.asCurrentValuePublisher() + } private var spaceRoomsHandle: TaskHandle? private let spaceRoomsSubject = CurrentValueSubject<[SpaceRoomProxyProtocol], Never>([]) @@ -25,7 +32,7 @@ class SpaceRoomListProxy: SpaceRoomListProxyProtocol { guard let spaceRoom = spaceRoomList.space() else { throw SpaceRoomListProxyError.missingSpace } self.spaceRoomList = spaceRoomList - spaceRoomProxy = SpaceRoomProxy(spaceRoom: spaceRoom) + spaceRoomProxySubject = .init(SpaceRoomProxy(spaceRoom: spaceRoom)) let paginationStateSubject = CurrentValueSubject(spaceRoomList.paginationState()) paginationStatePublisher = paginationStateSubject.asCurrentValuePublisher() @@ -37,6 +44,11 @@ class SpaceRoomListProxy: SpaceRoomListProxyProtocol { spaceRoomsHandle = spaceRoomList.subscribeToRoomUpdate(listener: SDKListener { [weak self] updates in self?.handleUpdates(updates) }) + + spaceRoomProxyHandle = spaceRoomList.subscribeToSpaceUpdates(listener: SDKListener { [weak self] spaceRoom in + guard let spaceRoom else { return } + self?.spaceRoomProxySubject.send(SpaceRoomProxy(spaceRoom: spaceRoom)) + }) } func paginate() async { diff --git a/ElementX/Sources/Services/Spaces/SpaceRoomListProxyProtocol.swift b/ElementX/Sources/Services/Spaces/SpaceRoomListProxyProtocol.swift index e89c13142..8b266d479 100644 --- a/ElementX/Sources/Services/Spaces/SpaceRoomListProxyProtocol.swift +++ b/ElementX/Sources/Services/Spaces/SpaceRoomListProxyProtocol.swift @@ -14,8 +14,9 @@ enum SpaceRoomListProxyError: Error { // sourcery: AutoMockable protocol SpaceRoomListProxyProtocol { - var spaceRoomProxy: SpaceRoomProxyProtocol { get } + var id: String { get } + var spaceRoomProxyPublisher: CurrentValuePublisher { get } var spaceRoomsPublisher: CurrentValuePublisher<[SpaceRoomProxyProtocol], Never> { get } var paginationStatePublisher: CurrentValuePublisher { get } diff --git a/ElementX/Sources/Services/Spaces/SpaceServiceProxy.swift b/ElementX/Sources/Services/Spaces/SpaceServiceProxy.swift index 26f8b212e..5956a39b1 100644 --- a/ElementX/Sources/Services/Spaces/SpaceServiceProxy.swift +++ b/ElementX/Sources/Services/Spaces/SpaceServiceProxy.swift @@ -30,7 +30,7 @@ class SpaceServiceProxy: SpaceServiceProxyProtocol { }) } - func spaceRoomList(spaceID: String, parent: SpaceRoomProxyProtocol?) async -> Result { + func spaceRoomList(spaceID: String) async -> Result { do { return try await .success(SpaceRoomListProxy(spaceService.spaceRoomList(spaceId: spaceID))) } catch { diff --git a/ElementX/Sources/Services/Spaces/SpaceServiceProxyProtocol.swift b/ElementX/Sources/Services/Spaces/SpaceServiceProxyProtocol.swift index 6ad956b58..9cea3680c 100644 --- a/ElementX/Sources/Services/Spaces/SpaceServiceProxyProtocol.swift +++ b/ElementX/Sources/Services/Spaces/SpaceServiceProxyProtocol.swift @@ -16,6 +16,6 @@ enum SpaceServiceProxyError: Error { protocol SpaceServiceProxyProtocol { var joinedSpacesPublisher: CurrentValuePublisher<[SpaceRoomProxyProtocol], Never> { get } - func spaceRoomList(spaceID: String, parent: SpaceRoomProxyProtocol?) async -> Result + func spaceRoomList(spaceID: String) async -> Result func leaveSpace(spaceID: String) async -> Result } diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/leaveSpaceRoomDetailsCell.iPad-en-GB-0.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/leaveSpaceRoomDetailsCell.iPad-en-GB-0.png index 519af9d0a..6a6671ae7 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/leaveSpaceRoomDetailsCell.iPad-en-GB-0.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/leaveSpaceRoomDetailsCell.iPad-en-GB-0.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:88a74173a12b71340404e5e7ddf643e5b423225dd7e7341ff7999395e85ab29b -size 96983 +oid sha256:5851e5b7b8556d5a72e4d5d7557957547a1a7f2d9ec80f324522e67599365362 +size 111868 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/leaveSpaceRoomDetailsCell.iPad-pseudo-0.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/leaveSpaceRoomDetailsCell.iPad-pseudo-0.png index 83ed8649b..ff8d4bd1c 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/leaveSpaceRoomDetailsCell.iPad-pseudo-0.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/leaveSpaceRoomDetailsCell.iPad-pseudo-0.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:04b87616c651ec510de4518fd8257b63e50668e3e0b3a95e3ca32e64d5aa25b0 -size 106567 +oid sha256:a2a32f990080fa0445e3cc0e83b8ea109dd3101f4a12fe804b3d5a325df516ad +size 126584 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/leaveSpaceRoomDetailsCell.iPhone-16-en-GB-0.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/leaveSpaceRoomDetailsCell.iPhone-16-en-GB-0.png index a4babd395..2b1d27235 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/leaveSpaceRoomDetailsCell.iPhone-16-en-GB-0.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/leaveSpaceRoomDetailsCell.iPhone-16-en-GB-0.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:265b0cd6386b88ca25348afa117b8e3ba62b6d60c27858481706f62d952f06cf -size 54134 +oid sha256:3b4c93ea3a20e890eee10c47d100a77cdf0f6ead386055e0e11a59c2287742b1 +size 66152 diff --git a/PreviewTests/Sources/__Snapshots__/PreviewTests/leaveSpaceRoomDetailsCell.iPhone-16-pseudo-0.png b/PreviewTests/Sources/__Snapshots__/PreviewTests/leaveSpaceRoomDetailsCell.iPhone-16-pseudo-0.png index 095420f78..a180a0188 100644 --- a/PreviewTests/Sources/__Snapshots__/PreviewTests/leaveSpaceRoomDetailsCell.iPhone-16-pseudo-0.png +++ b/PreviewTests/Sources/__Snapshots__/PreviewTests/leaveSpaceRoomDetailsCell.iPhone-16-pseudo-0.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:32e0d83b9289cc3d0f0ae904fd3bcd5c0e7694f5417aa3ceb8ef0722aa7c3dbe -size 59145 +oid sha256:8187cd536e01a3a940c683fd1d9e8636ff0cb8f973f8f5a2ce0e0e1d83dd32e6 +size 75159 diff --git a/UnitTests/Sources/HomeScreenViewModelTests.swift b/UnitTests/Sources/HomeScreenViewModelTests.swift index 1dd73d61e..445394966 100644 --- a/UnitTests/Sources/HomeScreenViewModelTests.swift +++ b/UnitTests/Sources/HomeScreenViewModelTests.swift @@ -406,7 +406,7 @@ class HomeScreenViewModelTests: XCTestCase { clientProxy.roomForIdentifierClosure = { spaceID in .invited(InvitedRoomProxyMock(.init(id: spaceID, isSpace: true))) } let spaceServiceProxy = SpaceServiceProxyMock(.init()) - spaceServiceProxy.spaceRoomListSpaceIDParentClosure = { spaceID, _ in + spaceServiceProxy.spaceRoomListSpaceIDClosure = { spaceID in .success(SpaceRoomListProxyMock(.init(spaceRoomProxy: SpaceRoomProxyMock(.init(id: spaceID, isSpace: true))))) } clientProxy.underlyingSpaceService = spaceServiceProxy @@ -454,7 +454,7 @@ extension HomeScreenViewModelAction: @retroactive Equatable { case (.presentDeclineAndBlock(let lhsUserID, let lhsRoomID), .presentDeclineAndBlock(let rhsUserID, let rhsRoomID)): lhsUserID == rhsUserID && lhsRoomID == rhsRoomID case (.presentSpace(let lhsSpaceRoomListProxy), .presentSpace(let rhsSpaceRoomListProxy)): - lhsSpaceRoomListProxy.spaceRoomProxy.id == rhsSpaceRoomListProxy.spaceRoomProxy.id + lhsSpaceRoomListProxy.id == rhsSpaceRoomListProxy.id case (.roomLeft(let lhsID), .roomLeft(let rhsID)): lhsID == rhsID case (.transferOwnership(let lhsID), .transferOwnership(let rhsID)): diff --git a/UnitTests/Sources/JoinRoomScreenViewModelTests.swift b/UnitTests/Sources/JoinRoomScreenViewModelTests.swift index c02f7aa2a..1b6a67ebd 100644 --- a/UnitTests/Sources/JoinRoomScreenViewModelTests.swift +++ b/UnitTests/Sources/JoinRoomScreenViewModelTests.swift @@ -208,7 +208,7 @@ extension JoinRoomScreenViewModelAction: @retroactive Equatable { case (.joined(.roomID(let lhsRoomID)), .joined(.roomID(let rhsRoomID))): lhsRoomID == rhsRoomID case (.joined(.space(let lhsSpace)), .joined(.space(let rhsSpace))): - lhsSpace.spaceRoomProxy.id == rhsSpace.spaceRoomProxy.id + lhsSpace.id == rhsSpace.id case (.dismiss, .dismiss): true case (.presentDeclineAndBlock(let lhsUserID), .presentDeclineAndBlock(let rhsUserID)): diff --git a/UnitTests/Sources/SpaceListScreenViewModelTests.swift b/UnitTests/Sources/SpaceListScreenViewModelTests.swift index 469097d2d..77816b30c 100644 --- a/UnitTests/Sources/SpaceListScreenViewModelTests.swift +++ b/UnitTests/Sources/SpaceListScreenViewModelTests.swift @@ -61,7 +61,7 @@ class SpaceListScreenViewModelTests: XCTestCase { let action = try await deferred.fulfill() switch action { - case .selectSpace(let spaceRoomListProxy) where spaceRoomListProxy.spaceRoomProxy.id == selectedSpace.id: + case .selectSpace(let spaceRoomListProxy) where spaceRoomListProxy.id == selectedSpace.id: break default: XCTFail("The action should select the space.") @@ -102,7 +102,7 @@ class SpaceListScreenViewModelTests: XCTestCase { ]) spaceServiceProxy = SpaceServiceProxyMock(.init()) spaceServiceProxy.joinedSpacesPublisher = joinedSpacesSubject.asCurrentValuePublisher() - spaceServiceProxy.spaceRoomListSpaceIDParentClosure = { [joinedSpacesSubject] spaceID, _ in + spaceServiceProxy.spaceRoomListSpaceIDClosure = { [joinedSpacesSubject] spaceID in guard let spaceRoomProxy = joinedSpacesSubject?.value.first(where: { $0.id == spaceID }) else { return .failure(.missingSpace) } return .success(SpaceRoomListProxyMock(.init(spaceRoomProxy: spaceRoomProxy))) } diff --git a/UnitTests/Sources/SpaceScreenViewModelTests.swift b/UnitTests/Sources/SpaceScreenViewModelTests.swift index 49ea56da6..dadd2d5b2 100644 --- a/UnitTests/Sources/SpaceScreenViewModelTests.swift +++ b/UnitTests/Sources/SpaceScreenViewModelTests.swift @@ -100,7 +100,7 @@ class SpaceScreenViewModelTests: XCTestCase { let action = try await deferred.fulfill() switch action { - case .selectSpace(let spaceRoomListProxy) where spaceRoomListProxy.spaceRoomProxy.id == selectedSpace.id: + case .selectSpace(let spaceRoomListProxy) where spaceRoomListProxy.id == selectedSpace.id: break default: XCTFail("The action should select the space.") @@ -202,7 +202,7 @@ class SpaceScreenViewModelTests: XCTestCase { XCTAssertNil(context.leaveHandle) XCTAssertTrue(rustLeaveHandle.leaveRoomIdsCalled) XCTAssertEqual(rustLeaveHandle.leaveRoomIdsReceivedRoomIds, - [firstSelectedRoom.spaceRoomProxy.id, spaceRoomListProxy.spaceRoomProxy.id], + [firstSelectedRoom.spaceRoomProxy.id, spaceRoomListProxy.id], "Confirming the leave should first leave the selected room and then the space.") } @@ -214,7 +214,7 @@ class SpaceScreenViewModelTests: XCTestCase { paginationResponses: paginationResponses)) let spaceServiceProxy = SpaceServiceProxyMock(.init()) - spaceServiceProxy.spaceRoomListSpaceIDParentClosure = { [mockSpaceRooms] spaceID, _ in + spaceServiceProxy.spaceRoomListSpaceIDClosure = { [mockSpaceRooms] spaceID in guard let spaceRoomProxy = mockSpaceRooms.first(where: { $0.id == spaceID }) else { return .failure(.missingSpace) } return .success(SpaceRoomListProxyMock(.init(spaceRoomProxy: spaceRoomProxy))) }