mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 06:55:59 +00:00
Bundle ClientProxy & MediaProvider injections together in UserSession.
This commit is contained in:
+16
-19
@@ -11,11 +11,10 @@ import SwiftUI
|
||||
typealias RoomMembersListScreenViewModelType = StateStoreViewModel<RoomMembersListScreenViewState, RoomMembersListScreenViewAction>
|
||||
|
||||
class RoomMembersListScreenViewModel: RoomMembersListScreenViewModelType, RoomMembersListScreenViewModelProtocol {
|
||||
private let clientProxy: ClientProxyProtocol
|
||||
private let userSession: UserSessionProtocol
|
||||
private let roomProxy: JoinedRoomProxyProtocol
|
||||
private let userIndicatorController: UserIndicatorControllerProtocol
|
||||
private let analytics: AnalyticsService
|
||||
private let mediaProvider: MediaProviderProtocol
|
||||
|
||||
private var members: [RoomMemberProxyProtocol] = []
|
||||
private var currentUserProxy: RoomMemberProxyProtocol?
|
||||
@@ -27,20 +26,18 @@ class RoomMembersListScreenViewModel: RoomMembersListScreenViewModelType, RoomMe
|
||||
}
|
||||
|
||||
init(initialMode: RoomMembersListScreenMode = .members,
|
||||
clientProxy: ClientProxyProtocol,
|
||||
userSession: UserSessionProtocol,
|
||||
roomProxy: JoinedRoomProxyProtocol,
|
||||
mediaProvider: MediaProviderProtocol,
|
||||
userIndicatorController: UserIndicatorControllerProtocol,
|
||||
analytics: AnalyticsService) {
|
||||
self.clientProxy = clientProxy
|
||||
self.userSession = userSession
|
||||
self.roomProxy = roomProxy
|
||||
self.userIndicatorController = userIndicatorController
|
||||
self.analytics = analytics
|
||||
self.mediaProvider = mediaProvider
|
||||
|
||||
super.init(initialViewState: .init(joinedMembersCount: roomProxy.infoPublisher.value.joinedMembersCount,
|
||||
bindings: .init(mode: initialMode)),
|
||||
mediaProvider: mediaProvider)
|
||||
mediaProvider: userSession.mediaProvider)
|
||||
|
||||
setupMembers()
|
||||
}
|
||||
@@ -112,7 +109,7 @@ class RoomMembersListScreenViewModel: RoomMembersListScreenViewModelType, RoomMe
|
||||
}
|
||||
|
||||
private func buildMembersDetails(members: [RoomMemberProxyProtocol]) async -> RoomMembersDetails {
|
||||
await Task.detached { [clientProxy, roomProxy] in
|
||||
await Task.detached { [userSession, roomProxy] in
|
||||
// accessing RoomMember's properties is very slow. We need to do it in a background thread.
|
||||
var invitedMembers: [RoomMemberListScreenEntry] = .init()
|
||||
var joinedMembers: [RoomMemberListScreenEntry] = .init()
|
||||
@@ -121,7 +118,7 @@ class RoomMembersListScreenViewModel: RoomMembersListScreenViewModelType, RoomMe
|
||||
for member in members {
|
||||
var verificationState: UserIdentityVerificationState = .notVerified
|
||||
if roomProxy.infoPublisher.value.isEncrypted, // We don't care about identity statuses on non-encrypted rooms
|
||||
case let .success(userIdentity) = await clientProxy.userIdentity(for: member.userID),
|
||||
case let .success(userIdentity) = await userSession.clientProxy.userIdentity(for: member.userID),
|
||||
let userIdentity {
|
||||
verificationState = userIdentity.verificationState
|
||||
}
|
||||
@@ -151,15 +148,15 @@ class RoomMembersListScreenViewModel: RoomMembersListScreenViewModelType, RoomMe
|
||||
return
|
||||
}
|
||||
|
||||
let manageMemeberViewModel = ManageRoomMemberSheetViewModel(memberDetails: .memberDetails(roomMember: member),
|
||||
permissions: .init(canKick: state.canKickUsers,
|
||||
canBan: state.canBanUsers,
|
||||
ownPowerLevel: currentUserProxy?.powerLevel ?? .init(value: 0)),
|
||||
roomProxy: roomProxy,
|
||||
userIndicatorController: userIndicatorController,
|
||||
analyticsService: analytics,
|
||||
mediaProvider: mediaProvider)
|
||||
manageMemeberViewModel.actions.sink { [weak self] action in
|
||||
let manageMemberViewModel = ManageRoomMemberSheetViewModel(memberDetails: .memberDetails(roomMember: member),
|
||||
permissions: .init(canKick: state.canKickUsers,
|
||||
canBan: state.canBanUsers,
|
||||
ownPowerLevel: currentUserProxy?.powerLevel ?? .init(value: 0)),
|
||||
roomProxy: roomProxy,
|
||||
userIndicatorController: userIndicatorController,
|
||||
analyticsService: analytics,
|
||||
mediaProvider: userSession.mediaProvider)
|
||||
manageMemberViewModel.actions.sink { [weak self] action in
|
||||
guard let self else { return }
|
||||
switch action {
|
||||
case .dismiss(let shouldShowDetails):
|
||||
@@ -170,7 +167,7 @@ class RoomMembersListScreenViewModel: RoomMembersListScreenViewModelType, RoomMe
|
||||
}
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
state.bindings.manageMemeberViewModel = manageMemeberViewModel
|
||||
state.bindings.manageMemeberViewModel = manageMemberViewModel
|
||||
}
|
||||
|
||||
private func showMemberDetails(_ member: RoomMemberDetails) {
|
||||
|
||||
Reference in New Issue
Block a user