updateMembers now is chain of membersNoSync + membersWithSync (#2324)

This commit is contained in:
Mauro
2024-01-12 09:46:51 +01:00
committed by GitHub
parent 21fa5d1f84
commit e51e2ac2af
15 changed files with 55 additions and 48 deletions
@@ -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
@@ -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
}
+21 -15
View File
@@ -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)")
}
}