Skip to content

Commit

Permalink
Fix room list service cold cache support. Make sure we dispatch the i…
Browse files Browse the repository at this point in the history
…nitial room list and use it for computing the home screen state
  • Loading branch information
stefanceriu committed Aug 10, 2023
1 parent f649d36 commit 77061c4
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 4 deletions.
11 changes: 7 additions & 4 deletions ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -79,13 +79,16 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
return
}

roomSummaryProvider.statePublisher
// Combine together the state and the room list to correctly compute the view state if
// data is present in the room list "cold cache"
Publishers.CombineLatest(roomSummaryProvider.statePublisher,
roomSummaryProvider.roomListPublisher)
.receive(on: DispatchQueue.main)
.sink { [weak self] state in
.sink { [weak self] state, rooms in
guard let self else { return }

let isLoadingData = !state.isLoaded
let hasNoRooms = (state.isLoaded && state.totalNumberOfRooms == 0)
let isLoadingData = !state.isLoaded && rooms.isEmpty
let hasNoRooms = (state.isLoaded && state.totalNumberOfRooms == 0 && rooms.isEmpty)

var roomListMode = self.state.roomListMode
if isLoadingData {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,9 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol {
buildSummaryForRoomListEntry(roomListEntry)
}

// Manually call it here as the didSet doesn't work from constructors
roomListSubject.send(rooms)

let stateUpdatesSubscriptionResult = try roomList.loadingState(listener: RoomListStateObserver { [weak self] state in
guard let self else { return }
MXLog.info("\(name): Received state update: \(state)")
Expand Down

0 comments on commit 77061c4

Please sign in to comment.