diff --git a/ElementX/Sources/Services/Client/ClientProxy.swift b/ElementX/Sources/Services/Client/ClientProxy.swift index 09d0c8243..c28bc5f00 100644 --- a/ElementX/Sources/Services/Client/ClientProxy.swift +++ b/ElementX/Sources/Services/Client/ClientProxy.swift @@ -507,7 +507,7 @@ class ClientProxy: ClientProxyProtocol { } private func createRoomListLoadingStateUpdateObserver(_ roomListService: RoomListService) -> TaskHandle { - roomListService.syncIndicator(listener: RoomListServiceSyncIndicatorListenerProxy { [weak self] state in + roomListService.syncIndicator(delayBeforeShowingInMs: 1000, delayBeforeHidingInMs: 0, listener: RoomListServiceSyncIndicatorListenerProxy { [weak self] state in guard let self else { return } switch state { diff --git a/ElementX/Sources/Services/Room/RoomProxy.swift b/ElementX/Sources/Services/Room/RoomProxy.swift index ff251094c..24108c1e4 100644 --- a/ElementX/Sources/Services/Room/RoomProxy.swift +++ b/ElementX/Sources/Services/Room/RoomProxy.swift @@ -511,10 +511,13 @@ class RoomProxy: RoomProxyProtocol { func updateMembers() async { do { - let roomMembersProxies = try await Task.dispatch(on: .global()) { - try self.room.members().map { - RoomMemberProxy(member: $0, backgroundTaskService: self.backgroundTaskService) - } + let membersIterator = try await room.members() + guard let members = membersIterator.nextChunk(chunkSize: membersIterator.len()) else { + return + } + + let roomMembersProxies = members.map { + RoomMemberProxy(member: $0, backgroundTaskService: self.backgroundTaskService) } membersSubject.value = roomMembersProxies @@ -528,14 +531,12 @@ class RoomProxy: RoomProxyProtocol { defer { sendMessageBackgroundTask?.stop() } - - return await Task.dispatch(on: lowPriorityDispatchQueue) { - do { - let member = try self.room.member(userId: userID) - return .success(RoomMemberProxy(member: member, backgroundTaskService: self.backgroundTaskService)) - } catch { - return .failure(.failedRetrievingMember) - } + + do { + let member = try await room.member(userId: userID) + return .success(RoomMemberProxy(member: member, backgroundTaskService: backgroundTaskService)) + } catch { + return .failure(.failedRetrievingMember) } } @@ -728,12 +729,10 @@ class RoomProxy: RoomProxyProtocol { /// Force the timeline to load member details so it can populate sender profiles whenever we add a timeline listener /// This should become automatic on the RustSDK side at some point private func fetchMembers() async { - await Task.dispatch(on: .global()) { - do { - _ = try self.room.fetchMembers() - } catch { - MXLog.error("Failed fetching members: \(error)") - } + do { + try await room.fetchMembers() + } catch { + MXLog.error("Failed fetching members: \(error)") } }