Introduced MemberDetailsProvider, caching user avatar urls and images. Various other tweaks and improvements.

This commit is contained in:
Stefan Ceriu
2022-03-18 13:40:25 +02:00
parent 120bcaf012
commit 2eae0f0573
22 changed files with 346 additions and 203 deletions
@@ -17,8 +17,8 @@
import SwiftUI
struct RoomScreenCoordinatorParameters {
let roomProxy: RoomProxyProtocol
let mediaProvider: MediaProviderProtocol
let timelineController: RoomTimelineControllerProtocol
let roomName: String?
}
final class RoomScreenCoordinator: Coordinator, Presentable {
@@ -42,14 +42,10 @@ final class RoomScreenCoordinator: Coordinator, Presentable {
init(parameters: RoomScreenCoordinatorParameters) {
self.parameters = parameters
let timelineProvider = RoomTimelineProvider(roomProxy: parameters.roomProxy)
let timelineController = RoomTimelineController(timelineProvider: timelineProvider,
timelineItemFactory: RoomTimelineItemFactory(mediaProvider: parameters.mediaProvider),
mediaProvider: parameters.mediaProvider)
let viewModel = RoomScreenViewModel(timelineController: parameters.timelineController,
timelineViewFactory: RoomTimelineViewFactory(),
roomName: parameters.roomName)
let viewModel = RoomScreenViewModel(roomProxy: parameters.roomProxy,
timelineController: timelineController,
timelineViewFactory: RoomTimelineViewFactory())
let view = RoomScreen(context: viewModel.context)
roomScreenViewModel = viewModel
roomScreenHostingController = UIHostingController(rootView: view)
@@ -18,8 +18,8 @@ import SwiftUI
@available(iOS 14, *)
typealias RoomScreenViewModelType = StateStoreViewModel<RoomScreenViewState,
Never,
RoomScreenViewAction>
Never,
RoomScreenViewAction>
@available(iOS 14, *)
class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol {
@@ -27,22 +27,19 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
static let backPaginationPageSize: UInt = 30
}
private let roomProxy: RoomProxyProtocol
private let timelineController: RoomTimelineControllerProtocol
private let timelineViewFactory: RoomTimelineViewFactory
// MARK: - Setup
init(roomProxy: RoomProxyProtocol,
timelineController: RoomTimelineControllerProtocol,
timelineViewFactory: RoomTimelineViewFactory) {
self.roomProxy = roomProxy
init(timelineController: RoomTimelineControllerProtocol,
timelineViewFactory: RoomTimelineViewFactory,
roomName: String?) {
self.timelineController = timelineController
self.timelineViewFactory = timelineViewFactory
super.init(initialViewState: RoomScreenViewState())
super.init(initialViewState: RoomScreenViewState(roomTitle: roomName ?? "💥"))
state.roomTitle = roomProxy.name ?? ""
buildTimelineViews()
timelineController.callbacks.sink { [weak self] callback in
@@ -240,9 +240,9 @@ private class TableViewObserver: NSObject, UITableViewDelegate {
struct RoomScreen_Previews: PreviewProvider {
static var previews: some View {
let viewModel = RoomScreenViewModel(roomProxy: MockRoomProxy(displayName: "Test"),
timelineController: MockRoomTimelineController(),
timelineViewFactory: RoomTimelineViewFactory())
let viewModel = RoomScreenViewModel(timelineController: MockRoomTimelineController(),
timelineViewFactory: RoomTimelineViewFactory(),
roomName: "Preview room")
RoomScreen(context: viewModel.context)
}