From 196fb5d02a05520b3ff7b4654d1b80b7e238398e Mon Sep 17 00:00:00 2001 From: Doug Date: Wed, 27 Aug 2025 17:25:28 +0100 Subject: [PATCH] Bundle ClientProxy & MediaProvider injections together in UserSession. --- .../ChatsFlowCoordinator.swift | 11 ++-- .../MediaEventsTimelineFlowCoordinator.swift | 5 +- .../PinnedEventsTimelineFlowCoordinator.swift | 6 +- .../RoomFlowCoordinator.swift | 30 +++------ .../SettingsFlowCoordinator.swift | 6 +- ElementX/Sources/Mocks/UserSessionMock.swift | 2 +- .../Sources/Mocks/UserSessionStoreMock.swift | 2 +- .../BlockedUsersScreenCoordinator.swift | 6 +- .../BlockedUsersScreenViewModel.swift | 7 +-- .../View/BlockedUsersScreen.swift | 3 +- .../InviteUsersScreenCoordinator.swift | 6 +- .../InviteUsersScreenViewModel.swift | 9 +-- .../View/InviteUsersScreen.swift | 3 +- .../JoinRoomScreenCoordinator.swift | 6 +- .../JoinRoomScreenViewModel.swift | 7 +-- .../JoinRoomScreen/View/JoinRoomScreen.swift | 3 +- ...MediaEventsTimelineScreenCoordinator.swift | 15 ++--- .../View/MediaEventsTimelineScreen.swift | 5 +- .../MessageForwardingScreenCoordinator.swift | 8 +-- .../MessageForwardingScreenViewModel.swift | 9 ++- .../View/MessageForwardingScreen.swift | 5 +- ...innedEventsTimelineScreenCoordinator.swift | 8 +-- .../View/PinnedEventsTimelineScreen.swift | 5 +- .../RoomDetailsEditScreenCoordinator.swift | 6 +- .../RoomDetailsEditScreenViewModel.swift | 8 +-- .../View/RoomDetailsEditScreen.swift | 6 +- .../RoomDetailsScreenCoordinator.swift | 6 +- .../RoomDetailsScreenViewModel.swift | 23 +++---- .../View/RoomDetailsScreen.swift | 9 +-- ...RoomDirectorySearchScreenCoordinator.swift | 8 +-- .../RoomDirectorySearchScreenViewModel.swift | 9 ++- .../View/RoomDirectorySearchScreen.swift | 5 +- .../RoomMemberDetailsScreenCoordinator.swift | 6 +- .../RoomMemberDetailsScreenViewModel.swift | 27 ++++---- .../View/RoomMemberDetailsScreen.swift | 3 +- .../RoomMembersListScreenCoordinator.swift | 6 +- .../RoomMembersListScreenViewModel.swift | 35 +++++------ .../View/RoomMembersListScreen.swift | 3 +- .../RoomMembersListScreenMemberCell.swift | 3 +- .../RoomScreen/RoomScreenCoordinator.swift | 13 ++-- .../RoomScreen/RoomScreenViewModel.swift | 10 ++- .../Screens/RoomScreen/View/RoomScreen.swift | 5 +- .../RoomSelectionScreenCoordinator.swift | 8 +-- .../RoomSelectionScreenViewModel.swift | 9 ++- .../View/RoomSelectionScreen.swift | 5 +- .../UserDetailsEditScreenCoordinator.swift | 6 +- .../UserDetailsEditScreenViewModel.swift | 7 +-- .../View/UserDetailsEditScreen.swift | 3 +- .../StartChatScreenCoordinator.swift | 3 +- .../ThreadTimelineScreenCoordinator.swift | 10 ++- .../Timeline/TimelineInteractionHandler.swift | 18 +++--- .../Screens/Timeline/TimelineViewModel.swift | 47 +++++++------- .../ReadReceiptsSummaryView.swift | 5 +- .../Style/TimelineItemBubbledStylerView.swift | 5 +- .../TimelineReadReceiptsView.swift | 5 +- .../HighlightedTimelineItemModifier.swift | 5 +- .../Screens/Timeline/View/TimelineView.swift | 5 +- .../UserProfileScreenCoordinator.swift | 6 +- .../UserProfileScreenViewModel.swift | 25 ++++---- .../View/UserProfileScreen.swift | 3 +- .../UITests/UITestsAppCoordinator.swift | 42 +++++-------- .../BlockedUsersScreenViewModelTests.swift | 6 +- .../Sources/InviteUsersViewModelTests.swift | 3 +- .../JoinRoomScreenViewModelTests.swift | 3 +- ...essageForwardingScreenViewModelTests.swift | 5 +- .../NotificationManagerTests.swift | 4 +- UnitTests/Sources/PillContextTests.swift | 55 +++++++--------- .../RoomDetailsEditScreenViewModelTests.swift | 3 +- .../RoomDetailsScreenViewModelTests.swift | 63 +++++++------------ .../RoomMemberDetailsViewModelTests.swift | 21 +++---- .../RoomMembersListScreenViewModelTests.swift | 3 +- .../Sources/RoomScreenViewModelTests.swift | 27 +++----- .../Sources/TimelineViewModelTests.swift | 40 +++++------- .../UserProfileScreenViewModelTests.swift | 6 +- 74 files changed, 315 insertions(+), 499 deletions(-) diff --git a/ElementX/Sources/FlowCoordinators/ChatsFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/ChatsFlowCoordinator.swift index 5ade3a7bc..a85ab173c 100644 --- a/ElementX/Sources/FlowCoordinators/ChatsFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/ChatsFlowCoordinator.swift @@ -723,8 +723,7 @@ class ChatsFlowCoordinator: FlowCoordinatorProtocol { // MARK: Room Directory Search private func presentRoomDirectorySearch() { - let coordinator = RoomDirectorySearchScreenCoordinator(parameters: .init(clientProxy: userSession.clientProxy, - mediaProvider: userSession.mediaProvider, + let coordinator = RoomDirectorySearchScreenCoordinator(parameters: .init(userSession: userSession, userIndicatorController: flowParameters.userIndicatorController)) coordinator.actionsPublisher.sink { [weak self] action in @@ -758,8 +757,7 @@ class ChatsFlowCoordinator: FlowCoordinatorProtocol { let navigationStackCoordinator = NavigationStackCoordinator() let parameters = UserProfileScreenCoordinatorParameters(userID: userID, isPresentedModally: true, - clientProxy: userSession.clientProxy, - mediaProvider: userSession.mediaProvider, + userSession: userSession, userIndicatorController: flowParameters.userIndicatorController, analytics: flowParameters.analytics) let coordinator = UserProfileScreenCoordinator(parameters: parameters) @@ -791,9 +789,8 @@ class ChatsFlowCoordinator: FlowCoordinatorProtocol { let stackCoordinator = NavigationStackCoordinator() - let coordinator = RoomSelectionScreenCoordinator(parameters: .init(clientProxy: userSession.clientProxy, - roomSummaryProvider: roomSummaryProvider, - mediaProvider: userSession.mediaProvider)) + let coordinator = RoomSelectionScreenCoordinator(parameters: .init(userSession: userSession, + roomSummaryProvider: roomSummaryProvider)) coordinator.actionsPublisher.sink { [weak self] action in guard let self else { return } diff --git a/ElementX/Sources/FlowCoordinators/MediaEventsTimelineFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/MediaEventsTimelineFlowCoordinator.swift index d06ee50da..c33fa5e18 100644 --- a/ElementX/Sources/FlowCoordinators/MediaEventsTimelineFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/MediaEventsTimelineFlowCoordinator.swift @@ -77,7 +77,7 @@ class MediaEventsTimelineFlowCoordinator: FlowCoordinatorProtocol { let parameters = MediaEventsTimelineScreenCoordinatorParameters(roomProxy: roomProxy, mediaTimelineController: mediaTimelineController, filesTimelineController: filesTimelineController, - mediaProvider: userSession.mediaProvider, + userSession: userSession, mediaPlayerProvider: MediaPlayerProvider(), voiceMessageMediaManager: userSession.voiceMessageMediaManager, appMediator: flowParameters.appMediator, @@ -85,8 +85,7 @@ class MediaEventsTimelineFlowCoordinator: FlowCoordinatorProtocol { analytics: flowParameters.analytics, emojiProvider: flowParameters.emojiProvider, userIndicatorController: flowParameters.userIndicatorController, - timelineControllerFactory: flowParameters.timelineControllerFactory, - clientProxy: userSession.clientProxy) + timelineControllerFactory: flowParameters.timelineControllerFactory) let coordinator = MediaEventsTimelineScreenCoordinator(parameters: parameters) diff --git a/ElementX/Sources/FlowCoordinators/PinnedEventsTimelineFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/PinnedEventsTimelineFlowCoordinator.swift index 6694267a8..eb955ee64 100644 --- a/ElementX/Sources/FlowCoordinators/PinnedEventsTimelineFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/PinnedEventsTimelineFlowCoordinator.swift @@ -63,7 +63,7 @@ class PinnedEventsTimelineFlowCoordinator: FlowCoordinatorProtocol { let coordinator = PinnedEventsTimelineScreenCoordinator(parameters: .init(roomProxy: roomProxy, timelineController: timelineController, - mediaProvider: userSession.mediaProvider, + userSession: userSession, mediaPlayerProvider: MediaPlayerProvider(), voiceMessageMediaManager: userSession.voiceMessageMediaManager, appMediator: flowParameters.appMediator, @@ -71,7 +71,6 @@ class PinnedEventsTimelineFlowCoordinator: FlowCoordinatorProtocol { analytics: flowParameters.analytics, emojiProvider: flowParameters.emojiProvider, timelineControllerFactory: flowParameters.timelineControllerFactory, - clientProxy: userSession.clientProxy, userIndicatorController: flowParameters.userIndicatorController)) coordinator.actions @@ -127,9 +126,8 @@ class PinnedEventsTimelineFlowCoordinator: FlowCoordinatorProtocol { let stackCoordinator = NavigationStackCoordinator() let parameters = MessageForwardingScreenCoordinatorParameters(forwardingItem: forwardingItem, - clientProxy: userSession.clientProxy, + userSession: userSession, roomSummaryProvider: roomSummaryProvider, - mediaProvider: userSession.mediaProvider, userIndicatorController: flowParameters.userIndicatorController) let coordinator = MessageForwardingScreenCoordinator(parameters: parameters) diff --git a/ElementX/Sources/FlowCoordinators/RoomFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/RoomFlowCoordinator.swift index 48c0324bc..cc1612a44 100644 --- a/ElementX/Sources/FlowCoordinators/RoomFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/RoomFlowCoordinator.swift @@ -544,12 +544,11 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol { timelineItemfactory: timelineItemFactory, threadRootEventID: nil) - let parameters = RoomScreenCoordinatorParameters(clientProxy: userSession.clientProxy, + let parameters = RoomScreenCoordinatorParameters(userSession: userSession, roomProxy: roomProxy, focussedEvent: presentationAction?.focusedEvent, sharedText: presentationAction?.sharedText, timelineController: timelineController, - mediaProvider: userSession.mediaProvider, mediaPlayerProvider: MediaPlayerProvider(), voiceMessageMediaManager: userSession.voiceMessageMediaManager, emojiProvider: flowParameters.emojiProvider, @@ -644,10 +643,9 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol { timelineItemfactory: timelineItemFactory, threadRootEventID: threadRootEventID) - let coordinator = ThreadTimelineScreenCoordinator(parameters: .init(clientProxy: userSession.clientProxy, + let coordinator = ThreadTimelineScreenCoordinator(parameters: .init(userSession: userSession, roomProxy: roomProxy, timelineController: timelineController, - mediaProvider: userSession.mediaProvider, mediaPlayerProvider: MediaPlayerProvider(), voiceMessageMediaManager: userSession.voiceMessageMediaManager, emojiProvider: flowParameters.emojiProvider, @@ -703,8 +701,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol { private func presentJoinRoomScreen(via: [String], animated: Bool) { let coordinator = JoinRoomScreenCoordinator(parameters: .init(roomID: roomID, via: via, - clientProxy: userSession.clientProxy, - mediaProvider: userSession.mediaProvider, + userSession: userSession, userIndicatorController: flowParameters.userIndicatorController, appSettings: flowParameters.appSettings)) @@ -777,8 +774,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol { private func presentRoomDetails(isRoot: Bool, animated: Bool) async { let params = RoomDetailsScreenCoordinatorParameters(roomProxy: roomProxy, - clientProxy: userSession.clientProxy, - mediaProvider: userSession.mediaProvider, + userSession: userSession, analyticsService: flowParameters.analytics, userIndicatorController: flowParameters.userIndicatorController, notificationSettings: userSession.clientProxy.notificationSettings, @@ -842,9 +838,8 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol { } private func presentRoomMembersList() { - let parameters = RoomMembersListScreenCoordinatorParameters(clientProxy: userSession.clientProxy, + let parameters = RoomMembersListScreenCoordinatorParameters(userSession: userSession, roomProxy: roomProxy, - mediaProvider: userSession.mediaProvider, userIndicatorController: flowParameters.userIndicatorController, analytics: flowParameters.analytics) let coordinator = RoomMembersListScreenCoordinator(parameters: parameters) @@ -882,8 +877,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol { let stackCoordinator = NavigationStackCoordinator() let roomDetailsEditParameters = RoomDetailsEditScreenCoordinatorParameters(roomProxy: roomProxy, - clientProxy: userSession.clientProxy, - mediaProvider: userSession.mediaProvider, + userSession: userSession, mediaUploadingPreprocessor: MediaUploadingPreprocessor(appSettings: flowParameters.appSettings), navigationStackCoordinator: stackCoordinator, userIndicatorController: flowParameters.userIndicatorController, @@ -1213,8 +1207,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol { private func presentRoomMemberDetails(userID: String) { let params = RoomMemberDetailsScreenCoordinatorParameters(userID: userID, roomProxy: roomProxy, - clientProxy: userSession.clientProxy, - mediaProvider: userSession.mediaProvider, + userSession: userSession, userIndicatorController: flowParameters.userIndicatorController, analytics: flowParameters.analytics) let coordinator = RoomMemberDetailsScreenCoordinator(parameters: params) @@ -1242,8 +1235,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol { private func replaceRoomMemberDetailsWithUserProfile(userID: String) { let parameters = UserProfileScreenCoordinatorParameters(userID: userID, isPresentedModally: false, - clientProxy: userSession.clientProxy, - mediaProvider: userSession.mediaProvider, + userSession: userSession, userIndicatorController: flowParameters.userIndicatorController, analytics: flowParameters.analytics) let coordinator = UserProfileScreenCoordinator(parameters: parameters) @@ -1277,9 +1269,8 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol { let stackCoordinator = NavigationStackCoordinator() let parameters = MessageForwardingScreenCoordinatorParameters(forwardingItem: forwardingItem, - clientProxy: userSession.clientProxy, + userSession: userSession, roomSummaryProvider: roomSummaryProvider, - mediaProvider: userSession.mediaProvider, userIndicatorController: flowParameters.userIndicatorController) let coordinator = MessageForwardingScreenCoordinator(parameters: parameters) @@ -1349,10 +1340,9 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol { let selectedUsersSubject: CurrentValueSubject<[UserProfileProxy], Never> = .init([]) let stackCoordinator = NavigationStackCoordinator() - let inviteParameters = InviteUsersScreenCoordinatorParameters(clientProxy: userSession.clientProxy, + let inviteParameters = InviteUsersScreenCoordinatorParameters(userSession: userSession, selectedUsers: .init(selectedUsersSubject), roomType: .room(roomProxy: roomProxy), - mediaProvider: userSession.mediaProvider, userDiscoveryService: UserDiscoveryService(clientProxy: userSession.clientProxy), userIndicatorController: flowParameters.userIndicatorController) diff --git a/ElementX/Sources/FlowCoordinators/SettingsFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/SettingsFlowCoordinator.swift index 3cc7c06c8..e3ee9a343 100644 --- a/ElementX/Sources/FlowCoordinators/SettingsFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/SettingsFlowCoordinator.swift @@ -133,8 +133,7 @@ class SettingsFlowCoordinator: FlowCoordinatorProtocol { private func presentUserDetailsEditScreen() { let coordinator = UserDetailsEditScreenCoordinator(parameters: .init(orientationManager: flowParameters.windowManager, - clientProxy: flowParameters.userSession.clientProxy, - mediaProvider: flowParameters.userSession.mediaProvider, + userSession: flowParameters.userSession, mediaUploadingPreprocessor: MediaUploadingPreprocessor(appSettings: flowParameters.appSettings), navigationStackCoordinator: navigationStackCoordinator, userIndicatorController: flowParameters.userIndicatorController, @@ -175,8 +174,7 @@ class SettingsFlowCoordinator: FlowCoordinatorProtocol { private func presentBlockedUsersScreen() { let coordinator = BlockedUsersScreenCoordinator(parameters: .init(hideProfiles: flowParameters.appSettings.hideIgnoredUserProfiles, - clientProxy: flowParameters.userSession.clientProxy, - mediaProvider: flowParameters.userSession.mediaProvider, + userSession: flowParameters.userSession, userIndicatorController: flowParameters.userIndicatorController)) navigationStackCoordinator.push(coordinator) } diff --git a/ElementX/Sources/Mocks/UserSessionMock.swift b/ElementX/Sources/Mocks/UserSessionMock.swift index abd1871f7..6f5794518 100644 --- a/ElementX/Sources/Mocks/UserSessionMock.swift +++ b/ElementX/Sources/Mocks/UserSessionMock.swift @@ -9,7 +9,7 @@ import Combine import Foundation struct UserSessionMockConfiguration { - let clientProxy: ClientProxyProtocol + var clientProxy: ClientProxyProtocol = ClientProxyMock(.init()) } extension UserSessionMock { diff --git a/ElementX/Sources/Mocks/UserSessionStoreMock.swift b/ElementX/Sources/Mocks/UserSessionStoreMock.swift index 9174d6df1..4ea2f1e7b 100644 --- a/ElementX/Sources/Mocks/UserSessionStoreMock.swift +++ b/ElementX/Sources/Mocks/UserSessionStoreMock.swift @@ -11,7 +11,7 @@ extension UserSessionStoreMock { convenience init(configuration: Configuration) { self.init() - userSessionForSessionDirectoriesPassphraseReturnValue = .success(UserSessionMock(.init(clientProxy: ClientProxyMock(.init())))) + userSessionForSessionDirectoriesPassphraseReturnValue = .success(UserSessionMock(.init())) clientSessionDelegate = KeychainControllerMock() } } diff --git a/ElementX/Sources/Screens/BlockedUsersScreen/BlockedUsersScreenCoordinator.swift b/ElementX/Sources/Screens/BlockedUsersScreen/BlockedUsersScreenCoordinator.swift index b56a66826..50abf7012 100644 --- a/ElementX/Sources/Screens/BlockedUsersScreen/BlockedUsersScreenCoordinator.swift +++ b/ElementX/Sources/Screens/BlockedUsersScreen/BlockedUsersScreenCoordinator.swift @@ -10,8 +10,7 @@ import SwiftUI struct BlockedUsersScreenCoordinatorParameters { let hideProfiles: Bool - let clientProxy: ClientProxyProtocol - let mediaProvider: MediaProviderProtocol + let userSession: UserSessionProtocol let userIndicatorController: UserIndicatorControllerProtocol } @@ -20,8 +19,7 @@ final class BlockedUsersScreenCoordinator: CoordinatorProtocol { init(parameters: BlockedUsersScreenCoordinatorParameters) { viewModel = BlockedUsersScreenViewModel(hideProfiles: parameters.hideProfiles, - clientProxy: parameters.clientProxy, - mediaProvider: parameters.mediaProvider, + userSession: parameters.userSession, userIndicatorController: parameters.userIndicatorController) } diff --git a/ElementX/Sources/Screens/BlockedUsersScreen/BlockedUsersScreenViewModel.swift b/ElementX/Sources/Screens/BlockedUsersScreen/BlockedUsersScreenViewModel.swift index aea18216d..7367f784d 100644 --- a/ElementX/Sources/Screens/BlockedUsersScreen/BlockedUsersScreenViewModel.swift +++ b/ElementX/Sources/Screens/BlockedUsersScreen/BlockedUsersScreenViewModel.swift @@ -16,17 +16,16 @@ class BlockedUsersScreenViewModel: BlockedUsersScreenViewModelType, BlockedUsers let userIndicatorController: UserIndicatorControllerProtocol init(hideProfiles: Bool, - clientProxy: ClientProxyProtocol, - mediaProvider: MediaProviderProtocol, + userSession: UserSessionProtocol, userIndicatorController: UserIndicatorControllerProtocol) { self.hideProfiles = hideProfiles - self.clientProxy = clientProxy + clientProxy = userSession.clientProxy self.userIndicatorController = userIndicatorController let ignoredUsers = clientProxy.ignoredUsersPublisher.value?.map { UserProfileProxy(userID: $0) } super.init(initialViewState: BlockedUsersScreenViewState(blockedUsers: ignoredUsers ?? []), - mediaProvider: mediaProvider) + mediaProvider: userSession.mediaProvider) showLoadingIndicator() diff --git a/ElementX/Sources/Screens/BlockedUsersScreen/View/BlockedUsersScreen.swift b/ElementX/Sources/Screens/BlockedUsersScreen/View/BlockedUsersScreen.swift index 4ee0c476e..01e7e77c5 100644 --- a/ElementX/Sources/Screens/BlockedUsersScreen/View/BlockedUsersScreen.swift +++ b/ElementX/Sources/Screens/BlockedUsersScreen/View/BlockedUsersScreen.swift @@ -56,8 +56,7 @@ struct BlockedUsersScreen: View { struct BlockedUsersScreen_Previews: PreviewProvider, TestablePreview { static let viewModel = BlockedUsersScreenViewModel(hideProfiles: true, - clientProxy: ClientProxyMock(.init(userID: RoomMemberProxyMock.mockMe.userID)), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init(clientProxy: ClientProxyMock(.init(userID: RoomMemberProxyMock.mockMe.userID)))), userIndicatorController: UserIndicatorControllerMock()) static var previews: some View { diff --git a/ElementX/Sources/Screens/InviteUsersScreen/InviteUsersScreenCoordinator.swift b/ElementX/Sources/Screens/InviteUsersScreen/InviteUsersScreenCoordinator.swift index 19a5f3c83..fa5a1c15f 100644 --- a/ElementX/Sources/Screens/InviteUsersScreen/InviteUsersScreenCoordinator.swift +++ b/ElementX/Sources/Screens/InviteUsersScreen/InviteUsersScreenCoordinator.swift @@ -9,10 +9,9 @@ import Combine import SwiftUI struct InviteUsersScreenCoordinatorParameters { - let clientProxy: ClientProxyProtocol + let userSession: UserSessionProtocol let selectedUsers: CurrentValuePublisher<[UserProfileProxy], Never> let roomType: InviteUsersScreenRoomType - let mediaProvider: MediaProviderProtocol let userDiscoveryService: UserDiscoveryServiceProtocol let userIndicatorController: UserIndicatorControllerProtocol } @@ -34,10 +33,9 @@ final class InviteUsersScreenCoordinator: CoordinatorProtocol { } init(parameters: InviteUsersScreenCoordinatorParameters) { - viewModel = InviteUsersScreenViewModel(clientProxy: parameters.clientProxy, + viewModel = InviteUsersScreenViewModel(userSession: parameters.userSession, selectedUsers: parameters.selectedUsers, roomType: parameters.roomType, - mediaProvider: parameters.mediaProvider, userDiscoveryService: parameters.userDiscoveryService, userIndicatorController: parameters.userIndicatorController) } diff --git a/ElementX/Sources/Screens/InviteUsersScreen/InviteUsersScreenViewModel.swift b/ElementX/Sources/Screens/InviteUsersScreen/InviteUsersScreenViewModel.swift index 2ae4126f4..f07c6eb05 100644 --- a/ElementX/Sources/Screens/InviteUsersScreen/InviteUsersScreenViewModel.swift +++ b/ElementX/Sources/Screens/InviteUsersScreen/InviteUsersScreenViewModel.swift @@ -23,23 +23,24 @@ class InviteUsersScreenViewModel: InviteUsersScreenViewModelType, InviteUsersScr actionsSubject.eraseToAnyPublisher() } - init(clientProxy: ClientProxyProtocol, + init(userSession: UserSessionProtocol, selectedUsers: CurrentValuePublisher<[UserProfileProxy], Never>, roomType: InviteUsersScreenRoomType, - mediaProvider: MediaProviderProtocol, userDiscoveryService: UserDiscoveryServiceProtocol, userIndicatorController: UserIndicatorControllerProtocol) { self.roomType = roomType self.userDiscoveryService = userDiscoveryService self.userIndicatorController = userIndicatorController - super.init(initialViewState: InviteUsersScreenViewState(selectedUsers: selectedUsers.value, isCreatingRoom: roomType.isCreatingRoom), mediaProvider: mediaProvider) + super.init(initialViewState: InviteUsersScreenViewState(selectedUsers: selectedUsers.value, + isCreatingRoom: roomType.isCreatingRoom), + mediaProvider: userSession.mediaProvider) setupSubscriptions(selectedUsers: selectedUsers) fetchMembersIfNeeded() Task { - suggestedUsers = await clientProxy.recentConversationCounterparts() + suggestedUsers = await userSession.clientProxy.recentConversationCounterparts() if state.usersSection.type == .suggestions { state.usersSection = .init(type: .suggestions, users: suggestedUsers) diff --git a/ElementX/Sources/Screens/InviteUsersScreen/View/InviteUsersScreen.swift b/ElementX/Sources/Screens/InviteUsersScreen/View/InviteUsersScreen.swift index 9a0135335..2df7fe6f7 100644 --- a/ElementX/Sources/Screens/InviteUsersScreen/View/InviteUsersScreen.swift +++ b/ElementX/Sources/Screens/InviteUsersScreen/View/InviteUsersScreen.swift @@ -153,10 +153,9 @@ struct InviteUsersScreen_Previews: PreviewProvider, TestablePreview { static let viewModel = { let userDiscoveryService = UserDiscoveryServiceMock() userDiscoveryService.searchProfilesWithReturnValue = .success([.mockAlice]) - return InviteUsersScreenViewModel(clientProxy: ClientProxyMock(.init()), + return InviteUsersScreenViewModel(userSession: UserSessionMock(.init()), selectedUsers: .init([]), roomType: .draft, - mediaProvider: MediaProviderMock(configuration: .init()), userDiscoveryService: userDiscoveryService, userIndicatorController: UserIndicatorControllerMock()) }() diff --git a/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenCoordinator.swift b/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenCoordinator.swift index bae7dfb46..60f8d6a96 100644 --- a/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenCoordinator.swift +++ b/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenCoordinator.swift @@ -11,8 +11,7 @@ import SwiftUI struct JoinRoomScreenCoordinatorParameters { let roomID: String let via: [String] - let clientProxy: ClientProxyProtocol - let mediaProvider: MediaProviderProtocol + let userSession: UserSessionProtocol let userIndicatorController: UserIndicatorControllerProtocol let appSettings: AppSettings } @@ -37,8 +36,7 @@ final class JoinRoomScreenCoordinator: CoordinatorProtocol { viewModel = JoinRoomScreenViewModel(roomID: parameters.roomID, via: parameters.via, appSettings: parameters.appSettings, - clientProxy: parameters.clientProxy, - mediaProvider: parameters.mediaProvider, + userSession: parameters.userSession, userIndicatorController: parameters.userIndicatorController) } diff --git a/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenViewModel.swift b/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenViewModel.swift index e94fcc5dd..caca67727 100644 --- a/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenViewModel.swift +++ b/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenViewModel.swift @@ -30,16 +30,15 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo init(roomID: String, via: [String], appSettings: AppSettings, - clientProxy: ClientProxyProtocol, - mediaProvider: MediaProviderProtocol, + userSession: UserSessionProtocol, userIndicatorController: UserIndicatorControllerProtocol) { self.roomID = roomID self.via = via self.appSettings = appSettings - self.clientProxy = clientProxy + clientProxy = userSession.clientProxy self.userIndicatorController = userIndicatorController - super.init(initialViewState: JoinRoomScreenViewState(roomID: roomID), mediaProvider: mediaProvider) + super.init(initialViewState: JoinRoomScreenViewState(roomID: roomID), mediaProvider: userSession.mediaProvider) clientProxy.hideInviteAvatarsPublisher .removeDuplicates() diff --git a/ElementX/Sources/Screens/JoinRoomScreen/View/JoinRoomScreen.swift b/ElementX/Sources/Screens/JoinRoomScreen/View/JoinRoomScreen.swift index a889b792f..e606aa132 100644 --- a/ElementX/Sources/Screens/JoinRoomScreen/View/JoinRoomScreen.swift +++ b/ElementX/Sources/Screens/JoinRoomScreen/View/JoinRoomScreen.swift @@ -416,8 +416,7 @@ struct JoinRoomScreen_Previews: PreviewProvider, TestablePreview { return JoinRoomScreenViewModel(roomID: "1", via: [], appSettings: appSettings, - clientProxy: clientProxy, - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init(clientProxy: clientProxy)), userIndicatorController: ServiceLocator.shared.userIndicatorController) } } diff --git a/ElementX/Sources/Screens/MediaEventsTimelineScreen/MediaEventsTimelineScreenCoordinator.swift b/ElementX/Sources/Screens/MediaEventsTimelineScreen/MediaEventsTimelineScreenCoordinator.swift index a8f438cbf..5e7834f5c 100644 --- a/ElementX/Sources/Screens/MediaEventsTimelineScreen/MediaEventsTimelineScreenCoordinator.swift +++ b/ElementX/Sources/Screens/MediaEventsTimelineScreen/MediaEventsTimelineScreenCoordinator.swift @@ -12,7 +12,7 @@ struct MediaEventsTimelineScreenCoordinatorParameters { let roomProxy: JoinedRoomProxyProtocol let mediaTimelineController: TimelineControllerProtocol let filesTimelineController: TimelineControllerProtocol - let mediaProvider: MediaProviderProtocol + let userSession: UserSessionProtocol let mediaPlayerProvider: MediaPlayerProviderProtocol let voiceMessageMediaManager: VoiceMessageMediaManagerProtocol let appMediator: AppMediatorProtocol @@ -21,7 +21,6 @@ struct MediaEventsTimelineScreenCoordinatorParameters { let emojiProvider: EmojiProviderProtocol let userIndicatorController: UserIndicatorControllerProtocol let timelineControllerFactory: TimelineControllerFactoryProtocol - let clientProxy: ClientProxyProtocol } enum MediaEventsTimelineScreenCoordinatorAction { @@ -44,7 +43,7 @@ final class MediaEventsTimelineScreenCoordinator: CoordinatorProtocol { let mediaTimelineViewModel = TimelineViewModel(roomProxy: parameters.roomProxy, timelineController: parameters.mediaTimelineController, - mediaProvider: parameters.mediaProvider, + userSession: parameters.userSession, mediaPlayerProvider: parameters.mediaPlayerProvider, voiceMessageMediaManager: parameters.voiceMessageMediaManager, userIndicatorController: parameters.userIndicatorController, @@ -52,12 +51,11 @@ final class MediaEventsTimelineScreenCoordinator: CoordinatorProtocol { appSettings: parameters.appSettings, analyticsService: parameters.analytics, emojiProvider: parameters.emojiProvider, - timelineControllerFactory: parameters.timelineControllerFactory, - clientProxy: parameters.clientProxy) + timelineControllerFactory: parameters.timelineControllerFactory) let filesTimelineViewModel = TimelineViewModel(roomProxy: parameters.roomProxy, timelineController: parameters.filesTimelineController, - mediaProvider: parameters.mediaProvider, + userSession: parameters.userSession, mediaPlayerProvider: parameters.mediaPlayerProvider, voiceMessageMediaManager: parameters.voiceMessageMediaManager, userIndicatorController: parameters.userIndicatorController, @@ -65,12 +63,11 @@ final class MediaEventsTimelineScreenCoordinator: CoordinatorProtocol { appSettings: parameters.appSettings, analyticsService: parameters.analytics, emojiProvider: parameters.emojiProvider, - timelineControllerFactory: parameters.timelineControllerFactory, - clientProxy: parameters.clientProxy) + timelineControllerFactory: parameters.timelineControllerFactory) viewModel = MediaEventsTimelineScreenViewModel(mediaTimelineViewModel: mediaTimelineViewModel, filesTimelineViewModel: filesTimelineViewModel, - mediaProvider: parameters.mediaProvider, + mediaProvider: parameters.userSession.mediaProvider, userIndicatorController: parameters.userIndicatorController, appMediator: parameters.appMediator) diff --git a/ElementX/Sources/Screens/MediaEventsTimelineScreen/View/MediaEventsTimelineScreen.swift b/ElementX/Sources/Screens/MediaEventsTimelineScreen/View/MediaEventsTimelineScreen.swift index 60cb736ed..ef771bf83 100644 --- a/ElementX/Sources/Screens/MediaEventsTimelineScreen/View/MediaEventsTimelineScreen.swift +++ b/ElementX/Sources/Screens/MediaEventsTimelineScreen/View/MediaEventsTimelineScreen.swift @@ -274,7 +274,7 @@ struct MediaEventsTimelineScreen_Previews: PreviewProvider, TestablePreview { return TimelineViewModel(roomProxy: JoinedRoomProxyMock(.init(name: "Preview room")), timelineController: timelineController, - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: UserIndicatorControllerMock(), @@ -282,7 +282,6 @@ struct MediaEventsTimelineScreen_Previews: PreviewProvider, TestablePreview { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: ClientProxyMock(.init())) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) } } diff --git a/ElementX/Sources/Screens/MessageForwardingScreen/MessageForwardingScreenCoordinator.swift b/ElementX/Sources/Screens/MessageForwardingScreen/MessageForwardingScreenCoordinator.swift index 055a1fa84..750fa4cd7 100644 --- a/ElementX/Sources/Screens/MessageForwardingScreen/MessageForwardingScreenCoordinator.swift +++ b/ElementX/Sources/Screens/MessageForwardingScreen/MessageForwardingScreenCoordinator.swift @@ -10,9 +10,8 @@ import SwiftUI struct MessageForwardingScreenCoordinatorParameters { let forwardingItem: MessageForwardingItem - let clientProxy: ClientProxyProtocol + let userSession: UserSessionProtocol let roomSummaryProvider: RoomSummaryProviderProtocol - let mediaProvider: MediaProviderProtocol let userIndicatorController: UserIndicatorControllerProtocol } @@ -32,10 +31,9 @@ final class MessageForwardingScreenCoordinator: CoordinatorProtocol { init(parameters: MessageForwardingScreenCoordinatorParameters) { viewModel = MessageForwardingScreenViewModel(forwardingItem: parameters.forwardingItem, - clientProxy: parameters.clientProxy, + userSession: parameters.userSession, roomSummaryProvider: parameters.roomSummaryProvider, - userIndicatorController: parameters.userIndicatorController, - mediaProvider: parameters.mediaProvider) + userIndicatorController: parameters.userIndicatorController) } func start() { diff --git a/ElementX/Sources/Screens/MessageForwardingScreen/MessageForwardingScreenViewModel.swift b/ElementX/Sources/Screens/MessageForwardingScreen/MessageForwardingScreenViewModel.swift index f7e62d420..00420ee54 100644 --- a/ElementX/Sources/Screens/MessageForwardingScreen/MessageForwardingScreenViewModel.swift +++ b/ElementX/Sources/Screens/MessageForwardingScreen/MessageForwardingScreenViewModel.swift @@ -23,16 +23,15 @@ class MessageForwardingScreenViewModel: MessageForwardingScreenViewModelType, Me } init(forwardingItem: MessageForwardingItem, - clientProxy: ClientProxyProtocol, + userSession: UserSessionProtocol, roomSummaryProvider: RoomSummaryProviderProtocol, - userIndicatorController: UserIndicatorControllerProtocol, - mediaProvider: MediaProviderProtocol) { + userIndicatorController: UserIndicatorControllerProtocol) { self.forwardingItem = forwardingItem - self.clientProxy = clientProxy + clientProxy = userSession.clientProxy self.roomSummaryProvider = roomSummaryProvider self.userIndicatorController = userIndicatorController - super.init(initialViewState: MessageForwardingScreenViewState(), mediaProvider: mediaProvider) + super.init(initialViewState: MessageForwardingScreenViewState(), mediaProvider: userSession.mediaProvider) roomSummaryProvider.roomListPublisher .receive(on: DispatchQueue.main) diff --git a/ElementX/Sources/Screens/MessageForwardingScreen/View/MessageForwardingScreen.swift b/ElementX/Sources/Screens/MessageForwardingScreen/View/MessageForwardingScreen.swift index 2718db415..c6dfb0914 100644 --- a/ElementX/Sources/Screens/MessageForwardingScreen/View/MessageForwardingScreen.swift +++ b/ElementX/Sources/Screens/MessageForwardingScreen/View/MessageForwardingScreen.swift @@ -97,10 +97,9 @@ struct MessageForwardingScreen_Previews: PreviewProvider, TestablePreview { let viewModel = MessageForwardingScreenViewModel(forwardingItem: .init(id: .randomEvent, roomID: "", content: .init(noPointer: .init())), - clientProxy: ClientProxyMock(.init()), + userSession: UserSessionMock(.init()), roomSummaryProvider: summaryProvider, - userIndicatorController: UserIndicatorControllerMock(), - mediaProvider: MediaProviderMock(configuration: .init())) + userIndicatorController: UserIndicatorControllerMock()) NavigationStack { MessageForwardingScreen(context: viewModel.context) diff --git a/ElementX/Sources/Screens/PinnedEventsTimelineScreen/PinnedEventsTimelineScreenCoordinator.swift b/ElementX/Sources/Screens/PinnedEventsTimelineScreen/PinnedEventsTimelineScreenCoordinator.swift index 2c3ccd10d..3dedf9bc5 100644 --- a/ElementX/Sources/Screens/PinnedEventsTimelineScreen/PinnedEventsTimelineScreenCoordinator.swift +++ b/ElementX/Sources/Screens/PinnedEventsTimelineScreen/PinnedEventsTimelineScreenCoordinator.swift @@ -11,7 +11,7 @@ import SwiftUI struct PinnedEventsTimelineScreenCoordinatorParameters { let roomProxy: JoinedRoomProxyProtocol let timelineController: TimelineControllerProtocol - let mediaProvider: MediaProviderProtocol + let userSession: UserSessionProtocol let mediaPlayerProvider: MediaPlayerProviderProtocol let voiceMessageMediaManager: VoiceMessageMediaManagerProtocol let appMediator: AppMediatorProtocol @@ -19,7 +19,6 @@ struct PinnedEventsTimelineScreenCoordinatorParameters { let analytics: AnalyticsService let emojiProvider: EmojiProviderProtocol let timelineControllerFactory: TimelineControllerFactoryProtocol - let clientProxy: ClientProxyProtocol let userIndicatorController: UserIndicatorControllerProtocol } @@ -49,7 +48,7 @@ final class PinnedEventsTimelineScreenCoordinator: CoordinatorProtocol { viewModel = PinnedEventsTimelineScreenViewModel(analyticsService: parameters.analytics) timelineViewModel = TimelineViewModel(roomProxy: parameters.roomProxy, timelineController: parameters.timelineController, - mediaProvider: parameters.mediaProvider, + userSession: parameters.userSession, mediaPlayerProvider: parameters.mediaPlayerProvider, voiceMessageMediaManager: parameters.voiceMessageMediaManager, userIndicatorController: parameters.userIndicatorController, @@ -57,8 +56,7 @@ final class PinnedEventsTimelineScreenCoordinator: CoordinatorProtocol { appSettings: parameters.appSettings, analyticsService: parameters.analytics, emojiProvider: parameters.emojiProvider, - timelineControllerFactory: parameters.timelineControllerFactory, - clientProxy: parameters.clientProxy) + timelineControllerFactory: parameters.timelineControllerFactory) } func start() { diff --git a/ElementX/Sources/Screens/PinnedEventsTimelineScreen/View/PinnedEventsTimelineScreen.swift b/ElementX/Sources/Screens/PinnedEventsTimelineScreen/View/PinnedEventsTimelineScreen.swift index 430404bb4..27866ea9a 100644 --- a/ElementX/Sources/Screens/PinnedEventsTimelineScreen/View/PinnedEventsTimelineScreen.swift +++ b/ElementX/Sources/Screens/PinnedEventsTimelineScreen/View/PinnedEventsTimelineScreen.swift @@ -71,7 +71,7 @@ struct PinnedEventsTimelineScreen_Previews: PreviewProvider, TestablePreview { timelineController.timelineItems = [] return TimelineViewModel(roomProxy: JoinedRoomProxyMock(.init(name: "Preview room")), timelineController: timelineController, - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: UserIndicatorControllerMock(), @@ -79,8 +79,7 @@ struct PinnedEventsTimelineScreen_Previews: PreviewProvider, TestablePreview { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: ClientProxyMock(.init())) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) }() static var previews: some View { diff --git a/ElementX/Sources/Screens/RoomDetailsEditScreen/RoomDetailsEditScreenCoordinator.swift b/ElementX/Sources/Screens/RoomDetailsEditScreen/RoomDetailsEditScreenCoordinator.swift index 61979b7eb..bb9a477be 100644 --- a/ElementX/Sources/Screens/RoomDetailsEditScreen/RoomDetailsEditScreenCoordinator.swift +++ b/ElementX/Sources/Screens/RoomDetailsEditScreen/RoomDetailsEditScreenCoordinator.swift @@ -10,8 +10,7 @@ import SwiftUI struct RoomDetailsEditScreenCoordinatorParameters { let roomProxy: JoinedRoomProxyProtocol - let clientProxy: ClientProxyProtocol - let mediaProvider: MediaProviderProtocol + let userSession: UserSessionProtocol let mediaUploadingPreprocessor: MediaUploadingPreprocessor weak var navigationStackCoordinator: NavigationStackCoordinator? let userIndicatorController: UserIndicatorControllerProtocol @@ -37,8 +36,7 @@ final class RoomDetailsEditScreenCoordinator: CoordinatorProtocol { self.parameters = parameters viewModel = RoomDetailsEditScreenViewModel(roomProxy: parameters.roomProxy, - clientProxy: parameters.clientProxy, - mediaProvider: parameters.mediaProvider, + userSession: parameters.userSession, mediaUploadingPreprocessor: parameters.mediaUploadingPreprocessor, userIndicatorController: parameters.userIndicatorController) } diff --git a/ElementX/Sources/Screens/RoomDetailsEditScreen/RoomDetailsEditScreenViewModel.swift b/ElementX/Sources/Screens/RoomDetailsEditScreen/RoomDetailsEditScreenViewModel.swift index 09862d1a6..2ce04ee3c 100644 --- a/ElementX/Sources/Screens/RoomDetailsEditScreen/RoomDetailsEditScreenViewModel.swift +++ b/ElementX/Sources/Screens/RoomDetailsEditScreen/RoomDetailsEditScreenViewModel.swift @@ -22,12 +22,11 @@ class RoomDetailsEditScreenViewModel: RoomDetailsEditScreenViewModelType, RoomDe } init(roomProxy: JoinedRoomProxyProtocol, - clientProxy: ClientProxyProtocol, - mediaProvider: MediaProviderProtocol, + userSession: UserSessionProtocol, mediaUploadingPreprocessor: MediaUploadingPreprocessor, userIndicatorController: UserIndicatorControllerProtocol) { self.roomProxy = roomProxy - self.clientProxy = clientProxy + clientProxy = userSession.clientProxy self.mediaUploadingPreprocessor = mediaUploadingPreprocessor self.userIndicatorController = userIndicatorController @@ -40,7 +39,8 @@ class RoomDetailsEditScreenViewModel: RoomDetailsEditScreenViewModelType, RoomDe initialName: roomName ?? "", initialTopic: roomTopic ?? "", avatarURL: roomAvatar, - bindings: .init(name: roomName ?? "", topic: roomTopic ?? "")), mediaProvider: mediaProvider) + bindings: .init(name: roomName ?? "", topic: roomTopic ?? "")), + mediaProvider: userSession.mediaProvider) roomProxy.infoPublisher .receive(on: DispatchQueue.main) diff --git a/ElementX/Sources/Screens/RoomDetailsEditScreen/View/RoomDetailsEditScreen.swift b/ElementX/Sources/Screens/RoomDetailsEditScreen/View/RoomDetailsEditScreen.swift index ced843c26..0da30fde4 100644 --- a/ElementX/Sources/Screens/RoomDetailsEditScreen/View/RoomDetailsEditScreen.swift +++ b/ElementX/Sources/Screens/RoomDetailsEditScreen/View/RoomDetailsEditScreen.swift @@ -155,8 +155,7 @@ struct RoomDetailsEditScreen_Previews: PreviewProvider, TestablePreview { members: [.mockMeAdmin])) return RoomDetailsEditScreenViewModel(roomProxy: roomProxy, - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), mediaUploadingPreprocessor: MediaUploadingPreprocessor(appSettings: ServiceLocator.shared.settings), userIndicatorController: UserIndicatorControllerMock.default) }() @@ -167,8 +166,7 @@ struct RoomDetailsEditScreen_Previews: PreviewProvider, TestablePreview { members: [.mockAlice])) return RoomDetailsEditScreenViewModel(roomProxy: roomProxy, - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), mediaUploadingPreprocessor: MediaUploadingPreprocessor(appSettings: ServiceLocator.shared.settings), userIndicatorController: UserIndicatorControllerMock.default) }() diff --git a/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenCoordinator.swift b/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenCoordinator.swift index 05916386b..d81b182d7 100644 --- a/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenCoordinator.swift +++ b/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenCoordinator.swift @@ -10,8 +10,7 @@ import SwiftUI struct RoomDetailsScreenCoordinatorParameters { let roomProxy: JoinedRoomProxyProtocol - let clientProxy: ClientProxyProtocol - let mediaProvider: MediaProviderProtocol + let userSession: UserSessionProtocol let analyticsService: AnalyticsService let userIndicatorController: UserIndicatorControllerProtocol let notificationSettings: NotificationSettingsProxyProtocol @@ -50,8 +49,7 @@ final class RoomDetailsScreenCoordinator: CoordinatorProtocol { init(parameters: RoomDetailsScreenCoordinatorParameters) { viewModel = RoomDetailsScreenViewModel(roomProxy: parameters.roomProxy, - clientProxy: parameters.clientProxy, - mediaProvider: parameters.mediaProvider, + userSession: parameters.userSession, analyticsService: parameters.analyticsService, userIndicatorController: parameters.userIndicatorController, notificationSettingsProxy: parameters.notificationSettings, diff --git a/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenViewModel.swift b/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenViewModel.swift index e72ad167e..f38b3c5ba 100644 --- a/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenViewModel.swift +++ b/ElementX/Sources/Screens/RoomDetailsScreen/RoomDetailsScreenViewModel.swift @@ -12,9 +12,8 @@ typealias RoomDetailsScreenViewModelType = StateStoreViewModelV2 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) { diff --git a/ElementX/Sources/Screens/RoomMemberListScreen/View/RoomMembersListScreen.swift b/ElementX/Sources/Screens/RoomMemberListScreen/View/RoomMembersListScreen.swift index 6717756d4..084ff2324 100644 --- a/ElementX/Sources/Screens/RoomMemberListScreen/View/RoomMembersListScreen.swift +++ b/ElementX/Sources/Screens/RoomMemberListScreen/View/RoomMembersListScreen.swift @@ -196,12 +196,11 @@ struct RoomMembersListScreen_Previews: PreviewProvider, TestablePreview { } return RoomMembersListScreenViewModel(initialMode: initialMode, - clientProxy: clientProxyMock, + userSession: UserSessionMock(.init(clientProxy: clientProxyMock)), roomProxy: JoinedRoomProxyMock(.init(name: "Some room", members: members, ownUserID: ownUserID, powerLevelsConfiguration: .init(canUserInvite: false))), - mediaProvider: MediaProviderMock(configuration: .init()), userIndicatorController: ServiceLocator.shared.userIndicatorController, analytics: ServiceLocator.shared.analytics) } diff --git a/ElementX/Sources/Screens/RoomMemberListScreen/View/RoomMembersListScreenMemberCell.swift b/ElementX/Sources/Screens/RoomMemberListScreen/View/RoomMembersListScreenMemberCell.swift index 0c8437ec8..920a35cae 100644 --- a/ElementX/Sources/Screens/RoomMemberListScreen/View/RoomMembersListScreenMemberCell.swift +++ b/ElementX/Sources/Screens/RoomMemberListScreen/View/RoomMembersListScreenMemberCell.swift @@ -118,9 +118,8 @@ struct RoomMembersListMemberCell_Previews: PreviewProvider, TestablePreview { verificationState: .verificationViolation) ] - static let viewModel = RoomMembersListScreenViewModel(clientProxy: ClientProxyMock(.init()), + static let viewModel = RoomMembersListScreenViewModel(userSession: UserSessionMock(.init()), roomProxy: JoinedRoomProxyMock(.init(name: "Some room", members: [])), - mediaProvider: MediaProviderMock(configuration: .init()), userIndicatorController: ServiceLocator.shared.userIndicatorController, analytics: ServiceLocator.shared.analytics) static var previews: some View { diff --git a/ElementX/Sources/Screens/RoomScreen/RoomScreenCoordinator.swift b/ElementX/Sources/Screens/RoomScreen/RoomScreenCoordinator.swift index 99e41b376..917ec71f3 100644 --- a/ElementX/Sources/Screens/RoomScreen/RoomScreenCoordinator.swift +++ b/ElementX/Sources/Screens/RoomScreen/RoomScreenCoordinator.swift @@ -12,12 +12,11 @@ import SwiftUI import WysiwygComposer struct RoomScreenCoordinatorParameters { - let clientProxy: ClientProxyProtocol + let userSession: UserSessionProtocol let roomProxy: JoinedRoomProxyProtocol var focussedEvent: FocusEvent? var sharedText: String? let timelineController: TimelineControllerProtocol - let mediaProvider: MediaProviderProtocol let mediaPlayerProvider: MediaPlayerProviderProtocol let voiceMessageMediaManager: VoiceMessageMediaManagerProtocol let emojiProvider: EmojiProviderProtocol @@ -69,10 +68,9 @@ final class RoomScreenCoordinator: CoordinatorProtocol { selectedPinnedEventID = focussedEvent.shouldSetPin ? focussedEvent.eventID : nil } - roomViewModel = RoomScreenViewModel(clientProxy: parameters.clientProxy, + roomViewModel = RoomScreenViewModel(userSession: parameters.userSession, roomProxy: parameters.roomProxy, initialSelectedPinnedEventID: selectedPinnedEventID, - mediaProvider: parameters.mediaProvider, ongoingCallRoomIDPublisher: parameters.ongoingCallRoomIDPublisher, appMediator: parameters.appMediator, appSettings: parameters.appSettings, @@ -83,7 +81,7 @@ final class RoomScreenCoordinator: CoordinatorProtocol { timelineViewModel = TimelineViewModel(roomProxy: parameters.roomProxy, focussedEventID: parameters.focussedEvent?.eventID, timelineController: parameters.timelineController, - mediaProvider: parameters.mediaProvider, + userSession: parameters.userSession, mediaPlayerProvider: parameters.mediaPlayerProvider, voiceMessageMediaManager: parameters.voiceMessageMediaManager, userIndicatorController: parameters.userIndicatorController, @@ -91,8 +89,7 @@ final class RoomScreenCoordinator: CoordinatorProtocol { appSettings: parameters.appSettings, analyticsService: parameters.analytics, emojiProvider: parameters.emojiProvider, - timelineControllerFactory: parameters.timelineControllerFactory, - clientProxy: parameters.clientProxy) + timelineControllerFactory: parameters.timelineControllerFactory) let wysiwygViewModel = WysiwygComposerViewModel(minHeight: ComposerConstant.minHeight, maxCompressedHeight: ComposerConstant.maxHeight, @@ -102,7 +99,7 @@ final class RoomScreenCoordinator: CoordinatorProtocol { roomProxy: parameters.roomProxy, wysiwygViewModel: wysiwygViewModel, completionSuggestionService: parameters.completionSuggestionService, - mediaProvider: parameters.mediaProvider, + mediaProvider: parameters.userSession.mediaProvider, mentionDisplayHelper: ComposerMentionDisplayHelper(timelineContext: timelineViewModel.context), appSettings: parameters.appSettings, analyticsService: parameters.analytics, diff --git a/ElementX/Sources/Screens/RoomScreen/RoomScreenViewModel.swift b/ElementX/Sources/Screens/RoomScreen/RoomScreenViewModel.swift index 8bbcb3132..6421ecdb4 100644 --- a/ElementX/Sources/Screens/RoomScreen/RoomScreenViewModel.swift +++ b/ElementX/Sources/Screens/RoomScreen/RoomScreenViewModel.swift @@ -50,17 +50,16 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol } } - init(clientProxy: ClientProxyProtocol, + init(userSession: UserSessionProtocol, roomProxy: JoinedRoomProxyProtocol, initialSelectedPinnedEventID: String?, - mediaProvider: MediaProviderProtocol, ongoingCallRoomIDPublisher: CurrentValuePublisher, appMediator: AppMediatorProtocol, appSettings: AppSettings, appHooks: AppHooks, analyticsService: AnalyticsService, userIndicatorController: UserIndicatorControllerProtocol) { - self.clientProxy = clientProxy + clientProxy = userSession.clientProxy self.roomProxy = roomProxy self.appMediator = appMediator self.appSettings = appSettings @@ -75,7 +74,7 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol hasOngoingCall: roomProxy.infoPublisher.value.hasRoomCall, hasSuccessor: roomProxy.infoPublisher.value.successor != nil) super.init(initialViewState: appHooks.roomScreenHook.update(viewState), - mediaProvider: mediaProvider) + mediaProvider: userSession.mediaProvider) updateRoomInfo(roomProxy.infoPublisher.value) setupSubscriptions(ongoingCallRoomIDPublisher: ongoingCallRoomIDPublisher) @@ -416,10 +415,9 @@ extension RoomScreenViewModel { static func mock(roomProxyMock: JoinedRoomProxyMock, clientProxyMock: ClientProxyMock = ClientProxyMock(), appHooks: AppHooks = AppHooks()) -> RoomScreenViewModel { - RoomScreenViewModel(clientProxy: clientProxyMock, + RoomScreenViewModel(userSession: UserSessionMock(.init(clientProxy: clientProxyMock)), roomProxy: roomProxyMock, initialSelectedPinnedEventID: nil, - mediaProvider: MediaProviderMock(configuration: .init()), ongoingCallRoomIDPublisher: .init(.init(nil)), appMediator: AppMediatorMock.default, appSettings: ServiceLocator.shared.settings, diff --git a/ElementX/Sources/Screens/RoomScreen/View/RoomScreen.swift b/ElementX/Sources/Screens/RoomScreen/View/RoomScreen.swift index b6eea3413..a497a6f08 100644 --- a/ElementX/Sources/Screens/RoomScreen/View/RoomScreen.swift +++ b/ElementX/Sources/Screens/RoomScreen/View/RoomScreen.swift @@ -257,7 +257,7 @@ struct RoomScreen_Previews: PreviewProvider, TestablePreview { let roomViewModel = RoomScreenViewModel.mock(roomProxyMock: roomProxyMock) let timelineViewModel = TimelineViewModel(roomProxy: roomProxyMock, timelineController: MockTimelineController(), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: ServiceLocator.shared.userIndicatorController, @@ -265,8 +265,7 @@ struct RoomScreen_Previews: PreviewProvider, TestablePreview { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: ClientProxyMock(.init())) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) return .init(room: roomViewModel, timeline: timelineViewModel) } diff --git a/ElementX/Sources/Screens/RoomSelectionScreen/RoomSelectionScreenCoordinator.swift b/ElementX/Sources/Screens/RoomSelectionScreen/RoomSelectionScreenCoordinator.swift index 41631bbcf..4648a57df 100644 --- a/ElementX/Sources/Screens/RoomSelectionScreen/RoomSelectionScreenCoordinator.swift +++ b/ElementX/Sources/Screens/RoomSelectionScreen/RoomSelectionScreenCoordinator.swift @@ -9,9 +9,8 @@ import Combine import SwiftUI struct RoomSelectionScreenCoordinatorParameters { - let clientProxy: ClientProxyProtocol + let userSession: UserSessionProtocol let roomSummaryProvider: RoomSummaryProviderProtocol - let mediaProvider: MediaProviderProtocol } enum RoomSelectionScreenCoordinatorAction { @@ -29,9 +28,8 @@ final class RoomSelectionScreenCoordinator: CoordinatorProtocol { } init(parameters: RoomSelectionScreenCoordinatorParameters) { - viewModel = RoomSelectionScreenViewModel(clientProxy: parameters.clientProxy, - roomSummaryProvider: parameters.roomSummaryProvider, - mediaProvider: parameters.mediaProvider) + viewModel = RoomSelectionScreenViewModel(userSession: parameters.userSession, + roomSummaryProvider: parameters.roomSummaryProvider) } func start() { diff --git a/ElementX/Sources/Screens/RoomSelectionScreen/RoomSelectionScreenViewModel.swift b/ElementX/Sources/Screens/RoomSelectionScreen/RoomSelectionScreenViewModel.swift index 19fa388ed..e59acefab 100644 --- a/ElementX/Sources/Screens/RoomSelectionScreen/RoomSelectionScreenViewModel.swift +++ b/ElementX/Sources/Screens/RoomSelectionScreen/RoomSelectionScreenViewModel.swift @@ -20,13 +20,12 @@ class RoomSelectionScreenViewModel: RoomSelectionScreenViewModelType, RoomSelect actionsSubject.eraseToAnyPublisher() } - init(clientProxy: ClientProxyProtocol, - roomSummaryProvider: RoomSummaryProviderProtocol, - mediaProvider: MediaProviderProtocol) { - self.clientProxy = clientProxy + init(userSession: UserSessionProtocol, + roomSummaryProvider: RoomSummaryProviderProtocol) { + clientProxy = userSession.clientProxy self.roomSummaryProvider = roomSummaryProvider - super.init(initialViewState: RoomSelectionScreenViewState(), mediaProvider: mediaProvider) + super.init(initialViewState: RoomSelectionScreenViewState(), mediaProvider: userSession.mediaProvider) roomSummaryProvider.roomListPublisher .receive(on: DispatchQueue.main) diff --git a/ElementX/Sources/Screens/RoomSelectionScreen/View/RoomSelectionScreen.swift b/ElementX/Sources/Screens/RoomSelectionScreen/View/RoomSelectionScreen.swift index e023d0c58..d551ddb71 100644 --- a/ElementX/Sources/Screens/RoomSelectionScreen/View/RoomSelectionScreen.swift +++ b/ElementX/Sources/Screens/RoomSelectionScreen/View/RoomSelectionScreen.swift @@ -94,9 +94,8 @@ private struct RoomSelectionListRow: View { struct RoomSelectionScreen_Previews: PreviewProvider, TestablePreview { static var previews: some View { let summaryProvider = RoomSummaryProviderMock(.init(state: .loaded(.mockRooms))) - let viewModel = RoomSelectionScreenViewModel(clientProxy: ClientProxyMock(.init()), - roomSummaryProvider: summaryProvider, - mediaProvider: MediaProviderMock(configuration: .init())) + let viewModel = RoomSelectionScreenViewModel(userSession: UserSessionMock(.init()), + roomSummaryProvider: summaryProvider) NavigationStack { RoomSelectionScreen(context: viewModel.context) diff --git a/ElementX/Sources/Screens/Settings/UserDetailsEditScreen/UserDetailsEditScreenCoordinator.swift b/ElementX/Sources/Screens/Settings/UserDetailsEditScreen/UserDetailsEditScreenCoordinator.swift index 4e7b3adaf..68261c7ea 100644 --- a/ElementX/Sources/Screens/Settings/UserDetailsEditScreen/UserDetailsEditScreenCoordinator.swift +++ b/ElementX/Sources/Screens/Settings/UserDetailsEditScreen/UserDetailsEditScreenCoordinator.swift @@ -10,8 +10,7 @@ import SwiftUI struct UserDetailsEditScreenCoordinatorParameters { let orientationManager: OrientationManagerProtocol - let clientProxy: ClientProxyProtocol - let mediaProvider: MediaProviderProtocol + let userSession: UserSessionProtocol let mediaUploadingPreprocessor: MediaUploadingPreprocessor weak var navigationStackCoordinator: NavigationStackCoordinator? let userIndicatorController: UserIndicatorControllerProtocol @@ -26,8 +25,7 @@ final class UserDetailsEditScreenCoordinator: CoordinatorProtocol { init(parameters: UserDetailsEditScreenCoordinatorParameters) { self.parameters = parameters - viewModel = UserDetailsEditScreenViewModel(clientProxy: parameters.clientProxy, - mediaProvider: parameters.mediaProvider, + viewModel = UserDetailsEditScreenViewModel(userSession: parameters.userSession, mediaUploadingPreprocessor: parameters.mediaUploadingPreprocessor, userIndicatorController: parameters.userIndicatorController) } diff --git a/ElementX/Sources/Screens/Settings/UserDetailsEditScreen/UserDetailsEditScreenViewModel.swift b/ElementX/Sources/Screens/Settings/UserDetailsEditScreen/UserDetailsEditScreenViewModel.swift index d9089da18..c16da6dec 100644 --- a/ElementX/Sources/Screens/Settings/UserDetailsEditScreen/UserDetailsEditScreenViewModel.swift +++ b/ElementX/Sources/Screens/Settings/UserDetailsEditScreen/UserDetailsEditScreenViewModel.swift @@ -20,16 +20,15 @@ class UserDetailsEditScreenViewModel: UserDetailsEditScreenViewModelType, UserDe actionsSubject.eraseToAnyPublisher() } - init(clientProxy: ClientProxyProtocol, - mediaProvider: MediaProviderProtocol, + init(userSession: UserSessionProtocol, mediaUploadingPreprocessor: MediaUploadingPreprocessor, userIndicatorController: UserIndicatorControllerProtocol) { - self.clientProxy = clientProxy + clientProxy = userSession.clientProxy self.mediaUploadingPreprocessor = mediaUploadingPreprocessor self.userIndicatorController = userIndicatorController super.init(initialViewState: UserDetailsEditScreenViewState(userID: clientProxy.userID, - bindings: .init()), mediaProvider: mediaProvider) + bindings: .init()), mediaProvider: userSession.mediaProvider) clientProxy.userAvatarURLPublisher .receive(on: DispatchQueue.main) diff --git a/ElementX/Sources/Screens/Settings/UserDetailsEditScreen/View/UserDetailsEditScreen.swift b/ElementX/Sources/Screens/Settings/UserDetailsEditScreen/View/UserDetailsEditScreen.swift index 2d1a96507..ae5e385d2 100644 --- a/ElementX/Sources/Screens/Settings/UserDetailsEditScreen/View/UserDetailsEditScreen.swift +++ b/ElementX/Sources/Screens/Settings/UserDetailsEditScreen/View/UserDetailsEditScreen.swift @@ -115,8 +115,7 @@ struct UserDetailsEditScreen: View { // MARK: - Previews struct UserDetailsEditScreen_Previews: PreviewProvider, TestablePreview { - static let viewModel = UserDetailsEditScreenViewModel(clientProxy: ClientProxyMock(.init(userID: "@stefan:matrix.org")), - mediaProvider: MediaProviderMock(configuration: .init()), + static let viewModel = UserDetailsEditScreenViewModel(userSession: UserSessionMock(.init(clientProxy: ClientProxyMock(.init(userID: "@stefan:matrix.org")))), mediaUploadingPreprocessor: .init(appSettings: ServiceLocator.shared.settings), userIndicatorController: UserIndicatorControllerMock.default) diff --git a/ElementX/Sources/Screens/StartChatScreen/StartChatScreenCoordinator.swift b/ElementX/Sources/Screens/StartChatScreen/StartChatScreenCoordinator.swift index bdee4a4e4..50a5de8e6 100644 --- a/ElementX/Sources/Screens/StartChatScreen/StartChatScreenCoordinator.swift +++ b/ElementX/Sources/Screens/StartChatScreen/StartChatScreenCoordinator.swift @@ -82,10 +82,9 @@ final class StartChatScreenCoordinator: CoordinatorProtocol { // MARK: - Private private func presentInviteUsersScreen() { - let inviteParameters = InviteUsersScreenCoordinatorParameters(clientProxy: parameters.userSession.clientProxy, + let inviteParameters = InviteUsersScreenCoordinatorParameters(userSession: parameters.userSession, selectedUsers: selectedUsersPublisher, roomType: .draft, - mediaProvider: parameters.userSession.mediaProvider, userDiscoveryService: parameters.userDiscoveryService, userIndicatorController: parameters.userIndicatorController) let coordinator = InviteUsersScreenCoordinator(parameters: inviteParameters) diff --git a/ElementX/Sources/Screens/ThreadTimelineScreen/ThreadTimelineScreenCoordinator.swift b/ElementX/Sources/Screens/ThreadTimelineScreen/ThreadTimelineScreenCoordinator.swift index 4afa181b7..352bbdf47 100644 --- a/ElementX/Sources/Screens/ThreadTimelineScreen/ThreadTimelineScreenCoordinator.swift +++ b/ElementX/Sources/Screens/ThreadTimelineScreen/ThreadTimelineScreenCoordinator.swift @@ -11,10 +11,9 @@ import SwiftUI import WysiwygComposer struct ThreadTimelineScreenCoordinatorParameters { - let clientProxy: ClientProxyProtocol + let userSession: UserSessionProtocol let roomProxy: JoinedRoomProxyProtocol let timelineController: TimelineControllerProtocol - let mediaProvider: MediaProviderProtocol let mediaPlayerProvider: MediaPlayerProviderProtocol let voiceMessageMediaManager: VoiceMessageMediaManagerProtocol let emojiProvider: EmojiProviderProtocol @@ -60,7 +59,7 @@ final class ThreadTimelineScreenCoordinator: CoordinatorProtocol { timelineViewModel = TimelineViewModel(roomProxy: parameters.roomProxy, timelineController: parameters.timelineController, - mediaProvider: parameters.mediaProvider, + userSession: parameters.userSession, mediaPlayerProvider: parameters.mediaPlayerProvider, voiceMessageMediaManager: parameters.voiceMessageMediaManager, userIndicatorController: parameters.userIndicatorController, @@ -68,8 +67,7 @@ final class ThreadTimelineScreenCoordinator: CoordinatorProtocol { appSettings: parameters.appSettings, analyticsService: parameters.analytics, emojiProvider: parameters.emojiProvider, - timelineControllerFactory: parameters.timelineControllerFactory, - clientProxy: parameters.clientProxy) + timelineControllerFactory: parameters.timelineControllerFactory) let wysiwygViewModel = WysiwygComposerViewModel(minHeight: ComposerConstant.minHeight, maxCompressedHeight: ComposerConstant.maxHeight, @@ -80,7 +78,7 @@ final class ThreadTimelineScreenCoordinator: CoordinatorProtocol { roomProxy: parameters.roomProxy, wysiwygViewModel: wysiwygViewModel, completionSuggestionService: parameters.completionSuggestionService, - mediaProvider: parameters.mediaProvider, + mediaProvider: parameters.userSession.mediaProvider, mentionDisplayHelper: ComposerMentionDisplayHelper(timelineContext: timelineViewModel.context), appSettings: parameters.appSettings, analyticsService: parameters.analytics, diff --git a/ElementX/Sources/Screens/Timeline/TimelineInteractionHandler.swift b/ElementX/Sources/Screens/Timeline/TimelineInteractionHandler.swift index 3d6681ffe..2dbab08c0 100644 --- a/ElementX/Sources/Screens/Timeline/TimelineInteractionHandler.swift +++ b/ElementX/Sources/Screens/Timeline/TimelineInteractionHandler.swift @@ -33,7 +33,7 @@ enum TimelineInteractionHandlerAction { class TimelineInteractionHandler { private let roomProxy: JoinedRoomProxyProtocol private let timelineController: TimelineControllerProtocol - private let mediaProvider: MediaProviderProtocol + private let userSession: UserSessionProtocol private let mediaPlayerProvider: MediaPlayerProviderProtocol private let voiceMessageRecorder: VoiceMessageRecorderProtocol private let voiceMessageMediaManager: VoiceMessageMediaManagerProtocol @@ -44,7 +44,6 @@ class TimelineInteractionHandler { private let emojiProvider: EmojiProviderProtocol private let timelineControllerFactory: TimelineControllerFactoryProtocol private let pollInteractionHandler: PollInteractionHandlerProtocol - private let clientProxy: ClientProxyProtocol private let actionsSubject: PassthroughSubject = .init() var actions: AnyPublisher { @@ -61,7 +60,7 @@ class TimelineInteractionHandler { init(roomProxy: JoinedRoomProxyProtocol, timelineController: TimelineControllerProtocol, - mediaProvider: MediaProviderProtocol, + userSession: UserSessionProtocol, mediaPlayerProvider: MediaPlayerProviderProtocol, voiceMessageMediaManager: VoiceMessageMediaManagerProtocol, voiceMessageRecorder: VoiceMessageRecorderProtocol, @@ -70,11 +69,10 @@ class TimelineInteractionHandler { appSettings: AppSettings, analyticsService: AnalyticsService, emojiProvider: EmojiProviderProtocol, - timelineControllerFactory: TimelineControllerFactoryProtocol, - clientProxy: ClientProxyProtocol) { + timelineControllerFactory: TimelineControllerFactoryProtocol) { self.roomProxy = roomProxy self.timelineController = timelineController - self.mediaProvider = mediaProvider + self.userSession = userSession self.mediaPlayerProvider = mediaPlayerProvider self.voiceMessageMediaManager = voiceMessageMediaManager self.voiceMessageRecorder = voiceMessageRecorder @@ -84,7 +82,6 @@ class TimelineInteractionHandler { self.analyticsService = analyticsService self.emojiProvider = emojiProvider self.timelineControllerFactory = timelineControllerFactory - self.clientProxy = clientProxy pollInteractionHandler = PollInteractionHandler(analyticsService: analyticsService, timelineController: timelineController) @@ -582,14 +579,14 @@ class TimelineInteractionHandler { presentation: newTimelinePresentation, roomProxy: roomProxy, timelineItemFactory: timelineItemFactory, - mediaProvider: mediaProvider) else { + mediaProvider: userSession.mediaProvider) else { MXLog.error("Failed presenting media timeline") return .none } let timelineViewModel = TimelineViewModel(roomProxy: roomProxy, timelineController: timelineController, - mediaProvider: mediaProvider, + userSession: userSession, mediaPlayerProvider: mediaPlayerProvider, voiceMessageMediaManager: voiceMessageMediaManager, userIndicatorController: userIndicatorController, @@ -597,8 +594,7 @@ class TimelineInteractionHandler { appSettings: appSettings, analyticsService: analyticsService, emojiProvider: emojiProvider, - timelineControllerFactory: timelineControllerFactory, - clientProxy: clientProxy) + timelineControllerFactory: timelineControllerFactory) return .displayMediaPreview(item: item, timelineViewModel: .new(timelineViewModel)) } else { diff --git a/ElementX/Sources/Screens/Timeline/TimelineViewModel.swift b/ElementX/Sources/Screens/Timeline/TimelineViewModel.swift index 374755d7c..213ca59b2 100644 --- a/ElementX/Sources/Screens/Timeline/TimelineViewModel.swift +++ b/ElementX/Sources/Screens/Timeline/TimelineViewModel.swift @@ -23,7 +23,7 @@ class TimelineViewModel: TimelineViewModelType, TimelineViewModelProtocol { private let roomProxy: JoinedRoomProxyProtocol private let timelineController: TimelineControllerProtocol - private let mediaProvider: MediaProviderProtocol + private let userSession: UserSessionProtocol private let mediaPlayerProvider: MediaPlayerProviderProtocol private let userIndicatorController: UserIndicatorControllerProtocol private let appMediator: AppMediatorProtocol @@ -31,7 +31,6 @@ class TimelineViewModel: TimelineViewModelType, TimelineViewModelProtocol { private let analyticsService: AnalyticsService private let emojiProvider: EmojiProviderProtocol private let timelineControllerFactory: TimelineControllerFactoryProtocol - private let clientProxy: ClientProxyProtocol private let timelineInteractionHandler: TimelineInteractionHandler @@ -50,7 +49,7 @@ class TimelineViewModel: TimelineViewModelType, TimelineViewModelProtocol { init(roomProxy: JoinedRoomProxyProtocol, focussedEventID: String? = nil, timelineController: TimelineControllerProtocol, - mediaProvider: MediaProviderProtocol, + userSession: UserSessionProtocol, mediaPlayerProvider: MediaPlayerProviderProtocol, voiceMessageMediaManager: VoiceMessageMediaManagerProtocol, userIndicatorController: UserIndicatorControllerProtocol, @@ -58,25 +57,23 @@ class TimelineViewModel: TimelineViewModelType, TimelineViewModelProtocol { appSettings: AppSettings, analyticsService: AnalyticsService, emojiProvider: EmojiProviderProtocol, - timelineControllerFactory: TimelineControllerFactoryProtocol, - clientProxy: ClientProxyProtocol) { - self.timelineController = timelineController - self.mediaProvider = mediaProvider - self.mediaPlayerProvider = mediaPlayerProvider + timelineControllerFactory: TimelineControllerFactoryProtocol) { self.roomProxy = roomProxy + self.timelineController = timelineController + self.userSession = userSession + self.mediaPlayerProvider = mediaPlayerProvider self.appSettings = appSettings self.analyticsService = analyticsService self.userIndicatorController = userIndicatorController self.appMediator = appMediator self.emojiProvider = emojiProvider self.timelineControllerFactory = timelineControllerFactory - self.clientProxy = clientProxy let voiceMessageRecorder = VoiceMessageRecorder(audioRecorder: AudioRecorder(), mediaPlayerProvider: mediaPlayerProvider) timelineInteractionHandler = TimelineInteractionHandler(roomProxy: roomProxy, timelineController: timelineController, - mediaProvider: mediaProvider, + userSession: userSession, mediaPlayerProvider: mediaPlayerProvider, voiceMessageMediaManager: voiceMessageMediaManager, voiceMessageRecorder: voiceMessageRecorder, @@ -85,10 +82,9 @@ class TimelineViewModel: TimelineViewModelType, TimelineViewModelProtocol { appSettings: appSettings, analyticsService: analyticsService, emojiProvider: emojiProvider, - timelineControllerFactory: timelineControllerFactory, - clientProxy: clientProxy) + timelineControllerFactory: timelineControllerFactory) - let hideTimelineMedia = switch clientProxy.timelineMediaVisibilityPublisher.value { + let hideTimelineMedia = switch userSession.clientProxy.timelineMediaVisibilityPublisher.value { case .always: false case .privateOnly: @@ -109,7 +105,7 @@ class TimelineViewModel: TimelineViewModelType, TimelineViewModelProtocol { emojiProvider: emojiProvider, mapTilerConfiguration: appSettings.mapTilerConfiguration, bindings: .init(reactionsCollapsed: [:])), - mediaProvider: mediaProvider) + mediaProvider: userSession.mediaProvider) if focussedEventID != nil { // The timeline controller will start loading a detached timeline. @@ -132,11 +128,11 @@ class TimelineViewModel: TimelineViewModelType, TimelineViewModelProtocol { } state.roomNameForIDResolver = { [weak self] roomID in - self?.clientProxy.roomSummaryForIdentifier(roomID)?.name + self?.userSession.clientProxy.roomSummaryForIdentifier(roomID)?.name } state.roomNameForAliasResolver = { [weak self] alias in - self?.clientProxy.roomSummaryForAlias(alias)?.name + self?.userSession.clientProxy.roomSummaryForAlias(alias)?.name } state.timelineState.paginationState = timelineController.paginationState @@ -290,7 +286,7 @@ class TimelineViewModel: TimelineViewModelType, TimelineViewModelProtocol { roomProxy: roomProxy, userIndicatorController: userIndicatorController, analyticsService: analyticsService, - mediaProvider: mediaProvider) + mediaProvider: userSession.mediaProvider) viewModel.actions.sink { [weak self] action in guard let self else { return } @@ -509,7 +505,7 @@ class TimelineViewModel: TimelineViewModelType, TimelineViewModelProtocol { .weakAssign(to: \.state.areThreadsEnabled, on: self) .store(in: &cancellables) - clientProxy.timelineMediaVisibilityPublisher + userSession.clientProxy.timelineMediaVisibilityPublisher .removeDuplicates() .flatMap { [weak self] timelineMediaVisibility -> AnyPublisher in switch timelineMediaVisibility { @@ -738,7 +734,7 @@ class TimelineViewModel: TimelineViewModelType, TimelineViewModelProtocol { return TimelineMediaPreviewViewModel(initialItem: item, timelineViewModel: timelineViewModel, - mediaProvider: mediaProvider, + mediaProvider: userSession.mediaProvider, photoLibraryManager: PhotoLibraryManager(), userIndicatorController: userIndicatorController, appMediator: appMediator) @@ -928,18 +924,18 @@ class TimelineViewModel: TimelineViewModelType, TimelineViewModelProtocol { let pillViewState: PillViewState switch room { case .roomAlias(let alias): - let roomSummary = clientProxy.roomSummaryForAlias(alias) + let roomSummary = userSession.clientProxy.roomSummaryForAlias(alias) pillViewState = .reference(displayText: PillUtilities.eventPillDisplayText(roomName: roomSummary?.name, rawRoomText: alias)) case .roomID(let id): - let roomSummary = clientProxy.roomSummaryForIdentifier(id) + let roomSummary = userSession.clientProxy.roomSummaryForIdentifier(id) pillViewState = .reference(displayText: PillUtilities.eventPillDisplayText(roomName: roomSummary?.name, rawRoomText: id)) } pillContext.viewState = pillViewState case .roomAlias(let alias): - let roomSummary = clientProxy.roomSummaryForAlias(alias) + let roomSummary = userSession.clientProxy.roomSummaryForAlias(alias) pillContext.viewState = .reference(displayText: PillUtilities.roomPillDisplayText(roomName: roomSummary?.name, rawRoomText: alias)) case .roomID(let id): - let roomSummary = clientProxy.roomSummaryForIdentifier(id) + let roomSummary = userSession.clientProxy.roomSummaryForIdentifier(id) pillContext.viewState = .reference(displayText: PillUtilities.roomPillDisplayText(roomName: roomSummary?.name, rawRoomText: id)) } } @@ -1003,7 +999,7 @@ extension TimelineViewModel { return TimelineViewModel(roomProxy: roomProxy, focussedEventID: nil, timelineController: timelineController ?? MockTimelineController(timelineKind: timelineKind), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init(clientProxy: clientProxyMock)), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: ServiceLocator.shared.userIndicatorController, @@ -1011,8 +1007,7 @@ extension TimelineViewModel { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: clientProxyMock) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) } } diff --git a/ElementX/Sources/Screens/Timeline/View/ReadReceipts/ReadReceiptsSummaryView.swift b/ElementX/Sources/Screens/Timeline/View/ReadReceipts/ReadReceiptsSummaryView.swift index 317926be7..a5daa3139 100644 --- a/ElementX/Sources/Screens/Timeline/View/ReadReceipts/ReadReceiptsSummaryView.swift +++ b/ElementX/Sources/Screens/Timeline/View/ReadReceipts/ReadReceiptsSummaryView.swift @@ -45,7 +45,7 @@ struct ReadReceiptsSummaryView_Previews: PreviewProvider, TestablePreview { let roomProxyMock = JoinedRoomProxyMock(.init(name: "Room", members: members)) let mock = TimelineViewModel(roomProxy: roomProxyMock, timelineController: MockTimelineController(), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: UserIndicatorControllerMock(), @@ -53,8 +53,7 @@ struct ReadReceiptsSummaryView_Previews: PreviewProvider, TestablePreview { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: ClientProxyMock(.init())) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) return mock }() diff --git a/ElementX/Sources/Screens/Timeline/View/Style/TimelineItemBubbledStylerView.swift b/ElementX/Sources/Screens/Timeline/View/Style/TimelineItemBubbledStylerView.swift index 138e984d0..af7216011 100644 --- a/ElementX/Sources/Screens/Timeline/View/Style/TimelineItemBubbledStylerView.swift +++ b/ElementX/Sources/Screens/Timeline/View/Style/TimelineItemBubbledStylerView.swift @@ -334,7 +334,7 @@ struct TimelineItemBubbledStylerView_Previews: PreviewProvider, TestablePreview return TimelineViewModel(roomProxy: roomProxy, focussedEventID: nil, timelineController: MockTimelineController(), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: ServiceLocator.shared.userIndicatorController, @@ -342,8 +342,7 @@ struct TimelineItemBubbledStylerView_Previews: PreviewProvider, TestablePreview appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: ClientProxyMock(.init())) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) }() static var previews: some View { diff --git a/ElementX/Sources/Screens/Timeline/View/Supplementary/TimelineReadReceiptsView.swift b/ElementX/Sources/Screens/Timeline/View/Supplementary/TimelineReadReceiptsView.swift index 05e803b81..59094e994 100644 --- a/ElementX/Sources/Screens/Timeline/View/Supplementary/TimelineReadReceiptsView.swift +++ b/ElementX/Sources/Screens/Timeline/View/Supplementary/TimelineReadReceiptsView.swift @@ -80,7 +80,7 @@ struct TimelineReadReceiptsView_Previews: PreviewProvider, TestablePreview { static let viewModel = TimelineViewModel(roomProxy: JoinedRoomProxyMock(.init(name: "Test", members: members)), timelineController: MockTimelineController(), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: ServiceLocator.shared.userIndicatorController, @@ -88,8 +88,7 @@ struct TimelineReadReceiptsView_Previews: PreviewProvider, TestablePreview { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: ClientProxyMock(.init())) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) static let singleReceipt = [ReadReceipt(userID: RoomMemberProxyMock.mockAlice.userID, formattedTimestamp: "Now")] static let doubleReceipt = [ReadReceipt(userID: RoomMemberProxyMock.mockAlice.userID, formattedTimestamp: "Now"), diff --git a/ElementX/Sources/Screens/Timeline/View/TimelineItemViews/HighlightedTimelineItemModifier.swift b/ElementX/Sources/Screens/Timeline/View/TimelineItemViews/HighlightedTimelineItemModifier.swift index 5f0b4725c..f6c8d0185 100644 --- a/ElementX/Sources/Screens/Timeline/View/TimelineItemViews/HighlightedTimelineItemModifier.swift +++ b/ElementX/Sources/Screens/Timeline/View/TimelineItemViews/HighlightedTimelineItemModifier.swift @@ -90,7 +90,7 @@ struct HighlightedTimelineItemTimeline_Previews: PreviewProvider { static let timelineViewModel = TimelineViewModel(roomProxy: roomProxyMock, focussedEventID: focussedEventID, timelineController: MockTimelineController(), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: ServiceLocator.shared.userIndicatorController, @@ -98,8 +98,7 @@ struct HighlightedTimelineItemTimeline_Previews: PreviewProvider { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: ClientProxyMock(.init())) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) static var previews: some View { NavigationStack { diff --git a/ElementX/Sources/Screens/Timeline/View/TimelineView.swift b/ElementX/Sources/Screens/Timeline/View/TimelineView.swift index a98adb490..4c3868a31 100644 --- a/ElementX/Sources/Screens/Timeline/View/TimelineView.swift +++ b/ElementX/Sources/Screens/Timeline/View/TimelineView.swift @@ -142,7 +142,7 @@ struct TimelineView_Previews: PreviewProvider, TestablePreview { static let roomViewModel = RoomScreenViewModel.mock(roomProxyMock: roomProxyMock) static let timelineViewModel = TimelineViewModel(roomProxy: roomProxyMock, timelineController: MockTimelineController(), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: ServiceLocator.shared.userIndicatorController, @@ -150,8 +150,7 @@ struct TimelineView_Previews: PreviewProvider, TestablePreview { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: ClientProxyMock(.init())) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) static var previews: some View { NavigationStack { diff --git a/ElementX/Sources/Screens/UserProfileScreen/UserProfileScreenCoordinator.swift b/ElementX/Sources/Screens/UserProfileScreen/UserProfileScreenCoordinator.swift index 3eb074ca7..699db7bf2 100644 --- a/ElementX/Sources/Screens/UserProfileScreen/UserProfileScreenCoordinator.swift +++ b/ElementX/Sources/Screens/UserProfileScreen/UserProfileScreenCoordinator.swift @@ -11,8 +11,7 @@ import SwiftUI struct UserProfileScreenCoordinatorParameters { let userID: String let isPresentedModally: Bool - let clientProxy: ClientProxyProtocol - let mediaProvider: MediaProviderProtocol + let userSession: UserSessionProtocol let userIndicatorController: UserIndicatorControllerProtocol let analytics: AnalyticsService } @@ -36,8 +35,7 @@ final class UserProfileScreenCoordinator: CoordinatorProtocol { init(parameters: UserProfileScreenCoordinatorParameters) { viewModel = UserProfileScreenViewModel(userID: parameters.userID, isPresentedModally: parameters.isPresentedModally, - clientProxy: parameters.clientProxy, - mediaProvider: parameters.mediaProvider, + userSession: parameters.userSession, userIndicatorController: parameters.userIndicatorController, analytics: parameters.analytics) } diff --git a/ElementX/Sources/Screens/UserProfileScreen/UserProfileScreenViewModel.swift b/ElementX/Sources/Screens/UserProfileScreen/UserProfileScreenViewModel.swift index 45f5b6283..941066dd8 100644 --- a/ElementX/Sources/Screens/UserProfileScreen/UserProfileScreenViewModel.swift +++ b/ElementX/Sources/Screens/UserProfileScreen/UserProfileScreenViewModel.swift @@ -12,8 +12,7 @@ import SwiftUI typealias UserProfileScreenViewModelType = StateStoreViewModelV2 class UserProfileScreenViewModel: UserProfileScreenViewModelType, UserProfileScreenViewModelProtocol { - private let clientProxy: ClientProxyProtocol - private let mediaProvider: MediaProviderProtocol + private let userSession: UserSessionProtocol private let userIndicatorController: UserIndicatorControllerProtocol private let analytics: AnalyticsService @@ -24,21 +23,19 @@ class UserProfileScreenViewModel: UserProfileScreenViewModelType, UserProfileScr init(userID: String, isPresentedModally: Bool, - clientProxy: ClientProxyProtocol, - mediaProvider: MediaProviderProtocol, + userSession: UserSessionProtocol, userIndicatorController: UserIndicatorControllerProtocol, analytics: AnalyticsService) { - self.clientProxy = clientProxy - self.mediaProvider = mediaProvider + self.userSession = userSession self.userIndicatorController = userIndicatorController self.analytics = analytics let initialViewState = UserProfileScreenViewState(userID: userID, - isOwnUser: userID == clientProxy.userID, + isOwnUser: userID == userSession.clientProxy.userID, isPresentedModally: isPresentedModally, bindings: .init()) - super.init(initialViewState: initialViewState, mediaProvider: mediaProvider) + super.init(initialViewState: initialViewState, mediaProvider: userSession.mediaProvider) showLoadingIndicator(allowsInteraction: true) Task { @@ -74,15 +71,15 @@ class UserProfileScreenViewModel: UserProfileScreenViewModelType, UserProfileScr // MARK: - Private private func loadProfile() async { - async let profileResult = clientProxy.profile(for: state.userID) - async let identityResult = clientProxy.userIdentity(for: state.userID) + async let profileResult = userSession.clientProxy.profile(for: state.userID) + async let identityResult = userSession.clientProxy.userIdentity(for: state.userID) switch await profileResult { case .success(let userProfile): state.userProfile = userProfile state.permalink = (try? matrixToUserPermalink(userId: state.userID)).flatMap(URL.init(string:)) - switch clientProxy.directRoomForUserID(userProfile.userID) { + switch userSession.clientProxy.directRoomForUserID(userProfile.userID) { case .success(let roomID): state.dmRoomID = roomID case .failure: @@ -108,7 +105,7 @@ class UserProfileScreenViewModel: UserProfileScreenViewModelType, UserProfileScr // We don't actually know the mime type here, assume it's an image. if let mediaSource = try? MediaSourceProxy(url: url, mimeType: "image/jpeg"), - case let .success(file) = await mediaProvider.loadFileFromSource(mediaSource) { + case let .success(file) = await userSession.mediaProvider.loadFileFromSource(mediaSource) { state.bindings.mediaPreviewItem = MediaPreviewItem(file: file, title: userProfile.displayName) } } @@ -119,7 +116,7 @@ class UserProfileScreenViewModel: UserProfileScreenViewModelType, UserProfileScr showLoadingIndicator(allowsInteraction: false) defer { hideLoadingIndicator() } - switch clientProxy.directRoomForUserID(userProfile.userID) { + switch userSession.clientProxy.directRoomForUserID(userProfile.userID) { case .success(let roomID): if let roomID { actionsSubject.send(.openDirectChat(roomID: roomID)) @@ -137,7 +134,7 @@ class UserProfileScreenViewModel: UserProfileScreenViewModelType, UserProfileScr showLoadingIndicator(allowsInteraction: false) defer { hideLoadingIndicator() } - switch await clientProxy.createDirectRoom(with: userProfile.userID, expectedRoomName: userProfile.displayName) { + switch await userSession.clientProxy.createDirectRoom(with: userProfile.userID, expectedRoomName: userProfile.displayName) { case .success(let roomID): analytics.trackCreatedRoom(isDM: true) actionsSubject.send(.openDirectChat(roomID: roomID)) diff --git a/ElementX/Sources/Screens/UserProfileScreen/View/UserProfileScreen.swift b/ElementX/Sources/Screens/UserProfileScreen/View/UserProfileScreen.swift index 1428560db..fcdd40248 100644 --- a/ElementX/Sources/Screens/UserProfileScreen/View/UserProfileScreen.swift +++ b/ElementX/Sources/Screens/UserProfileScreen/View/UserProfileScreen.swift @@ -135,8 +135,7 @@ struct UserProfileScreen_Previews: PreviewProvider, TestablePreview { return UserProfileScreenViewModel(userID: userID, isPresentedModally: false, - clientProxy: clientProxyMock, - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init(clientProxy: clientProxyMock)), userIndicatorController: ServiceLocator.shared.userIndicatorController, analytics: ServiceLocator.shared.analytics) } diff --git a/ElementX/Sources/UITests/UITestsAppCoordinator.swift b/ElementX/Sources/UITests/UITestsAppCoordinator.swift index 3458617c9..9d7545314 100644 --- a/ElementX/Sources/UITests/UITestsAppCoordinator.swift +++ b/ElementX/Sources/UITests/UITestsAppCoordinator.swift @@ -259,10 +259,9 @@ class MockScreen: Identifiable { return navigationStackCoordinator case .roomPlainNoAvatar: let navigationStackCoordinator = NavigationStackCoordinator() - let parameters = RoomScreenCoordinatorParameters(clientProxy: ClientProxyMock(.init()), + let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), roomProxy: JoinedRoomProxyMock(.init(name: "Some room name", avatarURL: nil)), timelineController: MockTimelineController(), - mediaProvider: MediaProviderMock(configuration: .init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), @@ -282,10 +281,9 @@ class MockScreen: Identifiable { let navigationStackCoordinator = NavigationStackCoordinator() let timelineController = MockTimelineController() timelineController.timelineItems = RoomTimelineItemFixtures.smallChunk - let parameters = RoomScreenCoordinatorParameters(clientProxy: ClientProxyMock(.init()), + let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), roomProxy: JoinedRoomProxyMock(.init(name: "New room", avatarURL: .mockMXCAvatar)), timelineController: timelineController, - mediaProvider: MediaProviderMock(configuration: .init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), @@ -305,10 +303,9 @@ class MockScreen: Identifiable { let navigationStackCoordinator = NavigationStackCoordinator() let timelineController = MockTimelineController() timelineController.timelineItems = RoomTimelineItemFixtures.default - let parameters = RoomScreenCoordinatorParameters(clientProxy: ClientProxyMock(.init()), + let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), roomProxy: JoinedRoomProxyMock(.init(name: "New room", avatarURL: .mockMXCAvatar)), timelineController: timelineController, - mediaProvider: MediaProviderMock(configuration: .init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), @@ -327,10 +324,9 @@ class MockScreen: Identifiable { let navigationStackCoordinator = NavigationStackCoordinator() let timelineController = MockTimelineController() timelineController.timelineItems = RoomTimelineItemFixtures.smallChunkWithReadReceipts - let parameters = RoomScreenCoordinatorParameters(clientProxy: ClientProxyMock(.init()), + let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), roomProxy: JoinedRoomProxyMock(.init(name: "New room", avatarURL: .mockMXCAvatar)), timelineController: timelineController, - mediaProvider: MediaProviderMock(configuration: .init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), @@ -352,10 +348,9 @@ class MockScreen: Identifiable { timelineController.timelineItems = RoomTimelineItemFixtures.smallChunk timelineController.backPaginationResponses = [RoomTimelineItemFixtures.singleMessageChunk] timelineController.incomingItems = [RoomTimelineItemFixtures.incomingMessage] - let parameters = RoomScreenCoordinatorParameters(clientProxy: ClientProxyMock(.init()), + let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), roomProxy: JoinedRoomProxyMock(.init(name: "Small timeline", avatarURL: .mockMXCAvatar)), timelineController: timelineController, - mediaProvider: MediaProviderMock(configuration: .init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), @@ -377,10 +372,9 @@ class MockScreen: Identifiable { let timelineController = MockTimelineController(listenForSignals: true) timelineController.timelineItems = RoomTimelineItemFixtures.smallChunk timelineController.backPaginationResponses = [RoomTimelineItemFixtures.largeChunk] - let parameters = RoomScreenCoordinatorParameters(clientProxy: ClientProxyMock(.init()), + let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), roomProxy: JoinedRoomProxyMock(.init(name: "Small timeline, paginating", avatarURL: .mockMXCAvatar)), timelineController: timelineController, - mediaProvider: MediaProviderMock(configuration: .init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), @@ -401,10 +395,9 @@ class MockScreen: Identifiable { let timelineController = MockTimelineController(listenForSignals: true) timelineController.timelineItems = RoomTimelineItemFixtures.largeChunk timelineController.backPaginationResponses = [RoomTimelineItemFixtures.largeChunk] - let parameters = RoomScreenCoordinatorParameters(clientProxy: ClientProxyMock(.init()), + let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), roomProxy: JoinedRoomProxyMock(.init(name: "Large timeline", avatarURL: .mockMXCAvatar)), timelineController: timelineController, - mediaProvider: MediaProviderMock(configuration: .init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), @@ -427,10 +420,9 @@ class MockScreen: Identifiable { timelineController.timelineItems = RoomTimelineItemFixtures.largeChunk timelineController.backPaginationResponses = [RoomTimelineItemFixtures.largeChunk] timelineController.incomingItems = [RoomTimelineItemFixtures.incomingMessage] - let parameters = RoomScreenCoordinatorParameters(clientProxy: ClientProxyMock(.init()), + let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), roomProxy: JoinedRoomProxyMock(.init(name: "Large timeline", avatarURL: .mockMXCAvatar)), timelineController: timelineController, - mediaProvider: MediaProviderMock(configuration: .init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), @@ -452,10 +444,9 @@ class MockScreen: Identifiable { let timelineController = MockTimelineController(listenForSignals: true) timelineController.timelineItems = RoomTimelineItemFixtures.largeChunk timelineController.incomingItems = [RoomTimelineItemFixtures.incomingMessage] - let parameters = RoomScreenCoordinatorParameters(clientProxy: ClientProxyMock(.init()), + let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), roomProxy: JoinedRoomProxyMock(.init(name: "Large timeline", avatarURL: .mockMXCAvatar)), timelineController: timelineController, - mediaProvider: MediaProviderMock(configuration: .init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), @@ -476,10 +467,9 @@ class MockScreen: Identifiable { let timelineController = MockTimelineController() timelineController.timelineItems = RoomTimelineItemFixtures.permalinkChunk - let parameters = RoomScreenCoordinatorParameters(clientProxy: ClientProxyMock(.init()), + let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), roomProxy: JoinedRoomProxyMock(.init(name: "Timeline highlight", avatarURL: .mockMXCAvatar)), timelineController: timelineController, - mediaProvider: MediaProviderMock(configuration: .init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), @@ -514,10 +504,9 @@ class MockScreen: Identifiable { let timelineController = MockTimelineController() timelineController.timelineItems = RoomTimelineItemFixtures.disclosedPolls timelineController.incomingItems = [] - let parameters = RoomScreenCoordinatorParameters(clientProxy: ClientProxyMock(.init()), + let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), roomProxy: JoinedRoomProxyMock(.init(name: "Polls timeline", avatarURL: .mockMXCAvatar)), timelineController: timelineController, - mediaProvider: MediaProviderMock(configuration: .init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), @@ -539,10 +528,9 @@ class MockScreen: Identifiable { let timelineController = MockTimelineController() timelineController.timelineItems = RoomTimelineItemFixtures.undisclosedPolls timelineController.incomingItems = [] - let parameters = RoomScreenCoordinatorParameters(clientProxy: ClientProxyMock(.init()), + let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), roomProxy: JoinedRoomProxyMock(.init(name: "Polls timeline", avatarURL: .mockMXCAvatar)), timelineController: timelineController, - mediaProvider: MediaProviderMock(configuration: .init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), @@ -564,10 +552,9 @@ class MockScreen: Identifiable { let timelineController = MockTimelineController() timelineController.timelineItems = RoomTimelineItemFixtures.outgoingPolls timelineController.incomingItems = [] - let parameters = RoomScreenCoordinatorParameters(clientProxy: ClientProxyMock(.init()), + let parameters = RoomScreenCoordinatorParameters(userSession: UserSessionMock(.init()), roomProxy: JoinedRoomProxyMock(.init(name: "Polls timeline", avatarURL: .mockMXCAvatar)), timelineController: timelineController, - mediaProvider: MediaProviderMock(configuration: .init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), @@ -631,9 +618,8 @@ class MockScreen: Identifiable { case .roomMembersListScreenPendingInvites: let navigationStackCoordinator = NavigationStackCoordinator() let members: [RoomMemberProxyMock] = [.mockInvitedAlice, .mockBob, .mockCharlie] - let coordinator = RoomMembersListScreenCoordinator(parameters: .init(clientProxy: ClientProxyMock(.init()), + let coordinator = RoomMembersListScreenCoordinator(parameters: .init(userSession: UserSessionMock(.init()), roomProxy: JoinedRoomProxyMock(.init(name: "test", members: members)), - mediaProvider: MediaProviderMock(configuration: .init()), userIndicatorController: ServiceLocator.shared.userIndicatorController, analytics: ServiceLocator.shared.analytics)) navigationStackCoordinator.setRootCoordinator(coordinator) diff --git a/UnitTests/Sources/BlockedUsersScreenViewModelTests.swift b/UnitTests/Sources/BlockedUsersScreenViewModelTests.swift index 5f9afa1c5..291a17863 100644 --- a/UnitTests/Sources/BlockedUsersScreenViewModelTests.swift +++ b/UnitTests/Sources/BlockedUsersScreenViewModelTests.swift @@ -16,8 +16,7 @@ class BlockedUsersScreenViewModelTests: XCTestCase { let clientProxy = ClientProxyMock(.init(userID: RoomMemberProxyMock.mockMe.userID)) let viewModel = BlockedUsersScreenViewModel(hideProfiles: true, - clientProxy: clientProxy, - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init(clientProxy: clientProxy)), userIndicatorController: ServiceLocator.shared.userIndicatorController) let deferred = deferFailure(viewModel.context.observe(\.viewState.blockedUsers), timeout: 1) { $0.contains { $0.displayName != nil } } @@ -31,8 +30,7 @@ class BlockedUsersScreenViewModelTests: XCTestCase { let clientProxy = ClientProxyMock(.init(userID: RoomMemberProxyMock.mockMe.userID)) let viewModel = BlockedUsersScreenViewModel(hideProfiles: false, - clientProxy: clientProxy, - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init(clientProxy: clientProxy)), userIndicatorController: ServiceLocator.shared.userIndicatorController) let deferred = deferFulfillment(viewModel.context.observe(\.viewState.blockedUsers)) { $0.contains { $0.displayName != nil } } diff --git a/UnitTests/Sources/InviteUsersViewModelTests.swift b/UnitTests/Sources/InviteUsersViewModelTests.swift index 7ba4578c8..e961c838a 100644 --- a/UnitTests/Sources/InviteUsersViewModelTests.swift +++ b/UnitTests/Sources/InviteUsersViewModelTests.swift @@ -89,10 +89,9 @@ class InviteUsersScreenViewModelTests: XCTestCase { userDiscoveryService = UserDiscoveryServiceMock() userDiscoveryService.searchProfilesWithReturnValue = .success([]) usersSubject.send([]) - let viewModel = InviteUsersScreenViewModel(clientProxy: ClientProxyMock(.init()), + let viewModel = InviteUsersScreenViewModel(userSession: UserSessionMock(.init()), selectedUsers: usersSubject.asCurrentValuePublisher(), roomType: roomType, - mediaProvider: MediaProviderMock(configuration: .init()), userDiscoveryService: userDiscoveryService, userIndicatorController: UserIndicatorControllerMock()) viewModel.state.usersSection = .init(type: .suggestions, users: [.mockAlice, .mockBob, .mockCharlie]) diff --git a/UnitTests/Sources/JoinRoomScreenViewModelTests.swift b/UnitTests/Sources/JoinRoomScreenViewModelTests.swift index 95b4de388..4f838462d 100644 --- a/UnitTests/Sources/JoinRoomScreenViewModelTests.swift +++ b/UnitTests/Sources/JoinRoomScreenViewModelTests.swift @@ -195,8 +195,7 @@ class JoinRoomScreenViewModelTests: XCTestCase { viewModel = JoinRoomScreenViewModel(roomID: "1", via: [], appSettings: appSettings, - clientProxy: clientProxy, - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init(clientProxy: clientProxy)), userIndicatorController: ServiceLocator.shared.userIndicatorController) } } diff --git a/UnitTests/Sources/MessageForwardingScreenViewModelTests.swift b/UnitTests/Sources/MessageForwardingScreenViewModelTests.swift index 946bfceb9..b0b67f9d6 100644 --- a/UnitTests/Sources/MessageForwardingScreenViewModelTests.swift +++ b/UnitTests/Sources/MessageForwardingScreenViewModelTests.swift @@ -26,10 +26,9 @@ class MessageForwardingScreenViewModelTests: XCTestCase { clientProxy.roomForIdentifierClosure = { .joined(JoinedRoomProxyMock(.init(id: $0))) } viewModel = MessageForwardingScreenViewModel(forwardingItem: forwardingItem, - clientProxy: clientProxy, + userSession: UserSessionMock(.init(clientProxy: clientProxy)), roomSummaryProvider: RoomSummaryProviderMock(.init(state: .loaded(.mockRooms))), - userIndicatorController: UserIndicatorControllerMock(), - mediaProvider: MediaProviderMock(configuration: .init())) + userIndicatorController: UserIndicatorControllerMock()) context = viewModel.context } diff --git a/UnitTests/Sources/NotificationManager/NotificationManagerTests.swift b/UnitTests/Sources/NotificationManager/NotificationManagerTests.swift index 31f3d8600..b564b6d17 100644 --- a/UnitTests/Sources/NotificationManager/NotificationManagerTests.swift +++ b/UnitTests/Sources/NotificationManager/NotificationManagerTests.swift @@ -160,7 +160,7 @@ final class NotificationManagerTests: XCTestCase { notificationCenter.authorizationStatusReturnValue = .authorized notificationManager.delegate = self - notificationManager.setUserSession(UserSessionMock(.init(clientProxy: ClientProxyMock(.init())))) + notificationManager.setUserSession(UserSessionMock(.init())) try await Task.sleep(for: .seconds(1)) XCTAssertFalse(authorizationStatusWasGranted) @@ -177,7 +177,7 @@ final class NotificationManagerTests: XCTestCase { expectation.fulfill() } - notificationManager.setUserSession(UserSessionMock(.init(clientProxy: ClientProxyMock(.init())))) + notificationManager.setUserSession(UserSessionMock(.init())) await fulfillment(of: [expectation]) XCTAssertTrue(authorizationStatusWasGranted) diff --git a/UnitTests/Sources/PillContextTests.swift b/UnitTests/Sources/PillContextTests.swift index 3311a90a9..ccdf8c76e 100644 --- a/UnitTests/Sources/PillContextTests.swift +++ b/UnitTests/Sources/PillContextTests.swift @@ -19,7 +19,7 @@ class PillContextTests: XCTestCase { proxyMock.membersPublisher = subject.asCurrentValuePublisher() let mock = TimelineViewModel(roomProxy: proxyMock, timelineController: MockTimelineController(), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: ServiceLocator.shared.userIndicatorController, @@ -27,8 +27,7 @@ class PillContextTests: XCTestCase { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: ClientProxyMock(.init())) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .user(userID: id), font: .preferredFont(forTextStyle: .body))) XCTAssertFalse(context.viewState.isOwnMention) @@ -50,7 +49,7 @@ class PillContextTests: XCTestCase { proxyMock.membersPublisher = subject.asCurrentValuePublisher() let mock = TimelineViewModel(roomProxy: proxyMock, timelineController: MockTimelineController(), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: ServiceLocator.shared.userIndicatorController, @@ -58,8 +57,7 @@ class PillContextTests: XCTestCase { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: ClientProxyMock(.init())) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .user(userID: id), font: .preferredFont(forTextStyle: .body))) XCTAssertTrue(context.viewState.isOwnMention) @@ -74,7 +72,7 @@ class PillContextTests: XCTestCase { mockController.roomProxy = proxyMock let mock = TimelineViewModel(roomProxy: proxyMock, timelineController: mockController, - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: ServiceLocator.shared.userIndicatorController, @@ -82,8 +80,7 @@ class PillContextTests: XCTestCase { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: ClientProxyMock(.init())) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .allUsers, font: .preferredFont(forTextStyle: .body))) XCTAssertTrue(context.viewState.isOwnMention) @@ -98,7 +95,7 @@ class PillContextTests: XCTestCase { mockController.roomProxy = proxyMock let mock = TimelineViewModel(roomProxy: proxyMock, timelineController: mockController, - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init(clientProxy: clientMock)), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: ServiceLocator.shared.userIndicatorController, @@ -106,8 +103,7 @@ class PillContextTests: XCTestCase { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: clientMock) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .roomID("1"), font: .preferredFont(forTextStyle: .body))) XCTAssertFalse(context.viewState.isOwnMention) @@ -121,7 +117,7 @@ class PillContextTests: XCTestCase { mockController.roomProxy = proxyMock let mock = TimelineViewModel(roomProxy: proxyMock, timelineController: mockController, - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: ServiceLocator.shared.userIndicatorController, @@ -129,8 +125,7 @@ class PillContextTests: XCTestCase { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: ClientProxyMock(.init())) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .roomID("1"), font: .preferredFont(forTextStyle: .body))) XCTAssertFalse(context.viewState.isOwnMention) @@ -148,7 +143,7 @@ class PillContextTests: XCTestCase { canonicalAlias: "#foundation-and-empire:matrix.org") let mock = TimelineViewModel(roomProxy: proxyMock, timelineController: mockController, - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init(clientProxy: clientMock)), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: ServiceLocator.shared.userIndicatorController, @@ -156,8 +151,7 @@ class PillContextTests: XCTestCase { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: clientMock) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .roomAlias("#foundation-and-empire:matrix.org"), font: .preferredFont(forTextStyle: .body))) XCTAssertFalse(context.viewState.isOwnMention) @@ -171,7 +165,7 @@ class PillContextTests: XCTestCase { mockController.roomProxy = proxyMock let mock = TimelineViewModel(roomProxy: proxyMock, timelineController: mockController, - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: ServiceLocator.shared.userIndicatorController, @@ -179,8 +173,7 @@ class PillContextTests: XCTestCase { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: ClientProxyMock(.init())) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .roomAlias("#foundation-and-empire:matrix.org"), font: .preferredFont(forTextStyle: .body))) XCTAssertFalse(context.viewState.isOwnMention) @@ -196,7 +189,7 @@ class PillContextTests: XCTestCase { clientMock.roomSummaryForIdentifierReturnValue = .mock(id: "1", name: "Foundation 🔭🪐🌌") let mock = TimelineViewModel(roomProxy: proxyMock, timelineController: mockController, - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init(clientProxy: clientMock)), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: ServiceLocator.shared.userIndicatorController, @@ -204,8 +197,7 @@ class PillContextTests: XCTestCase { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: clientMock) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .event(room: .roomID("1")), font: .preferredFont(forTextStyle: .body))) XCTAssertFalse(context.viewState.isOwnMention) @@ -219,7 +211,7 @@ class PillContextTests: XCTestCase { mockController.roomProxy = proxyMock let mock = TimelineViewModel(roomProxy: proxyMock, timelineController: mockController, - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: ServiceLocator.shared.userIndicatorController, @@ -227,8 +219,7 @@ class PillContextTests: XCTestCase { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: ClientProxyMock(.init())) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .event(room: .roomID("1")), font: .preferredFont(forTextStyle: .body))) XCTAssertFalse(context.viewState.isOwnMention) @@ -246,7 +237,7 @@ class PillContextTests: XCTestCase { canonicalAlias: "#foundation-and-empire:matrix.org") let mock = TimelineViewModel(roomProxy: proxyMock, timelineController: mockController, - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init(clientProxy: clientMock)), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: ServiceLocator.shared.userIndicatorController, @@ -254,8 +245,7 @@ class PillContextTests: XCTestCase { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: clientMock) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .event(room: .roomAlias("#foundation-and-empire:matrix.org")), font: .preferredFont(forTextStyle: .body))) XCTAssertFalse(context.viewState.isOwnMention) @@ -269,7 +259,7 @@ class PillContextTests: XCTestCase { mockController.roomProxy = proxyMock let mock = TimelineViewModel(roomProxy: proxyMock, timelineController: mockController, - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: ServiceLocator.shared.userIndicatorController, @@ -277,8 +267,7 @@ class PillContextTests: XCTestCase { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: ClientProxyMock(.init())) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) let context = PillContext(timelineContext: mock.context, data: PillTextAttachmentData(type: .event(room: .roomAlias("#foundation-and-empire:matrix.org")), font: .preferredFont(forTextStyle: .body))) XCTAssertFalse(context.viewState.isOwnMention) diff --git a/UnitTests/Sources/RoomDetailsEditScreenViewModelTests.swift b/UnitTests/Sources/RoomDetailsEditScreenViewModelTests.swift index c918074c1..9c807fc96 100644 --- a/UnitTests/Sources/RoomDetailsEditScreenViewModelTests.swift +++ b/UnitTests/Sources/RoomDetailsEditScreenViewModelTests.swift @@ -111,8 +111,7 @@ class RoomDetailsEditScreenViewModelTests: XCTestCase { private func setupViewModel(roomProxyConfiguration: JoinedRoomProxyMockConfiguration) { userIndicatorController = UserIndicatorControllerMock.default viewModel = .init(roomProxy: JoinedRoomProxyMock(roomProxyConfiguration), - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), mediaUploadingPreprocessor: MediaUploadingPreprocessor(appSettings: ServiceLocator.shared.settings), userIndicatorController: userIndicatorController) } diff --git a/UnitTests/Sources/RoomDetailsScreenViewModelTests.swift b/UnitTests/Sources/RoomDetailsScreenViewModelTests.swift index 5399334bc..daae2d260 100644 --- a/UnitTests/Sources/RoomDetailsScreenViewModelTests.swift +++ b/UnitTests/Sources/RoomDetailsScreenViewModelTests.swift @@ -27,8 +27,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { roomProxyMock = JoinedRoomProxyMock(.init(name: "Test")) notificationSettingsProxyMock = NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), analyticsService: ServiceLocator.shared.analytics, userIndicatorController: ServiceLocator.shared.userIndicatorController, notificationSettingsProxy: notificationSettingsProxyMock, @@ -41,8 +40,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { let mockedMembers: [RoomMemberProxyMock] = [.mockBob, .mockAlice] roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", members: mockedMembers, joinRule: .public)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), analyticsService: ServiceLocator.shared.analytics, userIndicatorController: ServiceLocator.shared.userIndicatorController, notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -62,8 +60,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { let mockedMembers: [RoomMemberProxyMock] = [.mockBob, .mockAlice] roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", members: mockedMembers)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), analyticsService: ServiceLocator.shared.analytics, userIndicatorController: ServiceLocator.shared.userIndicatorController, notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -84,8 +81,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { let mockedMembers: [RoomMemberProxyMock] = [.mockAlice] roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", members: mockedMembers)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), analyticsService: ServiceLocator.shared.analytics, userIndicatorController: ServiceLocator.shared.userIndicatorController, notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -138,8 +134,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient] roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, isEncrypted: true, members: mockedMembers)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), analyticsService: ServiceLocator.shared.analytics, userIndicatorController: ServiceLocator.shared.userIndicatorController, notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -160,8 +155,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient] roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, isEncrypted: true, members: mockedMembers)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), analyticsService: ServiceLocator.shared.analytics, userIndicatorController: ServiceLocator.shared.userIndicatorController, notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -192,8 +186,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { clientProxy.ignoreUserReturnValue = .failure(.sdkError(ClientProxyMockError.generic)) roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, isEncrypted: true, members: mockedMembers)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, - clientProxy: clientProxy, - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init(clientProxy: clientProxy)), analyticsService: ServiceLocator.shared.analytics, userIndicatorController: ServiceLocator.shared.userIndicatorController, notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -223,8 +216,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient] roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, isEncrypted: true, members: mockedMembers)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), analyticsService: ServiceLocator.shared.analytics, userIndicatorController: ServiceLocator.shared.userIndicatorController, notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -255,8 +247,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { clientProxy.unignoreUserReturnValue = .failure(.sdkError(ClientProxyMockError.generic)) roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, isEncrypted: true, members: mockedMembers)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, - clientProxy: clientProxy, - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init(clientProxy: clientProxy)), analyticsService: ServiceLocator.shared.analytics, userIndicatorController: ServiceLocator.shared.userIndicatorController, notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -288,8 +279,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { joinRule: .public, powerLevelsConfiguration: .init(canUserInvite: false))) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), analyticsService: ServiceLocator.shared.analytics, userIndicatorController: ServiceLocator.shared.userIndicatorController, notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -306,8 +296,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockBob, .mockAlice] roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", members: mockedMembers, joinRule: .public)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), analyticsService: ServiceLocator.shared.analytics, userIndicatorController: ServiceLocator.shared.userIndicatorController, notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -359,8 +348,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { roomProxyMock.infoPublisher = CurrentValueSubject(roomInfoProxyMock).asCurrentValuePublisher() viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), analyticsService: ServiceLocator.shared.analytics, userIndicatorController: ServiceLocator.shared.userIndicatorController, notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -399,8 +387,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { roomProxyMock.infoPublisher = CurrentValueSubject(roomInfoProxyMock).asCurrentValuePublisher() viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), analyticsService: ServiceLocator.shared.analytics, userIndicatorController: ServiceLocator.shared.userIndicatorController, notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -439,8 +426,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { roomProxyMock.infoPublisher = CurrentValueSubject(roomInfoProxyMock).asCurrentValuePublisher() viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), analyticsService: ServiceLocator.shared.analytics, userIndicatorController: ServiceLocator.shared.userIndicatorController, notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -460,8 +446,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockBob, .mockAlice] roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: false, members: mockedMembers)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), analyticsService: ServiceLocator.shared.analytics, userIndicatorController: ServiceLocator.shared.userIndicatorController, notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -481,8 +466,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { let mockedMembers: [RoomMemberProxyMock] = [.mockMeAdmin, .mockBob, .mockAlice] roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, members: mockedMembers)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), analyticsService: ServiceLocator.shared.analytics, userIndicatorController: ServiceLocator.shared.userIndicatorController, notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()), @@ -500,8 +484,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { func testNotificationLoadingSettingsFailure() async throws { notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneThrowableError = NotificationSettingsError.Generic(msg: "error") viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), analyticsService: ServiceLocator.shared.analytics, userIndicatorController: ServiceLocator.shared.userIndicatorController, notificationSettingsProxy: notificationSettingsProxyMock, @@ -694,8 +677,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { let mockedRequests: [KnockRequestProxyMock] = [.init(), .init()] roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: false, knockRequestsState: .loaded(mockedRequests), joinRule: .knock)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), analyticsService: ServiceLocator.shared.analytics, userIndicatorController: ServiceLocator.shared.userIndicatorController, notificationSettingsProxy: notificationSettingsProxyMock, @@ -717,8 +699,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { ServiceLocator.shared.settings.knockingEnabled = true roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: false, knockRequestsState: .loading, joinRule: .knock)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), analyticsService: ServiceLocator.shared.analytics, userIndicatorController: ServiceLocator.shared.userIndicatorController, notificationSettingsProxy: notificationSettingsProxyMock, @@ -742,8 +723,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { joinRule: .knock, powerLevelsConfiguration: .init(canUserInvite: false))) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), analyticsService: ServiceLocator.shared.analytics, userIndicatorController: ServiceLocator.shared.userIndicatorController, notificationSettingsProxy: notificationSettingsProxyMock, @@ -767,8 +747,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase { let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockAlice] roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, members: mockedMembers, knockRequestsState: .loaded(mockedRequests), joinRule: .knock)) viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), analyticsService: ServiceLocator.shared.analytics, userIndicatorController: ServiceLocator.shared.userIndicatorController, notificationSettingsProxy: notificationSettingsProxyMock, diff --git a/UnitTests/Sources/RoomMemberDetailsViewModelTests.swift b/UnitTests/Sources/RoomMemberDetailsViewModelTests.swift index ac5ac6c30..bfdc3c53f 100644 --- a/UnitTests/Sources/RoomMemberDetailsViewModelTests.swift +++ b/UnitTests/Sources/RoomMemberDetailsViewModelTests.swift @@ -28,8 +28,7 @@ class RoomMemberDetailsViewModelTests: XCTestCase { roomMemberProxyMock = RoomMemberProxyMock.mockAlice viewModel = RoomMemberDetailsScreenViewModel(userID: roomMemberProxyMock.userID, roomProxy: roomProxyMock, - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), userIndicatorController: ServiceLocator.shared.userIndicatorController, analytics: ServiceLocator.shared.analytics) @@ -45,8 +44,7 @@ class RoomMemberDetailsViewModelTests: XCTestCase { roomMemberProxyMock = RoomMemberProxyMock.mockAlice viewModel = RoomMemberDetailsScreenViewModel(userID: roomMemberProxyMock.userID, roomProxy: roomProxyMock, - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), userIndicatorController: ServiceLocator.shared.userIndicatorController, analytics: ServiceLocator.shared.analytics) @@ -83,8 +81,7 @@ class RoomMemberDetailsViewModelTests: XCTestCase { clientProxy.ignoreUserReturnValue = .failure(.sdkError(ClientProxyMockError.generic)) viewModel = RoomMemberDetailsScreenViewModel(userID: roomMemberProxyMock.userID, roomProxy: roomProxyMock, - clientProxy: clientProxy, - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init(clientProxy: clientProxy)), userIndicatorController: ServiceLocator.shared.userIndicatorController, analytics: ServiceLocator.shared.analytics) @@ -120,8 +117,7 @@ class RoomMemberDetailsViewModelTests: XCTestCase { viewModel = RoomMemberDetailsScreenViewModel(userID: roomMemberProxyMock.userID, roomProxy: roomProxyMock, - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), userIndicatorController: ServiceLocator.shared.userIndicatorController, analytics: ServiceLocator.shared.analytics) @@ -156,8 +152,7 @@ class RoomMemberDetailsViewModelTests: XCTestCase { clientProxy.unignoreUserReturnValue = .failure(.sdkError(ClientProxyMockError.generic)) viewModel = RoomMemberDetailsScreenViewModel(userID: roomMemberProxyMock.userID, roomProxy: roomProxyMock, - clientProxy: clientProxy, - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init(clientProxy: clientProxy)), userIndicatorController: ServiceLocator.shared.userIndicatorController, analytics: ServiceLocator.shared.analytics) @@ -192,8 +187,7 @@ class RoomMemberDetailsViewModelTests: XCTestCase { roomMemberProxyMock = RoomMemberProxyMock.mockMe viewModel = RoomMemberDetailsScreenViewModel(userID: roomMemberProxyMock.userID, roomProxy: roomProxyMock, - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), userIndicatorController: ServiceLocator.shared.userIndicatorController, analytics: ServiceLocator.shared.analytics) @@ -209,8 +203,7 @@ class RoomMemberDetailsViewModelTests: XCTestCase { roomMemberProxyMock = RoomMemberProxyMock.mockIgnored viewModel = RoomMemberDetailsScreenViewModel(userID: roomMemberProxyMock.userID, roomProxy: roomProxyMock, - clientProxy: ClientProxyMock(.init()), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), userIndicatorController: ServiceLocator.shared.userIndicatorController, analytics: ServiceLocator.shared.analytics) diff --git a/UnitTests/Sources/RoomMembersListScreenViewModelTests.swift b/UnitTests/Sources/RoomMembersListScreenViewModelTests.swift index 7ba2dc34d..5800fa8bf 100644 --- a/UnitTests/Sources/RoomMembersListScreenViewModelTests.swift +++ b/UnitTests/Sources/RoomMembersListScreenViewModelTests.swift @@ -274,9 +274,8 @@ class RoomMembersListScreenViewModelTests: XCTestCase { private func setup(with members: [RoomMemberProxyMock]) { roomProxy = JoinedRoomProxyMock(.init(name: "test", members: members)) - viewModel = .init(clientProxy: ClientProxyMock(.init()), + viewModel = .init(userSession: UserSessionMock(.init()), roomProxy: roomProxy, - mediaProvider: MediaProviderMock(configuration: .init()), userIndicatorController: ServiceLocator.shared.userIndicatorController, analytics: ServiceLocator.shared.analytics) } diff --git a/UnitTests/Sources/RoomScreenViewModelTests.swift b/UnitTests/Sources/RoomScreenViewModelTests.swift index cff1688a9..bb8d59575 100644 --- a/UnitTests/Sources/RoomScreenViewModelTests.swift +++ b/UnitTests/Sources/RoomScreenViewModelTests.swift @@ -38,10 +38,9 @@ class RoomScreenViewModelTests: XCTestCase { } // setup the room proxy actions publisher roomProxyMock.underlyingInfoPublisher = infoSubject.asCurrentValuePublisher() - let viewModel = RoomScreenViewModel(clientProxy: ClientProxyMock(), + let viewModel = RoomScreenViewModel(userSession: UserSessionMock(.init()), roomProxy: roomProxyMock, initialSelectedPinnedEventID: nil, - mediaProvider: MediaProviderMock(configuration: .init()), ongoingCallRoomIDPublisher: .init(.init(nil)), appMediator: AppMediatorMock.default, appSettings: ServiceLocator.shared.settings, @@ -119,10 +118,9 @@ class RoomScreenViewModelTests: XCTestCase { .event(.init(item: EventTimelineItem(configuration: .init(eventID: "test2")), uniqueID: .init("2"))), .event(.init(item: EventTimelineItem(configuration: .init(eventID: "test3")), uniqueID: .init("3")))] roomProxyMock.pinnedEventsTimelineReturnValue = .success(pinnedTimelineMock) - let viewModel = RoomScreenViewModel(clientProxy: ClientProxyMock(), + let viewModel = RoomScreenViewModel(userSession: UserSessionMock(.init()), roomProxy: roomProxyMock, initialSelectedPinnedEventID: "test1", - mediaProvider: MediaProviderMock(configuration: .init()), ongoingCallRoomIDPublisher: .init(.init(nil)), appMediator: AppMediatorMock.default, appSettings: ServiceLocator.shared.settings, @@ -178,10 +176,9 @@ class RoomScreenViewModelTests: XCTestCase { let infoSubject = CurrentValueSubject(roomInfoProxyMock) roomProxyMock.underlyingInfoPublisher = infoSubject.asCurrentValuePublisher() - let viewModel = RoomScreenViewModel(clientProxy: ClientProxyMock(), + let viewModel = RoomScreenViewModel(userSession: UserSessionMock(.init()), roomProxy: roomProxyMock, initialSelectedPinnedEventID: nil, - mediaProvider: MediaProviderMock(configuration: .init()), ongoingCallRoomIDPublisher: .init(.init(nil)), appMediator: AppMediatorMock.default, appSettings: ServiceLocator.shared.settings, @@ -216,10 +213,9 @@ class RoomScreenViewModelTests: XCTestCase { // Given a room screen with no ongoing call. let ongoingCallRoomIDSubject = CurrentValueSubject(nil) let roomProxyMock = JoinedRoomProxyMock(.init(id: "MyRoomID")) - let viewModel = RoomScreenViewModel(clientProxy: ClientProxyMock(), + let viewModel = RoomScreenViewModel(userSession: UserSessionMock(.init()), roomProxy: roomProxyMock, initialSelectedPinnedEventID: nil, - mediaProvider: MediaProviderMock(configuration: .init()), ongoingCallRoomIDPublisher: ongoingCallRoomIDSubject.asCurrentValuePublisher(), appMediator: AppMediatorMock.default, appSettings: ServiceLocator.shared.settings, @@ -262,10 +258,9 @@ class RoomScreenViewModelTests: XCTestCase { expectation.fulfill() return .success(()) } - let viewModel = RoomScreenViewModel(clientProxy: ClientProxyMock(), + let viewModel = RoomScreenViewModel(userSession: UserSessionMock(.init()), roomProxy: roomProxyMock, initialSelectedPinnedEventID: nil, - mediaProvider: MediaProviderMock(configuration: .init()), ongoingCallRoomIDPublisher: .init(.init(nil)), appMediator: AppMediatorMock.default, appSettings: ServiceLocator.shared.settings, @@ -285,10 +280,9 @@ class RoomScreenViewModelTests: XCTestCase { // This one should be filtered KnockRequestProxyMock(.init(eventID: "2", userID: "@bob:matrix.org", isSeen: true))]), joinRule: .knock)) - let viewModel = RoomScreenViewModel(clientProxy: ClientProxyMock(), + let viewModel = RoomScreenViewModel(userSession: UserSessionMock(.init()), roomProxy: roomProxyMock, initialSelectedPinnedEventID: nil, - mediaProvider: MediaProviderMock(configuration: .init()), ongoingCallRoomIDPublisher: .init(.init(nil)), appMediator: AppMediatorMock.default, appSettings: ServiceLocator.shared.settings, @@ -321,10 +315,9 @@ class RoomScreenViewModelTests: XCTestCase { // This one should be filtered KnockRequestProxyMock(.init(eventID: "2", userID: "@bob:matrix.org"))]), joinRule: .knock)) - let viewModel = RoomScreenViewModel(clientProxy: ClientProxyMock(), + let viewModel = RoomScreenViewModel(userSession: UserSessionMock(.init()), roomProxy: roomProxyMock, initialSelectedPinnedEventID: nil, - mediaProvider: MediaProviderMock(configuration: .init()), ongoingCallRoomIDPublisher: .init(.init(nil)), appMediator: AppMediatorMock.default, appSettings: ServiceLocator.shared.settings, @@ -352,10 +345,9 @@ class RoomScreenViewModelTests: XCTestCase { ServiceLocator.shared.settings.knockingEnabled = true let roomProxyMock = JoinedRoomProxyMock(.init(knockRequestsState: .loading, joinRule: .knock)) - let viewModel = RoomScreenViewModel(clientProxy: ClientProxyMock(), + let viewModel = RoomScreenViewModel(userSession: UserSessionMock(.init()), roomProxy: roomProxyMock, initialSelectedPinnedEventID: nil, - mediaProvider: MediaProviderMock(configuration: .init()), ongoingCallRoomIDPublisher: .init(.init(nil)), appMediator: AppMediatorMock.default, appSettings: ServiceLocator.shared.settings, @@ -374,10 +366,9 @@ class RoomScreenViewModelTests: XCTestCase { let roomProxyMock = JoinedRoomProxyMock(.init(knockRequestsState: .loaded([KnockRequestProxyMock(.init(eventID: "1", userID: "@alice:matrix.org", displayName: "Alice", reason: "Hello World!"))]), joinRule: .knock, powerLevelsConfiguration: .init(canUserInvite: false))) - let viewModel = RoomScreenViewModel(clientProxy: ClientProxyMock(), + let viewModel = RoomScreenViewModel(userSession: UserSessionMock(.init()), roomProxy: roomProxyMock, initialSelectedPinnedEventID: nil, - mediaProvider: MediaProviderMock(configuration: .init()), ongoingCallRoomIDPublisher: .init(.init(nil)), appMediator: AppMediatorMock.default, appSettings: ServiceLocator.shared.settings, diff --git a/UnitTests/Sources/TimelineViewModelTests.swift b/UnitTests/Sources/TimelineViewModelTests.swift index bd50873d2..7823a1608 100644 --- a/UnitTests/Sources/TimelineViewModelTests.swift +++ b/UnitTests/Sources/TimelineViewModelTests.swift @@ -304,7 +304,7 @@ class TimelineViewModelTests: XCTestCase { let viewModel = TimelineViewModel(roomProxy: roomProxy, timelineController: timelineController, - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: userIndicatorControllerMock, @@ -312,8 +312,7 @@ class TimelineViewModelTests: XCTestCase { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: ClientProxyMock(.init())) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) return (viewModel, roomProxy, timelineProxy, timelineController) } @@ -331,7 +330,7 @@ class TimelineViewModelTests: XCTestCase { timelineController.timelineItems = [message] let viewModel = TimelineViewModel(roomProxy: JoinedRoomProxyMock(.init(name: "", members: [RoomMemberProxyMock.mockAlice, RoomMemberProxyMock.mockCharlie])), timelineController: timelineController, - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: userIndicatorControllerMock, @@ -339,8 +338,7 @@ class TimelineViewModelTests: XCTestCase { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: ClientProxyMock(.init())) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) let deferred = deferFulfillment(viewModel.context.$viewState) { value in value.bindings.readReceiptsSummaryInfo?.orderedReceipts == receipts @@ -356,7 +354,7 @@ class TimelineViewModelTests: XCTestCase { RoomMemberProxyMock.mockAlice], ownUserID: RoomMemberProxyMock.mockAdmin.userID)), timelineController: MockTimelineController(), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: userIndicatorControllerMock, @@ -364,8 +362,7 @@ class TimelineViewModelTests: XCTestCase { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: ClientProxyMock(.init())) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) var deferred = deferFulfillment(viewModel.context.$viewState) { value in value.canCurrentUserKick && value.canCurrentUserBan @@ -393,7 +390,7 @@ class TimelineViewModelTests: XCTestCase { RoomMemberProxyMock.mockAlice], ownUserID: RoomMemberProxyMock.mockAlice.userID)), timelineController: MockTimelineController(), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: userIndicatorControllerMock, @@ -401,8 +398,7 @@ class TimelineViewModelTests: XCTestCase { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: ClientProxyMock(.init())) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) var deferredState = deferFulfillment(viewModel.context.$viewState) { value in !value.canCurrentUserKick && !value.canCurrentUserBan @@ -430,7 +426,7 @@ class TimelineViewModelTests: XCTestCase { RoomMemberProxyMock.mockBanned[0]], ownUserID: RoomMemberProxyMock.mockAdmin.userID)), timelineController: MockTimelineController(), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: userIndicatorControllerMock, @@ -438,8 +434,7 @@ class TimelineViewModelTests: XCTestCase { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: ClientProxyMock(.init())) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) var deferredState = deferFulfillment(viewModel.context.$viewState) { value in value.canCurrentUserKick && value.canCurrentUserBan @@ -473,7 +468,7 @@ class TimelineViewModelTests: XCTestCase { let viewModel = TimelineViewModel(roomProxy: roomProxyMock, timelineController: MockTimelineController(), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: userIndicatorControllerMock, @@ -481,8 +476,7 @@ class TimelineViewModelTests: XCTestCase { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: ClientProxyMock(.init())) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) XCTAssertEqual(configuration.pinnedEventIDs, viewModel.context.viewState.pinnedEventIDs) configuration.pinnedEventIDs = ["test1", "test2"] @@ -502,7 +496,7 @@ class TimelineViewModelTests: XCTestCase { let viewModel = TimelineViewModel(roomProxy: roomProxyMock, timelineController: MockTimelineController(), - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: userIndicatorControllerMock, @@ -510,8 +504,7 @@ class TimelineViewModelTests: XCTestCase { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: ClientProxyMock(.init())) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) var deferred = deferFulfillment(viewModel.context.$viewState) { value in value.canCurrentUserPin @@ -541,7 +534,7 @@ class TimelineViewModelTests: XCTestCase { TimelineViewModel(roomProxy: roomProxy ?? JoinedRoomProxyMock(.init(name: "")), focussedEventID: focussedEventID, timelineController: timelineController, - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init()), mediaPlayerProvider: MediaPlayerProviderMock(), voiceMessageMediaManager: VoiceMessageMediaManagerMock(), userIndicatorController: userIndicatorControllerMock, @@ -549,8 +542,7 @@ class TimelineViewModelTests: XCTestCase { appSettings: ServiceLocator.shared.settings, analyticsService: ServiceLocator.shared.analytics, emojiProvider: EmojiProvider(appSettings: ServiceLocator.shared.settings), - timelineControllerFactory: TimelineControllerFactoryMock(.init()), - clientProxy: ClientProxyMock(.init())) + timelineControllerFactory: TimelineControllerFactoryMock(.init())) } } diff --git a/UnitTests/Sources/UserProfileScreenViewModelTests.swift b/UnitTests/Sources/UserProfileScreenViewModelTests.swift index 5fb053e80..afd76b760 100644 --- a/UnitTests/Sources/UserProfileScreenViewModelTests.swift +++ b/UnitTests/Sources/UserProfileScreenViewModelTests.swift @@ -21,8 +21,7 @@ class UserProfileScreenViewModelTests: XCTestCase { viewModel = UserProfileScreenViewModel(userID: profile.userID, isPresentedModally: false, - clientProxy: clientProxy, - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init(clientProxy: clientProxy)), userIndicatorController: ServiceLocator.shared.userIndicatorController, analytics: ServiceLocator.shared.analytics) @@ -41,8 +40,7 @@ class UserProfileScreenViewModelTests: XCTestCase { viewModel = UserProfileScreenViewModel(userID: profile.userID, isPresentedModally: false, - clientProxy: clientProxy, - mediaProvider: MediaProviderMock(configuration: .init()), + userSession: UserSessionMock(.init(clientProxy: clientProxy)), userIndicatorController: ServiceLocator.shared.userIndicatorController, analytics: ServiceLocator.shared.analytics)