Fixes #516 - Delay user profile details loading until the room list has been updated

This commit is contained in:
Stefan Ceriu
2023-02-02 09:10:09 +02:00
committed by Stefan Ceriu
parent 594f6f85dd
commit 49c41d8581
@@ -76,18 +76,6 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
} }
.store(in: &cancellables) .store(in: &cancellables)
Task {
if case let .success(url) = await userSession.clientProxy.loadUserAvatarURL() {
state.userAvatarURL = url
}
}
Task {
if case let .success(userDisplayName) = await userSession.clientProxy.loadUserDisplayName() {
state.userDisplayName = userDisplayName
}
}
guard let visibleRoomsSummaryProvider, let allRoomsSummaryProvider else { guard let visibleRoomsSummaryProvider, let allRoomsSummaryProvider else {
MXLog.error("Room summary provider unavailable") MXLog.error("Room summary provider unavailable")
return return
@@ -98,28 +86,43 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
visibleRoomsSummaryProvider.countPublisher, visibleRoomsSummaryProvider.countPublisher,
visibleRoomsSummaryProvider.roomListPublisher) visibleRoomsSummaryProvider.roomListPublisher)
.receive(on: DispatchQueue.main) .receive(on: DispatchQueue.main)
.sink { [weak self] state, totalCount, rooms in .sink { [weak self] roomSummaryProviderState, totalCount, rooms in
guard let self else { return } guard let self else { return }
let isLoadingData = state != .live && (totalCount == 0 || rooms.count != totalCount) let isLoadingData = roomSummaryProviderState != .live && (totalCount == 0 || rooms.count != totalCount)
let hasNoRooms = state == .live && totalCount == 0 let hasNoRooms = roomSummaryProviderState == .live && totalCount == 0
var newState = self.state.roomListMode var roomListMode = self.state.roomListMode
if isLoadingData { if isLoadingData {
newState = .skeletons roomListMode = .skeletons
} else if hasNoRooms { } else if hasNoRooms {
newState = .skeletons roomListMode = .skeletons
} else { } else {
newState = .rooms roomListMode = .rooms
} }
guard newState != self.state.roomListMode else { guard roomListMode != self.state.roomListMode else {
return return
} }
self.state.roomListMode = newState self.state.roomListMode = roomListMode
MXLog.info("Received visibleRoomsSummaryProvider update, setting view room list mode to \"\(self.state.roomListMode)\"") MXLog.info("Received visibleRoomsSummaryProvider update, setting view room list mode to \"\(self.state.roomListMode)\"")
// Delay user profile detail loading until after the initial room list loads
if roomListMode == .rooms {
Task {
if case let .success(url) = await userSession.clientProxy.loadUserAvatarURL() {
self.state.userAvatarURL = url
}
}
Task {
if case let .success(userDisplayName) = await userSession.clientProxy.loadUserDisplayName() {
self.state.userDisplayName = userDisplayName
}
}
}
} }
.store(in: &cancellables) .store(in: &cancellables)