mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 12:07:55 +00:00
Prevent mapping members on the main queue inside the room screen view model
This commit is contained in:
committed by
Stefan Ceriu
parent
c2a1560b1d
commit
82981f33e9
@@ -793,11 +793,11 @@ class RoomProxyMock: RoomProxyProtocol {
|
||||
var displayName: String?
|
||||
var topic: String?
|
||||
var avatarURL: URL?
|
||||
var membersPublisher: AnyPublisher<[RoomMemberProxyProtocol], Never> {
|
||||
get { return underlyingMembersPublisher }
|
||||
set(value) { underlyingMembersPublisher = value }
|
||||
var members: CurrentValuePublisher<[RoomMemberProxyProtocol], Never> {
|
||||
get { return underlyingMembers }
|
||||
set(value) { underlyingMembers = value }
|
||||
}
|
||||
var underlyingMembersPublisher: AnyPublisher<[RoomMemberProxyProtocol], Never>!
|
||||
var underlyingMembers: CurrentValuePublisher<[RoomMemberProxyProtocol], Never>!
|
||||
var invitedMembersCount: Int {
|
||||
get { return underlyingInvitedMembersCount }
|
||||
set(value) { underlyingInvitedMembersCount = value }
|
||||
|
||||
@@ -64,10 +64,10 @@ extension RoomProxyMock {
|
||||
activeMembersCount = configuration.activeMembersCount
|
||||
ownUserID = configuration.ownUserID
|
||||
|
||||
if let members = configuration.members {
|
||||
membersPublisher = Just(members).eraseToAnyPublisher()
|
||||
if let configuredMembers = configuration.members {
|
||||
members = CurrentValueSubject(configuredMembers).asCurrentValuePublisher()
|
||||
} else {
|
||||
membersPublisher = Just([]).eraseToAnyPublisher()
|
||||
members = CurrentValueSubject([]).asCurrentValuePublisher()
|
||||
}
|
||||
|
||||
if let inviter = configuration.inviter {
|
||||
|
||||
@@ -119,9 +119,10 @@ class InviteUsersScreenViewModel: InviteUsersScreenViewModelType, InviteUsersScr
|
||||
hideLoader()
|
||||
}
|
||||
|
||||
roomProxy.membersPublisher
|
||||
roomProxy.members
|
||||
.filter { !$0.isEmpty }
|
||||
.first()
|
||||
.receive(on: DispatchQueue.main)
|
||||
.sink { [weak self] members in
|
||||
self?.buildMembershipStateIfNeeded(members: members)
|
||||
}
|
||||
|
||||
@@ -145,7 +145,8 @@ class RoomDetailsScreenViewModel: RoomDetailsScreenViewModelType, RoomDetailsScr
|
||||
return
|
||||
}
|
||||
|
||||
roomProxy.membersPublisher
|
||||
roomProxy.members
|
||||
.receive(on: DispatchQueue.main)
|
||||
.sink { [weak self] members in
|
||||
guard let self else { return }
|
||||
let dmRecipient = members.first(where: { !$0.isAccountOwner })
|
||||
|
||||
@@ -67,8 +67,9 @@ class RoomMembersListScreenViewModel: RoomMembersListScreenViewModelType, RoomMe
|
||||
hideLoader()
|
||||
}
|
||||
|
||||
roomProxy.membersPublisher
|
||||
roomProxy.members
|
||||
.filter { !$0.isEmpty }
|
||||
.receive(on: DispatchQueue.main)
|
||||
.sink { [weak self] members in
|
||||
self?.updateState(members: members)
|
||||
}
|
||||
|
||||
@@ -210,12 +210,13 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
|
||||
.weakAssign(to: \.state.readReceiptsEnabled, on: self)
|
||||
.store(in: &cancellables)
|
||||
|
||||
roomProxy.membersPublisher
|
||||
roomProxy.members
|
||||
.map { members in
|
||||
members.reduce(into: [String: RoomMemberState]()) { dictionary, member in
|
||||
dictionary[member.userID] = RoomMemberState(displayName: member.displayName, avatarURL: member.avatarURL)
|
||||
}
|
||||
}
|
||||
.receive(on: DispatchQueue.main)
|
||||
.weakAssign(to: \.state.members, on: self)
|
||||
.store(in: &cancellables)
|
||||
}
|
||||
|
||||
@@ -40,10 +40,8 @@ class RoomProxy: RoomProxyProtocol {
|
||||
|
||||
private let backPaginationStateSubject = PassthroughSubject<BackPaginationStatus, Never>()
|
||||
private let membersSubject = CurrentValueSubject<[RoomMemberProxyProtocol], Never>([])
|
||||
var membersPublisher: AnyPublisher<[RoomMemberProxyProtocol], Never> {
|
||||
membersSubject
|
||||
.receive(on: DispatchQueue.main)
|
||||
.eraseToAnyPublisher()
|
||||
var members: CurrentValuePublisher<[RoomMemberProxyProtocol], Never> {
|
||||
membersSubject.asCurrentValuePublisher()
|
||||
}
|
||||
|
||||
private var timelineListener: RoomTimelineListener?
|
||||
|
||||
@@ -67,7 +67,7 @@ protocol RoomProxyProtocol {
|
||||
|
||||
var avatarURL: URL? { get }
|
||||
|
||||
var membersPublisher: AnyPublisher<[RoomMemberProxyProtocol], Never> { get }
|
||||
var members: CurrentValuePublisher<[RoomMemberProxyProtocol], Never> { get }
|
||||
|
||||
var invitedMembersCount: Int { get }
|
||||
|
||||
@@ -206,6 +206,6 @@ extension RoomProxyProtocol {
|
||||
|
||||
func members() async -> [RoomMemberProxyProtocol]? {
|
||||
await updateMembers()
|
||||
return await membersPublisher.values.first()
|
||||
return members.value
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user