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 displayName: String?
var topic: String? var topic: String?
var avatarURL: URL? var avatarURL: URL?
var membersPublisher: AnyPublisher<[RoomMemberProxyProtocol], Never> { var members: CurrentValuePublisher<[RoomMemberProxyProtocol], Never> {
get { return underlyingMembersPublisher } get { return underlyingMembers }
set(value) { underlyingMembersPublisher = value } set(value) { underlyingMembers = value }
} }
var underlyingMembersPublisher: AnyPublisher<[RoomMemberProxyProtocol], Never>! var underlyingMembers: CurrentValuePublisher<[RoomMemberProxyProtocol], Never>!
var invitedMembersCount: Int { var invitedMembersCount: Int {
get { return underlyingInvitedMembersCount } get { return underlyingInvitedMembersCount }
set(value) { underlyingInvitedMembersCount = value } set(value) { underlyingInvitedMembersCount = value }
+3 -3
View File
@@ -64,10 +64,10 @@ extension RoomProxyMock {
activeMembersCount = configuration.activeMembersCount activeMembersCount = configuration.activeMembersCount
ownUserID = configuration.ownUserID ownUserID = configuration.ownUserID
if let members = configuration.members { if let configuredMembers = configuration.members {
membersPublisher = Just(members).eraseToAnyPublisher() members = CurrentValueSubject(configuredMembers).asCurrentValuePublisher()
} else { } else {
membersPublisher = Just([]).eraseToAnyPublisher() members = CurrentValueSubject([]).asCurrentValuePublisher()
} }
if let inviter = configuration.inviter { if let inviter = configuration.inviter {
@@ -119,9 +119,10 @@ class InviteUsersScreenViewModel: InviteUsersScreenViewModelType, InviteUsersScr
hideLoader() hideLoader()
} }
roomProxy.membersPublisher roomProxy.members
.filter { !$0.isEmpty } .filter { !$0.isEmpty }
.first() .first()
.receive(on: DispatchQueue.main)
.sink { [weak self] members in .sink { [weak self] members in
self?.buildMembershipStateIfNeeded(members: members) self?.buildMembershipStateIfNeeded(members: members)
} }
@@ -145,7 +145,8 @@ class RoomDetailsScreenViewModel: RoomDetailsScreenViewModelType, RoomDetailsScr
return return
} }
roomProxy.membersPublisher roomProxy.members
.receive(on: DispatchQueue.main)
.sink { [weak self] members in .sink { [weak self] members in
guard let self else { return } guard let self else { return }
let dmRecipient = members.first(where: { !$0.isAccountOwner }) let dmRecipient = members.first(where: { !$0.isAccountOwner })
@@ -67,8 +67,9 @@ class RoomMembersListScreenViewModel: RoomMembersListScreenViewModelType, RoomMe
hideLoader() hideLoader()
} }
roomProxy.membersPublisher roomProxy.members
.filter { !$0.isEmpty } .filter { !$0.isEmpty }
.receive(on: DispatchQueue.main)
.sink { [weak self] members in .sink { [weak self] members in
self?.updateState(members: members) self?.updateState(members: members)
} }
@@ -210,12 +210,13 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
.weakAssign(to: \.state.readReceiptsEnabled, on: self) .weakAssign(to: \.state.readReceiptsEnabled, on: self)
.store(in: &cancellables) .store(in: &cancellables)
roomProxy.membersPublisher roomProxy.members
.map { members in .map { members in
members.reduce(into: [String: RoomMemberState]()) { dictionary, member in members.reduce(into: [String: RoomMemberState]()) { dictionary, member in
dictionary[member.userID] = RoomMemberState(displayName: member.displayName, avatarURL: member.avatarURL) dictionary[member.userID] = RoomMemberState(displayName: member.displayName, avatarURL: member.avatarURL)
} }
} }
.receive(on: DispatchQueue.main)
.weakAssign(to: \.state.members, on: self) .weakAssign(to: \.state.members, on: self)
.store(in: &cancellables) .store(in: &cancellables)
} }
@@ -40,10 +40,8 @@ class RoomProxy: RoomProxyProtocol {
private let backPaginationStateSubject = PassthroughSubject<BackPaginationStatus, Never>() private let backPaginationStateSubject = PassthroughSubject<BackPaginationStatus, Never>()
private let membersSubject = CurrentValueSubject<[RoomMemberProxyProtocol], Never>([]) private let membersSubject = CurrentValueSubject<[RoomMemberProxyProtocol], Never>([])
var membersPublisher: AnyPublisher<[RoomMemberProxyProtocol], Never> { var members: CurrentValuePublisher<[RoomMemberProxyProtocol], Never> {
membersSubject membersSubject.asCurrentValuePublisher()
.receive(on: DispatchQueue.main)
.eraseToAnyPublisher()
} }
private var timelineListener: RoomTimelineListener? private var timelineListener: RoomTimelineListener?
@@ -67,7 +67,7 @@ protocol RoomProxyProtocol {
var avatarURL: URL? { get } var avatarURL: URL? { get }
var membersPublisher: AnyPublisher<[RoomMemberProxyProtocol], Never> { get } var members: CurrentValuePublisher<[RoomMemberProxyProtocol], Never> { get }
var invitedMembersCount: Int { get } var invitedMembersCount: Int { get }
@@ -206,6 +206,6 @@ extension RoomProxyProtocol {
func members() async -> [RoomMemberProxyProtocol]? { func members() async -> [RoomMemberProxyProtocol]? {
await updateMembers() await updateMembers()
return await membersPublisher.values.first() return members.value
} }
} }