mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 21:33:26 +00:00
updateMembers now is chain of membersNoSync + membersWithSync (#2324)
This commit is contained in:
@@ -141,8 +141,8 @@ final class NotificationSettingsProxy: NotificationSettingsProxyProtocol {
|
||||
await notificationSettings.getRoomsWithUserDefinedRules(enabled: true)
|
||||
}
|
||||
|
||||
func canHomeserverPushEncryptedEventsToDevice() async -> Bool {
|
||||
await notificationSettings.canHomeserverPushEncryptedEventToDevice()
|
||||
func canPushEncryptedEventsToDevice() async -> Bool {
|
||||
await notificationSettings.canPushEncryptedEventToDevice()
|
||||
}
|
||||
|
||||
// MARK: - Private
|
||||
|
||||
+1
-1
@@ -40,5 +40,5 @@ protocol NotificationSettingsProxyProtocol {
|
||||
func isInviteForMeEnabled() async throws -> Bool
|
||||
func setInviteForMeEnabled(enabled: Bool) async throws
|
||||
func getRoomsWithUserDefinedRules() async throws -> [String]
|
||||
func canHomeserverPushEncryptedEventsToDevice() async -> Bool
|
||||
func canPushEncryptedEventsToDevice() async -> Bool
|
||||
}
|
||||
|
||||
@@ -65,10 +65,6 @@ class RoomProxy: RoomProxyProtocol {
|
||||
pollHistoryTimeline = await TimelineProxy(timeline: room.pollHistory(), backgroundTaskService: backgroundTaskService)
|
||||
|
||||
Task {
|
||||
// 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
|
||||
await room.timeline().fetchMembers()
|
||||
|
||||
await updateMembers()
|
||||
}
|
||||
}
|
||||
@@ -179,21 +175,31 @@ class RoomProxy: RoomProxyProtocol {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func updateMembers() async {
|
||||
// We always update members first using the no sync API in case internet is not readily available
|
||||
// To get the members stored on disk first, this API call is very fast.
|
||||
do {
|
||||
let membersIterator = try await room.members()
|
||||
guard let members = membersIterator.nextChunk(chunkSize: membersIterator.len()) else {
|
||||
return
|
||||
let membersNoSyncIterator = try await room.membersNoSync()
|
||||
if let members = membersNoSyncIterator.nextChunk(chunkSize: membersNoSyncIterator.len()) {
|
||||
membersSubject.value = members.map {
|
||||
RoomMemberProxy(member: $0, backgroundTaskService: self.backgroundTaskService)
|
||||
}
|
||||
}
|
||||
|
||||
let roomMembersProxies = members.map {
|
||||
RoomMemberProxy(member: $0, backgroundTaskService: self.backgroundTaskService)
|
||||
}
|
||||
|
||||
membersSubject.value = roomMembersProxies
|
||||
} catch {
|
||||
return
|
||||
MXLog.error("[RoomProxy] Failed to update members using no sync API: \(error)")
|
||||
}
|
||||
|
||||
do {
|
||||
// Then we update members using the sync API, this is slower but will get us the latest members
|
||||
let membersIterator = try await room.members()
|
||||
if let members = membersIterator.nextChunk(chunkSize: membersIterator.len()) {
|
||||
membersSubject.value = members.map {
|
||||
RoomMemberProxy(member: $0, backgroundTaskService: self.backgroundTaskService)
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
MXLog.error("[RoomProxy] Failed to update members using sync API: \(error)")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user