mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 06:55:59 +00:00
Fix room list service cold cache support. Make sure we dispatch the initial room list and use it for computing the home screen state
This commit is contained in:
committed by
Stefan Ceriu
parent
f649d362f5
commit
77061c4d7e
@@ -79,13 +79,16 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
|
|||||||
return
|
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)
|
.receive(on: DispatchQueue.main)
|
||||||
.sink { [weak self] state in
|
.sink { [weak self] state, rooms in
|
||||||
guard let self else { return }
|
guard let self else { return }
|
||||||
|
|
||||||
let isLoadingData = !state.isLoaded
|
let isLoadingData = !state.isLoaded && rooms.isEmpty
|
||||||
let hasNoRooms = (state.isLoaded && state.totalNumberOfRooms == 0)
|
let hasNoRooms = (state.isLoaded && state.totalNumberOfRooms == 0 && rooms.isEmpty)
|
||||||
|
|
||||||
var roomListMode = self.state.roomListMode
|
var roomListMode = self.state.roomListMode
|
||||||
if isLoadingData {
|
if isLoadingData {
|
||||||
|
|||||||
@@ -85,6 +85,9 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol {
|
|||||||
buildSummaryForRoomListEntry(roomListEntry)
|
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
|
let stateUpdatesSubscriptionResult = try roomList.loadingState(listener: RoomListStateObserver { [weak self] state in
|
||||||
guard let self else { return }
|
guard let self else { return }
|
||||||
MXLog.info("\(name): Received state update: \(state)")
|
MXLog.info("\(name): Received state update: \(state)")
|
||||||
|
|||||||
Reference in New Issue
Block a user