Files
letro-ios/ElementX/Sources/Services/Spaces/SpaceRoomListProxyProtocol.swift
Doug cdf615ae5f Remove the protocol for SpaceServiceRoom given its a struct type. (#5000)
* Remove the protocol for SpaceServiceRoom given its a struct type.

* Fix a few missed mocks in the unit tests.
2026-01-26 09:45:46 +00:00

42 lines
1.4 KiB
Swift

//
// Copyright 2025 Element Creations Ltd.
// Copyright 2025 New Vector Ltd.
//
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
// Please see LICENSE files in the repository root for full details.
//
import Combine
import MatrixRustSDK
enum SpaceRoomListProxyError: Error {
case missingSpace
}
// sourcery: AutoMockable
protocol SpaceRoomListProxyProtocol {
var id: String { get }
var spaceServiceRoomPublisher: CurrentValuePublisher<SpaceServiceRoom, Never> { get }
var spaceRoomsPublisher: CurrentValuePublisher<[SpaceServiceRoom], Never> { get }
var paginationStatePublisher: CurrentValuePublisher<SpaceRoomListPaginationState, Never> { get }
func paginate() async
func reset() async
}
extension SpaceRoomListProxyProtocol {
/// Resets the list and then waits everything to be paginated back in again before returning.
///
/// **Note:** It's the caller's responsibility to handle the calls to ``paginate``. This method
/// purely acts as a helper to wait until the list has reloaded.
func resetAndWaitForFullReload(timeout: Duration) async {
await reset()
let runner = ExpiringTaskRunner { [paginationStatePublisher] in
await _ = paginationStatePublisher.values.first { $0 == .idle(endReached: true) }
}
try? await runner.run(timeout: timeout)
}
}