Caching the room proxies and their messages. Improved performance throughout.

This commit is contained in:
Stefan Ceriu
2022-03-31 15:37:52 +03:00
parent b50bf724a3
commit 49f7678ce8
22 changed files with 191 additions and 189 deletions
@@ -38,9 +38,7 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
self.timelineController = timelineController
self.timelineViewFactory = timelineViewFactory
super.init(initialViewState: RoomScreenViewState(roomTitle: roomName ?? "💥"))
buildTimelineViews()
super.init(initialViewState: RoomScreenViewState(roomTitle: roomName ?? "Unknown room 💥"))
timelineController.callbacks.sink { [weak self] callback in
guard let self = self else { return }
@@ -57,6 +55,8 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
self.state.items[viewIndex] = timelineViewFactory.buildTimelineViewFor(timelineItem)
}
}.store(in: &cancellables)
buildTimelineViews()
}
// MARK: - Public
@@ -80,8 +80,10 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
// MARK: - Private
private func buildTimelineViews() {
state.items = timelineController.timelineItems.map { item in
let stateItems = timelineController.timelineItems.map { item in
timelineViewFactory.buildTimelineViewFor(item)
}
state.items = stateItems
}
}