Prevent mapping members on the main queue inside the room screen view model

This commit is contained in:
Stefan Ceriu
2023-09-20 10:31:01 +03:00
committed by Stefan Ceriu
parent c2a1560b1d
commit 82981f33e9
8 changed files with 19 additions and 17 deletions
@@ -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 }
+3 -3
View File
@@ -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
}
}