mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 00:49:44 +00:00
RoomTimeline… refactor (drop the Room). (#3728)
* Add the timeline controller factory to the timeline view model. In preparation for building a timeline to swipe through media in QuickLook. * Refactor RoomTimelineControllerFactory. * Refactor RoomTimelineController. * Refactor RoomTimelineProvider.
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
//
|
||||
// Copyright 2024 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 Foundation
|
||||
import MatrixRustSDK
|
||||
|
||||
@MainActor
|
||||
class AutoUpdatingTimelineProviderMock: TimelineProvider {
|
||||
static var timelineListener: TimelineListener?
|
||||
|
||||
private let innerPaginationStatePublisher: PassthroughSubject<PaginationState, Never>
|
||||
|
||||
init() {
|
||||
innerPaginationStatePublisher = .init()
|
||||
|
||||
let timelineMock = TimelineSDKMock()
|
||||
|
||||
timelineMock.addListenerListenerClosure = { listener in
|
||||
Self.timelineListener = listener
|
||||
return TaskHandleSDKMock()
|
||||
}
|
||||
|
||||
super.init(timeline: timelineMock,
|
||||
kind: .live,
|
||||
paginationStatePublisher: innerPaginationStatePublisher.eraseToAnyPublisher())
|
||||
|
||||
Task.detached {
|
||||
for _ in 0...100 {
|
||||
try? await Task.sleep(for: .seconds(1))
|
||||
|
||||
let diff = TimelineDiffSDKMock()
|
||||
diff.changeReturnValue = .append
|
||||
|
||||
let timelineItem = TimelineItemSDKMock()
|
||||
timelineItem.asEventReturnValue = EventTimelineItem.mockMessage
|
||||
timelineItem.uniqueIdReturnValue = .init(id: UUID().uuidString)
|
||||
|
||||
diff.appendReturnValue = [timelineItem]
|
||||
|
||||
await Self.timelineListener?.onUpdate(diff: [diff])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user