mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 00:49:44 +00:00
Room details: improve members count UX (#1050)
* Inject user id into room’s details * Refactor member fetch logic in RoomDetailsScreenViewModel * Refactor DI * Fetch members in RoomMembersListScreenViewModel * Fetch members in InviteUsersScreen * Use joinedMembersCount in room members list * Cleanup * Limit members refresh * Cleanup binding * Fix UT build errors * Fix RoomDetailsScreenViewModelTests * Fix RoomMembersListScreenViewModelTests * Fix UTs * Fix RoomDetailsScreenUITests * Refine RoomDetailsScreenViewModelTests * Add roomProxy extension * PR comments * Refactor room’s counter to Int * Improve updateMembers() performances * Fix memory leaks
This commit is contained in:
@@ -120,16 +120,16 @@ class RoomProxy: RoomProxyProtocol {
|
||||
return Asset.Images.encryptionTrusted.image
|
||||
}
|
||||
|
||||
var invitedMembersCount: UInt {
|
||||
UInt(room.invitedMembersCount())
|
||||
var invitedMembersCount: Int {
|
||||
Int(room.invitedMembersCount())
|
||||
}
|
||||
|
||||
var joinedMembersCount: UInt {
|
||||
UInt(room.joinedMembersCount())
|
||||
var joinedMembersCount: Int {
|
||||
Int(room.joinedMembersCount())
|
||||
}
|
||||
|
||||
var activeMembersCount: UInt {
|
||||
UInt(room.activeMembersCount())
|
||||
var activeMembersCount: Int {
|
||||
Int(room.activeMembersCount())
|
||||
}
|
||||
|
||||
func loadAvatarURLForUserId(_ userId: String) async -> Result<URL?, RoomProxyError> {
|
||||
@@ -380,11 +380,13 @@ class RoomProxy: RoomProxyProtocol {
|
||||
|
||||
func updateMembers() async {
|
||||
do {
|
||||
let roomMembers = try await Task.dispatch(on: .global()) {
|
||||
try self.room.members()
|
||||
let roomMembersProxies = try await Task.dispatch(on: .global()) {
|
||||
try self.room.members().map {
|
||||
RoomMemberProxy(member: $0, backgroundTaskService: self.backgroundTaskService)
|
||||
}
|
||||
}
|
||||
|
||||
membersSubject.value = buildRoomMemberProxies(members: roomMembers)
|
||||
membersSubject.value = roomMembersProxies
|
||||
} catch {
|
||||
return
|
||||
}
|
||||
@@ -422,11 +424,6 @@ class RoomProxy: RoomProxyProtocol {
|
||||
}
|
||||
}
|
||||
|
||||
@MainActor
|
||||
private func buildRoomMemberProxies(members: [RoomMember]) -> [RoomMemberProxy] {
|
||||
members.map { RoomMemberProxy(member: $0, backgroundTaskService: backgroundTaskService) }
|
||||
}
|
||||
|
||||
func retryDecryption(for sessionID: String) async {
|
||||
await Task.dispatch(on: .global()) { [weak self] in
|
||||
self?.room.retryDecryption(sessionIds: [sessionID])
|
||||
|
||||
@@ -66,11 +66,11 @@ protocol RoomProxyProtocol {
|
||||
|
||||
var membersPublisher: AnyPublisher<[RoomMemberProxyProtocol], Never> { get }
|
||||
|
||||
var invitedMembersCount: UInt { get }
|
||||
var invitedMembersCount: Int { get }
|
||||
|
||||
var joinedMembersCount: UInt { get }
|
||||
var joinedMembersCount: Int { get }
|
||||
|
||||
var activeMembersCount: UInt { get }
|
||||
var activeMembersCount: Int { get }
|
||||
|
||||
/// Publishes the room's updates.
|
||||
/// The publisher starts publishing after the first call to `registerTimelineListenerIfNeeded()`
|
||||
@@ -157,4 +157,8 @@ extension RoomProxyProtocol {
|
||||
var roomTitle: String {
|
||||
displayName ?? name ?? "Unknown room 💥"
|
||||
}
|
||||
|
||||
var isEncryptedOneToOneRoom: Bool {
|
||||
isDirect && isEncrypted && joinedMembersCount == 2
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user