mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 10:33:45 +00:00
Fixes #516 - Delay user profile details loading until the room list has been updated
This commit is contained in:
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)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user