mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 10:33:45 +00:00
Introduce a new RoomProxyType and treat rooms differently based on their membership state
This commit is contained in:
committed by
Stefan Ceriu
parent
e0ba9925e7
commit
e281a3f242
@@ -169,6 +169,7 @@
|
|||||||
256D76972BA3254F7CB7F88B /* LocationAnnotation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAD8234D0E9C9B12BF9F240B /* LocationAnnotation.swift */; };
|
256D76972BA3254F7CB7F88B /* LocationAnnotation.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAD8234D0E9C9B12BF9F240B /* LocationAnnotation.swift */; };
|
||||||
25C4C1100B6EA79F5CC7CBB5 /* AppLockSetupPINScreenViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 989D7380D9C86B3A10D30B13 /* AppLockSetupPINScreenViewModelTests.swift */; };
|
25C4C1100B6EA79F5CC7CBB5 /* AppLockSetupPINScreenViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 989D7380D9C86B3A10D30B13 /* AppLockSetupPINScreenViewModelTests.swift */; };
|
||||||
260FFC1475EE94F641C3F3F9 /* PollFormScreenViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = A40F1985065500F0E7F61A27 /* PollFormScreenViewModelProtocol.swift */; };
|
260FFC1475EE94F641C3F3F9 /* PollFormScreenViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = A40F1985065500F0E7F61A27 /* PollFormScreenViewModelProtocol.swift */; };
|
||||||
|
261261778DEFAEFC042B875E /* JoinedRoomProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07C6B0B087FE6601C3F77816 /* JoinedRoomProxy.swift */; };
|
||||||
2689D22EF1D10D22B0A4DAEA /* NotificationContentBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7BB243B26D54EF1A0C422C0 /* NotificationContentBuilder.swift */; };
|
2689D22EF1D10D22B0A4DAEA /* NotificationContentBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7BB243B26D54EF1A0C422C0 /* NotificationContentBuilder.swift */; };
|
||||||
273AB64B9A26B61C51858867 /* AsyncSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = A73A07BAEDD74C48795A996A /* AsyncSequence.swift */; };
|
273AB64B9A26B61C51858867 /* AsyncSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = A73A07BAEDD74C48795A996A /* AsyncSequence.swift */; };
|
||||||
274CE3C986841D15FD530BF5 /* ShimmerModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97CE98208321C4D66E363612 /* ShimmerModifier.swift */; };
|
274CE3C986841D15FD530BF5 /* ShimmerModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97CE98208321C4D66E363612 /* ShimmerModifier.swift */; };
|
||||||
@@ -352,7 +353,6 @@
|
|||||||
4EAC427267424192964B16B3 /* AppSettingsHook.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13BE9781699FB510E9263192 /* AppSettingsHook.swift */; };
|
4EAC427267424192964B16B3 /* AppSettingsHook.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13BE9781699FB510E9263192 /* AppSettingsHook.swift */; };
|
||||||
4F2DF6138E87A4B8C2488CA3 /* VoiceMessageCacheProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43A84EE187D0C772E18A4E39 /* VoiceMessageCacheProtocol.swift */; };
|
4F2DF6138E87A4B8C2488CA3 /* VoiceMessageCacheProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43A84EE187D0C772E18A4E39 /* VoiceMessageCacheProtocol.swift */; };
|
||||||
4FC085B1E5D1EB804495E2F4 /* MockMediaProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FD6E621CC5E6D4830D96D2D /* MockMediaProvider.swift */; };
|
4FC085B1E5D1EB804495E2F4 /* MockMediaProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FD6E621CC5E6D4830D96D2D /* MockMediaProvider.swift */; };
|
||||||
4FC1EFE4968A259CBBACFAFB /* RoomProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = A65F140F9FE5E8D4DAEFF354 /* RoomProxy.swift */; };
|
|
||||||
4FDC8A9764CFDA90CE035725 /* Duration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB2253D36E81E045E1CB432 /* Duration.swift */; };
|
4FDC8A9764CFDA90CE035725 /* Duration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB2253D36E81E045E1CB432 /* Duration.swift */; };
|
||||||
4FE688FE9375B2FBF424146A /* TextBasedRoomTimelineViewProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6EA0D8B0BBD8805F7D5A133 /* TextBasedRoomTimelineViewProtocol.swift */; };
|
4FE688FE9375B2FBF424146A /* TextBasedRoomTimelineViewProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6EA0D8B0BBD8805F7D5A133 /* TextBasedRoomTimelineViewProtocol.swift */; };
|
||||||
4FF90E2242DBD596E1ED2E27 /* AppCoordinatorStateMachine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 077D7C3BE199B6E5DDEC07EC /* AppCoordinatorStateMachine.swift */; };
|
4FF90E2242DBD596E1ED2E27 /* AppCoordinatorStateMachine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 077D7C3BE199B6E5DDEC07EC /* AppCoordinatorStateMachine.swift */; };
|
||||||
@@ -552,6 +552,7 @@
|
|||||||
7C384A8E54A4B60A14CDE8E5 /* WaitlistScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12F1E7F9C2BE8BB751037826 /* WaitlistScreenCoordinator.swift */; };
|
7C384A8E54A4B60A14CDE8E5 /* WaitlistScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12F1E7F9C2BE8BB751037826 /* WaitlistScreenCoordinator.swift */; };
|
||||||
7C6376192F578E0BA801BFEC /* AnalyticsSettingsScreenModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42C64A14EE89928207E3B42B /* AnalyticsSettingsScreenModels.swift */; };
|
7C6376192F578E0BA801BFEC /* AnalyticsSettingsScreenModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42C64A14EE89928207E3B42B /* AnalyticsSettingsScreenModels.swift */; };
|
||||||
7CD16990BA843BE9ED639129 /* ImageRoomTimelineItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DFE4453AB0B34C203447162 /* ImageRoomTimelineItem.swift */; };
|
7CD16990BA843BE9ED639129 /* ImageRoomTimelineItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DFE4453AB0B34C203447162 /* ImageRoomTimelineItem.swift */; };
|
||||||
|
7D249465ED00988EEEC14E05 /* JoinedRoomProxyMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 867DC9530C42F7B5176BE465 /* JoinedRoomProxyMock.swift */; };
|
||||||
7D261B5119E78CC8E771CA15 /* GlobalSearchScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74653BE903970C0E36867D46 /* GlobalSearchScreenCoordinator.swift */; };
|
7D261B5119E78CC8E771CA15 /* GlobalSearchScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74653BE903970C0E36867D46 /* GlobalSearchScreenCoordinator.swift */; };
|
||||||
7D58B4F46CAA9A7C3E4C6A30 /* UserDetailsEditScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88410BD213FDF9B28E8B671F /* UserDetailsEditScreen.swift */; };
|
7D58B4F46CAA9A7C3E4C6A30 /* UserDetailsEditScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88410BD213FDF9B28E8B671F /* UserDetailsEditScreen.swift */; };
|
||||||
7D6DC832DE7A3DE874E2E9BC /* SnapshotTesting in Frameworks */ = {isa = PBXBuildFile; productRef = 7B6BC3219ADD8AA0311D2B86 /* SnapshotTesting */; };
|
7D6DC832DE7A3DE874E2E9BC /* SnapshotTesting in Frameworks */ = {isa = PBXBuildFile; productRef = 7B6BC3219ADD8AA0311D2B86 /* SnapshotTesting */; };
|
||||||
@@ -610,6 +611,7 @@
|
|||||||
89658A44C9FC19B58FD1C226 /* ServerConfirmationScreenViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F08776C48FFB47CACF64ED10 /* ServerConfirmationScreenViewModelTests.swift */; };
|
89658A44C9FC19B58FD1C226 /* ServerConfirmationScreenViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F08776C48FFB47CACF64ED10 /* ServerConfirmationScreenViewModelTests.swift */; };
|
||||||
899359A4D1147601F6C4E364 /* PillConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB8D34E94AB07128DB73D6C7 /* PillConstants.swift */; };
|
899359A4D1147601F6C4E364 /* PillConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB8D34E94AB07128DB73D6C7 /* PillConstants.swift */; };
|
||||||
899793EFC63DF93C3E0141E7 /* RoomMemberDetailsScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FA60F848D1C14F873F9621A /* RoomMemberDetailsScreenCoordinator.swift */; };
|
899793EFC63DF93C3E0141E7 /* RoomMemberDetailsScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FA60F848D1C14F873F9621A /* RoomMemberDetailsScreenCoordinator.swift */; };
|
||||||
|
89B909AC66B96FA054EF3C14 /* InvitedRoomProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E95B3BDB80531C85CD50AE6 /* InvitedRoomProxy.swift */; };
|
||||||
8A0BD60CA4A6004DB06B5403 /* MediaUploadingPreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 669F35C505ACE1110589F875 /* MediaUploadingPreprocessor.swift */; };
|
8A0BD60CA4A6004DB06B5403 /* MediaUploadingPreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 669F35C505ACE1110589F875 /* MediaUploadingPreprocessor.swift */; };
|
||||||
8A5064CAC8E5F3B18645621D /* CallNotificationRoomTimelineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD6E082B0507FB28F966516A /* CallNotificationRoomTimelineView.swift */; };
|
8A5064CAC8E5F3B18645621D /* CallNotificationRoomTimelineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD6E082B0507FB28F966516A /* CallNotificationRoomTimelineView.swift */; };
|
||||||
8A83D715940378B9BA9F739E /* RoomInviterLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EB58E4E8D6D634C246AD5C2 /* RoomInviterLabel.swift */; };
|
8A83D715940378B9BA9F739E /* RoomInviterLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EB58E4E8D6D634C246AD5C2 /* RoomInviterLabel.swift */; };
|
||||||
@@ -833,7 +835,6 @@
|
|||||||
BCC864190651B3A3CF51E4DF /* MediaFileHandleProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEC1D382565A4E9CAC2F14EA /* MediaFileHandleProxy.swift */; };
|
BCC864190651B3A3CF51E4DF /* MediaFileHandleProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEC1D382565A4E9CAC2F14EA /* MediaFileHandleProxy.swift */; };
|
||||||
BD0BE20DBCE31253AE4490A1 /* RoomListFiltersEmptyStateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC1DDB2293A51EA4C2739351 /* RoomListFiltersEmptyStateView.swift */; };
|
BD0BE20DBCE31253AE4490A1 /* RoomListFiltersEmptyStateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC1DDB2293A51EA4C2739351 /* RoomListFiltersEmptyStateView.swift */; };
|
||||||
BD11E639CF566A9DA8FCA717 /* RoundedLabelItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE7C80EF77AD102053D3646E /* RoundedLabelItem.swift */; };
|
BD11E639CF566A9DA8FCA717 /* RoundedLabelItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE7C80EF77AD102053D3646E /* RoundedLabelItem.swift */; };
|
||||||
BD203FC6A7AE7637EA003643 /* RoomProxyMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ABDE6F66532CBEB0E016F94 /* RoomProxyMock.swift */; };
|
|
||||||
BD6685592716CA957D7BAAC4 /* RoomChangeRolesScreenSelectedItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D9B45D584D232CB9E5C7734 /* RoomChangeRolesScreenSelectedItem.swift */; };
|
BD6685592716CA957D7BAAC4 /* RoomChangeRolesScreenSelectedItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D9B45D584D232CB9E5C7734 /* RoomChangeRolesScreenSelectedItem.swift */; };
|
||||||
BD782053BE4C3D2F0BDE5699 /* ServiceLocator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57F95CADD0A5DBD76B990FCB /* ServiceLocator.swift */; };
|
BD782053BE4C3D2F0BDE5699 /* ServiceLocator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57F95CADD0A5DBD76B990FCB /* ServiceLocator.swift */; };
|
||||||
BDA68E8D95B2B24B28825B8B /* LoginScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C368CAB3063EF275357ECD4 /* LoginScreenViewModel.swift */; };
|
BDA68E8D95B2B24B28825B8B /* LoginScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C368CAB3063EF275357ECD4 /* LoginScreenViewModel.swift */; };
|
||||||
@@ -1210,6 +1211,7 @@
|
|||||||
06FAE373A7F20780BA84B59C /* MessageForwardingScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageForwardingScreenCoordinator.swift; sourceTree = "<group>"; };
|
06FAE373A7F20780BA84B59C /* MessageForwardingScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageForwardingScreenCoordinator.swift; sourceTree = "<group>"; };
|
||||||
07579F9C29001E40715F3014 /* NotificationSettingsChatType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationSettingsChatType.swift; sourceTree = "<group>"; };
|
07579F9C29001E40715F3014 /* NotificationSettingsChatType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationSettingsChatType.swift; sourceTree = "<group>"; };
|
||||||
077D7C3BE199B6E5DDEC07EC /* AppCoordinatorStateMachine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppCoordinatorStateMachine.swift; sourceTree = "<group>"; };
|
077D7C3BE199B6E5DDEC07EC /* AppCoordinatorStateMachine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppCoordinatorStateMachine.swift; sourceTree = "<group>"; };
|
||||||
|
07C6B0B087FE6601C3F77816 /* JoinedRoomProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinedRoomProxy.swift; sourceTree = "<group>"; };
|
||||||
08283301736A6FE9D558B2CB /* AppLockScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
08283301736A6FE9D558B2CB /* AppLockScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
||||||
0833F51229E166BCA141D004 /* RoomRolesAndPermissionsFlowCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomRolesAndPermissionsFlowCoordinator.swift; sourceTree = "<group>"; };
|
0833F51229E166BCA141D004 /* RoomRolesAndPermissionsFlowCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomRolesAndPermissionsFlowCoordinator.swift; sourceTree = "<group>"; };
|
||||||
086B997409328F091EBA43CE /* RoomScreenUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomScreenUITests.swift; sourceTree = "<group>"; };
|
086B997409328F091EBA43CE /* RoomScreenUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomScreenUITests.swift; sourceTree = "<group>"; };
|
||||||
@@ -1235,6 +1237,7 @@
|
|||||||
0DBB08A95EFA668F2CF27211 /* AppLockSetupFlowCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockSetupFlowCoordinator.swift; sourceTree = "<group>"; };
|
0DBB08A95EFA668F2CF27211 /* AppLockSetupFlowCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockSetupFlowCoordinator.swift; sourceTree = "<group>"; };
|
||||||
0DF5CBAF69BDF5DF31C661E1 /* IntentionalMentions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntentionalMentions.swift; sourceTree = "<group>"; };
|
0DF5CBAF69BDF5DF31C661E1 /* IntentionalMentions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntentionalMentions.swift; sourceTree = "<group>"; };
|
||||||
0E8BDC092D817B68CD9040C5 /* UserSessionStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserSessionStore.swift; sourceTree = "<group>"; };
|
0E8BDC092D817B68CD9040C5 /* UserSessionStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserSessionStore.swift; sourceTree = "<group>"; };
|
||||||
|
0E95B3BDB80531C85CD50AE6 /* InvitedRoomProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InvitedRoomProxy.swift; sourceTree = "<group>"; };
|
||||||
0EE9EAF0309A2A1D67D8FAF5 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = sv; path = sv.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
0EE9EAF0309A2A1D67D8FAF5 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = sv; path = sv.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
||||||
0F5567A7EF6F2AB9473236F6 /* DocumentPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DocumentPicker.swift; sourceTree = "<group>"; };
|
0F5567A7EF6F2AB9473236F6 /* DocumentPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DocumentPicker.swift; sourceTree = "<group>"; };
|
||||||
0F64447FF544298A6A3BEF85 /* NotificationSettingsScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationSettingsScreenModels.swift; sourceTree = "<group>"; };
|
0F64447FF544298A6A3BEF85 /* NotificationSettingsScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationSettingsScreenModels.swift; sourceTree = "<group>"; };
|
||||||
@@ -1280,7 +1283,6 @@
|
|||||||
1A4D29F2683F5772AC72406F /* MapTilerStaticMap.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapTilerStaticMap.swift; sourceTree = "<group>"; };
|
1A4D29F2683F5772AC72406F /* MapTilerStaticMap.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapTilerStaticMap.swift; sourceTree = "<group>"; };
|
||||||
1A7ED2EF5BDBAD2A7DBC4636 /* GeoURITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeoURITests.swift; sourceTree = "<group>"; };
|
1A7ED2EF5BDBAD2A7DBC4636 /* GeoURITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeoURITests.swift; sourceTree = "<group>"; };
|
||||||
1AB58EF0176D4CFB1040DA22 /* WaitlistScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WaitlistScreenViewModel.swift; sourceTree = "<group>"; };
|
1AB58EF0176D4CFB1040DA22 /* WaitlistScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WaitlistScreenViewModel.swift; sourceTree = "<group>"; };
|
||||||
1ABDE6F66532CBEB0E016F94 /* RoomProxyMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomProxyMock.swift; sourceTree = "<group>"; };
|
|
||||||
1B2AC540DE619B36832A5DB5 /* LocationRoomTimelineItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationRoomTimelineItem.swift; sourceTree = "<group>"; };
|
1B2AC540DE619B36832A5DB5 /* LocationRoomTimelineItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationRoomTimelineItem.swift; sourceTree = "<group>"; };
|
||||||
1B53D6C5C0D14B04D3AB3F6E /* PillAttachmentViewProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PillAttachmentViewProvider.swift; sourceTree = "<group>"; };
|
1B53D6C5C0D14B04D3AB3F6E /* PillAttachmentViewProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PillAttachmentViewProvider.swift; sourceTree = "<group>"; };
|
||||||
1B564D748B67A156F413CD97 /* NotificationSettingsEditScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationSettingsEditScreenModels.swift; sourceTree = "<group>"; };
|
1B564D748B67A156F413CD97 /* NotificationSettingsEditScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationSettingsEditScreenModels.swift; sourceTree = "<group>"; };
|
||||||
@@ -1746,6 +1748,7 @@
|
|||||||
8610C1D21565C950BCA6A454 /* AppLockSetupSettingsScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockSetupSettingsScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
8610C1D21565C950BCA6A454 /* AppLockSetupSettingsScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockSetupSettingsScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
||||||
86376BEE425704AEE197CA54 /* PillContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PillContext.swift; sourceTree = "<group>"; };
|
86376BEE425704AEE197CA54 /* PillContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PillContext.swift; sourceTree = "<group>"; };
|
||||||
8642512079EEFD622E3AA66B /* BlockedUsersScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockedUsersScreenModels.swift; sourceTree = "<group>"; };
|
8642512079EEFD622E3AA66B /* BlockedUsersScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockedUsersScreenModels.swift; sourceTree = "<group>"; };
|
||||||
|
867DC9530C42F7B5176BE465 /* JoinedRoomProxyMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinedRoomProxyMock.swift; sourceTree = "<group>"; };
|
||||||
869A8A4632E511351BFE2EC4 /* JoinRoomScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinRoomScreen.swift; sourceTree = "<group>"; };
|
869A8A4632E511351BFE2EC4 /* JoinRoomScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinRoomScreen.swift; sourceTree = "<group>"; };
|
||||||
86A6F283BC574FDB96ABBB07 /* DeveloperOptionsScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeveloperOptionsScreenViewModel.swift; sourceTree = "<group>"; };
|
86A6F283BC574FDB96ABBB07 /* DeveloperOptionsScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeveloperOptionsScreenViewModel.swift; sourceTree = "<group>"; };
|
||||||
86C8CE2630F54D5FE1591786 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
86C8CE2630F54D5FE1591786 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
@@ -1865,7 +1868,6 @@
|
|||||||
A443FAE2EE820A5790C35C8D /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = et; path = et.lproj/Localizable.strings; sourceTree = "<group>"; };
|
A443FAE2EE820A5790C35C8D /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = et; path = et.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||||
A4A1003A0F7A1DFB47F4E2D0 /* TimelineItemMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineItemMock.swift; sourceTree = "<group>"; };
|
A4A1003A0F7A1DFB47F4E2D0 /* TimelineItemMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineItemMock.swift; sourceTree = "<group>"; };
|
||||||
A58E93D91DE3288010390DEE /* EmojiDetectionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiDetectionTests.swift; sourceTree = "<group>"; };
|
A58E93D91DE3288010390DEE /* EmojiDetectionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiDetectionTests.swift; sourceTree = "<group>"; };
|
||||||
A65F140F9FE5E8D4DAEFF354 /* RoomProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomProxy.swift; sourceTree = "<group>"; };
|
|
||||||
A69869844D2B6F5BD9AABF85 /* OIDCConfigurationProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OIDCConfigurationProxy.swift; sourceTree = "<group>"; };
|
A69869844D2B6F5BD9AABF85 /* OIDCConfigurationProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OIDCConfigurationProxy.swift; sourceTree = "<group>"; };
|
||||||
A6B19D10B102956066AF117B /* PollOptionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollOptionView.swift; sourceTree = "<group>"; };
|
A6B19D10B102956066AF117B /* PollOptionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollOptionView.swift; sourceTree = "<group>"; };
|
||||||
A6B891A6DA826E2461DBB40F /* PHGPostHogConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PHGPostHogConfiguration.swift; sourceTree = "<group>"; };
|
A6B891A6DA826E2461DBB40F /* PHGPostHogConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PHGPostHogConfiguration.swift; sourceTree = "<group>"; };
|
||||||
@@ -2828,6 +2830,7 @@
|
|||||||
4E600B315B920B9687F8EE1B /* ComposerDraftServiceMock.swift */,
|
4E600B315B920B9687F8EE1B /* ComposerDraftServiceMock.swift */,
|
||||||
E321E840DCC63790049984F4 /* ElementCallServiceMock.swift */,
|
E321E840DCC63790049984F4 /* ElementCallServiceMock.swift */,
|
||||||
1C7A6BBC686B1F840FA807FB /* EventTimelineItemSDKMock.swift */,
|
1C7A6BBC686B1F840FA807FB /* EventTimelineItemSDKMock.swift */,
|
||||||
|
867DC9530C42F7B5176BE465 /* JoinedRoomProxyMock.swift */,
|
||||||
8DA1E8F287680C8ED25EDBAC /* NetworkMonitorMock.swift */,
|
8DA1E8F287680C8ED25EDBAC /* NetworkMonitorMock.swift */,
|
||||||
382B50F7E379B3DBBD174364 /* NotificationSettingsProxyMock.swift */,
|
382B50F7E379B3DBBD174364 /* NotificationSettingsProxyMock.swift */,
|
||||||
B2AD8A56CD37E23071A2F4BF /* PHGPostHogMock.swift */,
|
B2AD8A56CD37E23071A2F4BF /* PHGPostHogMock.swift */,
|
||||||
@@ -2835,7 +2838,6 @@
|
|||||||
894EE8F5B399A165BA2A6634 /* RoomDirectorySearchMock.swift */,
|
894EE8F5B399A165BA2A6634 /* RoomDirectorySearchMock.swift */,
|
||||||
36FD673E24FBFCFDF398716A /* RoomMemberProxyMock.swift */,
|
36FD673E24FBFCFDF398716A /* RoomMemberProxyMock.swift */,
|
||||||
F5D1BAA90F3A073D91B4F16B /* RoomNotificationSettingsProxyMock.swift */,
|
F5D1BAA90F3A073D91B4F16B /* RoomNotificationSettingsProxyMock.swift */,
|
||||||
1ABDE6F66532CBEB0E016F94 /* RoomProxyMock.swift */,
|
|
||||||
FC83F47D2173B7538AA72E0E /* RoomSummaryProviderMock.swift */,
|
FC83F47D2173B7538AA72E0E /* RoomSummaryProviderMock.swift */,
|
||||||
D479DF730528153665E5782E /* RoomTimelineControllerFactoryMock.swift */,
|
D479DF730528153665E5782E /* RoomTimelineControllerFactoryMock.swift */,
|
||||||
F74532E01B317C56C1BE8FA8 /* RoomTimelineProviderMock.swift */,
|
F74532E01B317C56C1BE8FA8 /* RoomTimelineProviderMock.swift */,
|
||||||
@@ -3114,9 +3116,10 @@
|
|||||||
40E6246F03D1FE377BC5D963 /* Room */ = {
|
40E6246F03D1FE377BC5D963 /* Room */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
0E95B3BDB80531C85CD50AE6 /* InvitedRoomProxy.swift */,
|
||||||
|
07C6B0B087FE6601C3F77816 /* JoinedRoomProxy.swift */,
|
||||||
B6404166CBF5CC88673FF9E2 /* RoomDetails.swift */,
|
B6404166CBF5CC88673FF9E2 /* RoomDetails.swift */,
|
||||||
974AEAF3FE0C577A6C04AD6E /* RoomPermissions.swift */,
|
974AEAF3FE0C577A6C04AD6E /* RoomPermissions.swift */,
|
||||||
A65F140F9FE5E8D4DAEFF354 /* RoomProxy.swift */,
|
|
||||||
47111410B6E659A697D472B5 /* RoomProxyProtocol.swift */,
|
47111410B6E659A697D472B5 /* RoomProxyProtocol.swift */,
|
||||||
2C0F49BD446849654C0D24E0 /* RoomMember */,
|
2C0F49BD446849654C0D24E0 /* RoomMember */,
|
||||||
70DABA39C844CA931B829395 /* RoomSummary */,
|
70DABA39C844CA931B829395 /* RoomSummary */,
|
||||||
@@ -6354,11 +6357,14 @@
|
|||||||
61941DEE5F3834765770BE01 /* InviteUsersScreenSelectedItem.swift in Sources */,
|
61941DEE5F3834765770BE01 /* InviteUsersScreenSelectedItem.swift in Sources */,
|
||||||
F519DE17A3A0F760307B2E6D /* InviteUsersScreenViewModel.swift in Sources */,
|
F519DE17A3A0F760307B2E6D /* InviteUsersScreenViewModel.swift in Sources */,
|
||||||
A17FAD2EBC53E17B5FD384DB /* InviteUsersScreenViewModelProtocol.swift in Sources */,
|
A17FAD2EBC53E17B5FD384DB /* InviteUsersScreenViewModelProtocol.swift in Sources */,
|
||||||
|
89B909AC66B96FA054EF3C14 /* InvitedRoomProxy.swift in Sources */,
|
||||||
6A54F52443EC52AC5CD772C0 /* JoinRoomScreen.swift in Sources */,
|
6A54F52443EC52AC5CD772C0 /* JoinRoomScreen.swift in Sources */,
|
||||||
AFE2AB612A1460E49578D746 /* JoinRoomScreenCoordinator.swift in Sources */,
|
AFE2AB612A1460E49578D746 /* JoinRoomScreenCoordinator.swift in Sources */,
|
||||||
DEDBD3E9CFCC9F20CAC79881 /* JoinRoomScreenModels.swift in Sources */,
|
DEDBD3E9CFCC9F20CAC79881 /* JoinRoomScreenModels.swift in Sources */,
|
||||||
EF47D802A404A53F15D5D4B6 /* JoinRoomScreenViewModel.swift in Sources */,
|
EF47D802A404A53F15D5D4B6 /* JoinRoomScreenViewModel.swift in Sources */,
|
||||||
7B66DA4E7E5FE4D1A0FCEAA4 /* JoinRoomScreenViewModelProtocol.swift in Sources */,
|
7B66DA4E7E5FE4D1A0FCEAA4 /* JoinRoomScreenViewModelProtocol.swift in Sources */,
|
||||||
|
261261778DEFAEFC042B875E /* JoinedRoomProxy.swift in Sources */,
|
||||||
|
7D249465ED00988EEEC14E05 /* JoinedRoomProxyMock.swift in Sources */,
|
||||||
E3CA565A4B9704F191B191F0 /* JoinedRoomSize+MemberCount.swift in Sources */,
|
E3CA565A4B9704F191B191F0 /* JoinedRoomSize+MemberCount.swift in Sources */,
|
||||||
1FE593ECEC40A43789105D80 /* KeychainController.swift in Sources */,
|
1FE593ECEC40A43789105D80 /* KeychainController.swift in Sources */,
|
||||||
FD29471C72872F8B7580E3E1 /* KeychainControllerMock.swift in Sources */,
|
FD29471C72872F8B7580E3E1 /* KeychainControllerMock.swift in Sources */,
|
||||||
@@ -6625,8 +6631,6 @@
|
|||||||
51B3B19FA5F91B455C807BA7 /* RoomPollsHistoryScreenModels.swift in Sources */,
|
51B3B19FA5F91B455C807BA7 /* RoomPollsHistoryScreenModels.swift in Sources */,
|
||||||
79741C1953269FF1A211D246 /* RoomPollsHistoryScreenViewModel.swift in Sources */,
|
79741C1953269FF1A211D246 /* RoomPollsHistoryScreenViewModel.swift in Sources */,
|
||||||
F103924DED414ADFE398CE99 /* RoomPollsHistoryScreenViewModelProtocol.swift in Sources */,
|
F103924DED414ADFE398CE99 /* RoomPollsHistoryScreenViewModelProtocol.swift in Sources */,
|
||||||
4FC1EFE4968A259CBBACFAFB /* RoomProxy.swift in Sources */,
|
|
||||||
BD203FC6A7AE7637EA003643 /* RoomProxyMock.swift in Sources */,
|
|
||||||
FA9C427FFB11B1AA2DCC5602 /* RoomProxyProtocol.swift in Sources */,
|
FA9C427FFB11B1AA2DCC5602 /* RoomProxyProtocol.swift in Sources */,
|
||||||
DC77E9DB2CFBE84A2BDF20C5 /* RoomRolesAndPermissionsFlowCoordinator.swift in Sources */,
|
DC77E9DB2CFBE84A2BDF20C5 /* RoomRolesAndPermissionsFlowCoordinator.swift in Sources */,
|
||||||
D10BA4F041DC58580A440A32 /* RoomRolesAndPermissionsScreen.swift in Sources */,
|
D10BA4F041DC58580A440A32 /* RoomRolesAndPermissionsScreen.swift in Sources */,
|
||||||
|
|||||||
@@ -325,10 +325,15 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg
|
|||||||
guard let roomID = content.userInfo[NotificationConstants.UserInfoKey.roomIdentifier] as? String else {
|
guard let roomID = content.userInfo[NotificationConstants.UserInfoKey.roomIdentifier] as? String else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
let roomProxy = await userSession.clientProxy.roomForIdentifier(roomID)
|
|
||||||
switch await roomProxy?.timeline.sendMessage(replyText,
|
guard case let .joined(roomProxy) = await userSession.clientProxy.roomForIdentifier(roomID) else {
|
||||||
html: nil,
|
MXLog.error("Tried to reply in an unjoined room: \(roomID)")
|
||||||
intentionalMentions: .empty) {
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
switch await roomProxy.timeline.sendMessage(replyText,
|
||||||
|
html: nil,
|
||||||
|
intentionalMentions: .empty) {
|
||||||
case .success:
|
case .success:
|
||||||
break
|
break
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import SwiftUI
|
|||||||
import UserNotifications
|
import UserNotifications
|
||||||
|
|
||||||
enum RoomFlowCoordinatorAction: Equatable {
|
enum RoomFlowCoordinatorAction: Equatable {
|
||||||
case presentCallScreen(roomProxy: RoomProxyProtocol)
|
case presentCallScreen(roomProxy: JoinedRoomProxyProtocol)
|
||||||
case finished
|
case finished
|
||||||
|
|
||||||
static func == (lhs: RoomFlowCoordinatorAction, rhs: RoomFlowCoordinatorAction) -> Bool {
|
static func == (lhs: RoomFlowCoordinatorAction, rhs: RoomFlowCoordinatorAction) -> Bool {
|
||||||
@@ -63,7 +63,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
|||||||
private let analytics: AnalyticsService
|
private let analytics: AnalyticsService
|
||||||
private let userIndicatorController: UserIndicatorControllerProtocol
|
private let userIndicatorController: UserIndicatorControllerProtocol
|
||||||
|
|
||||||
private var roomProxy: RoomProxyProtocol!
|
private var roomProxy: JoinedRoomProxyProtocol!
|
||||||
|
|
||||||
private var roomScreenCoordinator: RoomScreenCoordinator?
|
private var roomScreenCoordinator: RoomScreenCoordinator?
|
||||||
private weak var joinRoomScreenCoordinator: JoinRoomScreenCoordinator?
|
private weak var joinRoomScreenCoordinator: JoinRoomScreenCoordinator?
|
||||||
@@ -139,7 +139,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
|||||||
|
|
||||||
Task {
|
Task {
|
||||||
if roomProxy == nil {
|
if roomProxy == nil {
|
||||||
guard let roomProxy = await userSession.clientProxy.roomForIdentifier(roomID) else {
|
guard case let .joined(roomProxy) = await userSession.clientProxy.roomForIdentifier(roomID) else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -173,7 +173,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func presentCallScreen(roomID: String) async {
|
private func presentCallScreen(roomID: String) async {
|
||||||
guard let roomProxy = await userSession.clientProxy.roomForIdentifier(roomID) else {
|
guard case let .joined(roomProxy) = await userSession.clientProxy.roomForIdentifier(roomID) else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -183,13 +183,13 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
|||||||
private func handleRoomRoute(roomID: String, via: [String], focussedEventID: String? = nil, animated: Bool) async {
|
private func handleRoomRoute(roomID: String, via: [String], focussedEventID: String? = nil, animated: Bool) async {
|
||||||
guard roomID == self.roomID else { fatalError("Navigation route doesn't belong to this room flow.") }
|
guard roomID == self.roomID else { fatalError("Navigation route doesn't belong to this room flow.") }
|
||||||
|
|
||||||
guard let roomProxy = await userSession.clientProxy.roomForIdentifier(roomID) else {
|
guard let room = await userSession.clientProxy.roomForIdentifier(roomID) else {
|
||||||
stateMachine.tryEvent(.presentJoinRoomScreen(via: via), userInfo: EventUserInfo(animated: animated))
|
stateMachine.tryEvent(.presentJoinRoomScreen(via: via), userInfo: EventUserInfo(animated: animated))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
switch roomProxy.membership {
|
switch room {
|
||||||
case .joined:
|
case .joined(let roomProxy):
|
||||||
await storeAndSubscribeToRoomProxy(roomProxy)
|
await storeAndSubscribeToRoomProxy(roomProxy)
|
||||||
stateMachine.tryEvent(.presentRoom(focussedEventID: focussedEventID), userInfo: EventUserInfo(animated: animated))
|
stateMachine.tryEvent(.presentRoom(focussedEventID: focussedEventID), userInfo: EventUserInfo(animated: animated))
|
||||||
default:
|
default:
|
||||||
@@ -207,7 +207,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
|||||||
|
|
||||||
// MARK: - Private
|
// MARK: - Private
|
||||||
|
|
||||||
private func storeAndSubscribeToRoomProxy(_ roomProxy: RoomProxyProtocol) async {
|
private func storeAndSubscribeToRoomProxy(_ roomProxy: JoinedRoomProxyProtocol) async {
|
||||||
if let oldRoomProxy = self.roomProxy {
|
if let oldRoomProxy = self.roomProxy {
|
||||||
if oldRoomProxy.id != roomProxy.id {
|
if oldRoomProxy.id != roomProxy.id {
|
||||||
fatalError("Trying to create different room proxies for the same flow coordinator")
|
fatalError("Trying to create different room proxies for the same flow coordinator")
|
||||||
@@ -217,10 +217,6 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
guard roomProxy.membership == .joined else {
|
|
||||||
fatalError("Requesting room details for an unjoined room")
|
|
||||||
}
|
|
||||||
|
|
||||||
await roomProxy.subscribeForUpdates()
|
await roomProxy.subscribeForUpdates()
|
||||||
|
|
||||||
// Make sure not to set this until after the subscription has succeeded, otherwise the
|
// Make sure not to set this until after the subscription has succeeded, otherwise the
|
||||||
@@ -658,7 +654,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
|||||||
Task { [weak self] in
|
Task { [weak self] in
|
||||||
guard let self else { return }
|
guard let self else { return }
|
||||||
|
|
||||||
if let roomProxy = await userSession.clientProxy.roomForIdentifier(roomID) {
|
if case let .joined(roomProxy) = await userSession.clientProxy.roomForIdentifier(roomID) {
|
||||||
await storeAndSubscribeToRoomProxy(roomProxy)
|
await storeAndSubscribeToRoomProxy(roomProxy)
|
||||||
stateMachine.tryEvent(.presentRoom(focussedEventID: nil), userInfo: EventUserInfo(animated: animated))
|
stateMachine.tryEvent(.presentRoom(focussedEventID: nil), userInfo: EventUserInfo(animated: animated))
|
||||||
|
|
||||||
@@ -1300,7 +1296,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func inviteUsers(_ users: [String], in room: RoomProxyProtocol) {
|
private func inviteUsers(_ users: [String], in room: JoinedRoomProxyProtocol) {
|
||||||
navigationStackCoordinator.setSheetCoordinator(nil)
|
navigationStackCoordinator.setSheetCoordinator(nil)
|
||||||
|
|
||||||
Task {
|
Task {
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ enum RoomRolesAndPermissionsFlowCoordinatorAction: Equatable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct RoomRolesAndPermissionsFlowCoordinatorParameters {
|
struct RoomRolesAndPermissionsFlowCoordinatorParameters {
|
||||||
let roomProxy: RoomProxyProtocol
|
let roomProxy: JoinedRoomProxyProtocol
|
||||||
let mediaProvider: MediaProviderProtocol
|
let mediaProvider: MediaProviderProtocol
|
||||||
let navigationStackCoordinator: NavigationStackCoordinator
|
let navigationStackCoordinator: NavigationStackCoordinator
|
||||||
let userIndicatorController: UserIndicatorControllerProtocol
|
let userIndicatorController: UserIndicatorControllerProtocol
|
||||||
@@ -32,7 +32,7 @@ struct RoomRolesAndPermissionsFlowCoordinatorParameters {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class RoomRolesAndPermissionsFlowCoordinator: FlowCoordinatorProtocol {
|
class RoomRolesAndPermissionsFlowCoordinator: FlowCoordinatorProtocol {
|
||||||
private let roomProxy: RoomProxyProtocol
|
private let roomProxy: JoinedRoomProxyProtocol
|
||||||
private let navigationStackCoordinator: NavigationStackCoordinator
|
private let navigationStackCoordinator: NavigationStackCoordinator
|
||||||
private let mediaProvider: MediaProviderProtocol
|
private let mediaProvider: MediaProviderProtocol
|
||||||
private let userIndicatorController: UserIndicatorControllerProtocol
|
private let userIndicatorController: UserIndicatorControllerProtocol
|
||||||
|
|||||||
@@ -561,14 +561,14 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func presentCallScreen(roomID: String) async {
|
private func presentCallScreen(roomID: String) async {
|
||||||
guard let roomProxy = await userSession.clientProxy.roomForIdentifier(roomID) else {
|
guard case let .joined(roomProxy) = await userSession.clientProxy.roomForIdentifier(roomID) else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
presentCallScreen(roomProxy: roomProxy)
|
presentCallScreen(roomProxy: roomProxy)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func presentCallScreen(roomProxy: RoomProxyProtocol) {
|
private func presentCallScreen(roomProxy: JoinedRoomProxyProtocol) {
|
||||||
let colorScheme: ColorScheme = appMediator.windowManager.mainWindow.traitCollection.userInterfaceStyle == .light ? .light : .dark
|
let colorScheme: ColorScheme = appMediator.windowManager.mainWindow.traitCollection.userInterfaceStyle == .light ? .light : .dark
|
||||||
presentCallScreen(configuration: .init(roomProxy: roomProxy,
|
presentCallScreen(configuration: .init(roomProxy: roomProxy,
|
||||||
clientProxy: userSession.clientProxy,
|
clientProxy: userSession.clientProxy,
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ extension ClientProxyMock {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return await RoomProxyMock(.init(id: room.id, name: room.name))
|
return await .joined(JoinedRoomProxyMock(.init(id: room.id, name: room.name)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -9863,6 +9863,82 @@ open class NotificationSettingsSDKMock: MatrixRustSDK.NotificationSettings {
|
|||||||
try await unmuteRoomRoomIdIsEncryptedIsOneToOneClosure?(roomId, isEncrypted, isOneToOne)
|
try await unmuteRoomRoomIdIsEncryptedIsOneToOneClosure?(roomId, isEncrypted, isOneToOne)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
open class OidcAuthorizationDataSDKMock: MatrixRustSDK.OidcAuthorizationData {
|
||||||
|
init() {
|
||||||
|
super.init(noPointer: .init())
|
||||||
|
}
|
||||||
|
|
||||||
|
public required init(unsafeFromRawPointer pointer: UnsafeMutableRawPointer) {
|
||||||
|
fatalError("init(unsafeFromRawPointer:) has not been implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
fileprivate var pointer: UnsafeMutableRawPointer!
|
||||||
|
|
||||||
|
//MARK: - loginUrl
|
||||||
|
|
||||||
|
var loginUrlUnderlyingCallsCount = 0
|
||||||
|
open var loginUrlCallsCount: Int {
|
||||||
|
get {
|
||||||
|
if Thread.isMainThread {
|
||||||
|
return loginUrlUnderlyingCallsCount
|
||||||
|
} else {
|
||||||
|
var returnValue: Int? = nil
|
||||||
|
DispatchQueue.main.sync {
|
||||||
|
returnValue = loginUrlUnderlyingCallsCount
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnValue!
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
if Thread.isMainThread {
|
||||||
|
loginUrlUnderlyingCallsCount = newValue
|
||||||
|
} else {
|
||||||
|
DispatchQueue.main.sync {
|
||||||
|
loginUrlUnderlyingCallsCount = newValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
open var loginUrlCalled: Bool {
|
||||||
|
return loginUrlCallsCount > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
var loginUrlUnderlyingReturnValue: String!
|
||||||
|
open var loginUrlReturnValue: String! {
|
||||||
|
get {
|
||||||
|
if Thread.isMainThread {
|
||||||
|
return loginUrlUnderlyingReturnValue
|
||||||
|
} else {
|
||||||
|
var returnValue: String? = nil
|
||||||
|
DispatchQueue.main.sync {
|
||||||
|
returnValue = loginUrlUnderlyingReturnValue
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnValue!
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
if Thread.isMainThread {
|
||||||
|
loginUrlUnderlyingReturnValue = newValue
|
||||||
|
} else {
|
||||||
|
DispatchQueue.main.sync {
|
||||||
|
loginUrlUnderlyingReturnValue = newValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
open var loginUrlClosure: (() -> String)?
|
||||||
|
|
||||||
|
open override func loginUrl() -> String {
|
||||||
|
loginUrlCallsCount += 1
|
||||||
|
if let loginUrlClosure = loginUrlClosure {
|
||||||
|
return loginUrlClosure()
|
||||||
|
} else {
|
||||||
|
return loginUrlReturnValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
open class QrCodeDataSDKMock: MatrixRustSDK.QrCodeData {
|
open class QrCodeDataSDKMock: MatrixRustSDK.QrCodeData {
|
||||||
init() {
|
init() {
|
||||||
super.init(noPointer: .init())
|
super.init(noPointer: .init())
|
||||||
|
|||||||
+7
-10
@@ -17,8 +17,12 @@
|
|||||||
import Combine
|
import Combine
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
|
enum RoomProxyMockError: Error {
|
||||||
|
case generic
|
||||||
|
}
|
||||||
|
|
||||||
@MainActor
|
@MainActor
|
||||||
struct RoomProxyMockConfiguration {
|
struct JoinedRoomProxyMockConfiguration {
|
||||||
var id = UUID().uuidString
|
var id = UUID().uuidString
|
||||||
var name: String?
|
var name: String?
|
||||||
var topic: String?
|
var topic: String?
|
||||||
@@ -45,13 +49,9 @@ struct RoomProxyMockConfiguration {
|
|||||||
var shouldUseAutoUpdatingTimeline = false
|
var shouldUseAutoUpdatingTimeline = false
|
||||||
}
|
}
|
||||||
|
|
||||||
enum RoomProxyMockError: Error {
|
extension JoinedRoomProxyMock {
|
||||||
case generic
|
|
||||||
}
|
|
||||||
|
|
||||||
extension RoomProxyMock {
|
|
||||||
@MainActor
|
@MainActor
|
||||||
convenience init(_ configuration: RoomProxyMockConfiguration) {
|
convenience init(_ configuration: JoinedRoomProxyMockConfiguration) {
|
||||||
self.init()
|
self.init()
|
||||||
|
|
||||||
id = configuration.id
|
id = configuration.id
|
||||||
@@ -86,8 +86,6 @@ extension RoomProxyMock {
|
|||||||
self.timeline = timeline
|
self.timeline = timeline
|
||||||
|
|
||||||
ownUserID = configuration.ownUserID
|
ownUserID = configuration.ownUserID
|
||||||
membership = .joined
|
|
||||||
inviterClosure = { configuration.inviter }
|
|
||||||
|
|
||||||
membersPublisher = CurrentValueSubject(configuration.members).asCurrentValuePublisher()
|
membersPublisher = CurrentValueSubject(configuration.members).asCurrentValuePublisher()
|
||||||
typingMembersPublisher = CurrentValueSubject([]).asCurrentValuePublisher()
|
typingMembersPublisher = CurrentValueSubject([]).asCurrentValuePublisher()
|
||||||
@@ -96,7 +94,6 @@ extension RoomProxyMock {
|
|||||||
activeMembersCount = configuration.members.filter { $0.membership == .join || $0.membership == .invite }.count
|
activeMembersCount = configuration.members.filter { $0.membership == .join || $0.membership == .invite }.count
|
||||||
|
|
||||||
updateMembersClosure = { }
|
updateMembersClosure = { }
|
||||||
acceptInvitationClosure = { .success(()) }
|
|
||||||
underlyingActionsPublisher = Empty(completeImmediately: false).eraseToAnyPublisher()
|
underlyingActionsPublisher = Empty(completeImmediately: false).eraseToAnyPublisher()
|
||||||
setNameClosure = { _ in .success(()) }
|
setNameClosure = { _ in .success(()) }
|
||||||
setTopicClosure = { _ in .success(()) }
|
setTopicClosure = { _ in .success(()) }
|
||||||
@@ -208,7 +208,7 @@ struct CallScreen_Previews: PreviewProvider {
|
|||||||
clientProxy.getElementWellKnownReturnValue = .success(nil)
|
clientProxy.getElementWellKnownReturnValue = .success(nil)
|
||||||
clientProxy.deviceID = "call-device-id"
|
clientProxy.deviceID = "call-device-id"
|
||||||
|
|
||||||
let roomProxy = RoomProxyMock()
|
let roomProxy = JoinedRoomProxyMock()
|
||||||
roomProxy.sendCallNotificationIfNeededReturnValue = .success(())
|
roomProxy.sendCallNotificationIfNeededReturnValue = .success(())
|
||||||
|
|
||||||
let widgetDriver = ElementCallWidgetDriverMock()
|
let widgetDriver = ElementCallWidgetDriverMock()
|
||||||
|
|||||||
@@ -142,9 +142,9 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
|
|||||||
case .showRoomDetails(roomIdentifier: let roomIdentifier):
|
case .showRoomDetails(roomIdentifier: let roomIdentifier):
|
||||||
actionsSubject.send(.presentRoomDetails(roomIdentifier: roomIdentifier))
|
actionsSubject.send(.presentRoomDetails(roomIdentifier: roomIdentifier))
|
||||||
case .leaveRoom(roomIdentifier: let roomIdentifier):
|
case .leaveRoom(roomIdentifier: let roomIdentifier):
|
||||||
startLeaveRoomProcess(roomId: roomIdentifier)
|
startLeaveRoomProcess(roomID: roomIdentifier)
|
||||||
case .confirmLeaveRoom(roomIdentifier: let roomIdentifier):
|
case .confirmLeaveRoom(roomIdentifier: let roomIdentifier):
|
||||||
leaveRoom(roomId: roomIdentifier)
|
Task { await leaveRoom(roomID: roomIdentifier) }
|
||||||
case .showSettings:
|
case .showSettings:
|
||||||
actionsSubject.send(.presentSettingsScreen)
|
actionsSubject.send(.presentSettingsScreen)
|
||||||
case .confirmRecoveryKey:
|
case .confirmRecoveryKey:
|
||||||
@@ -159,7 +159,7 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
|
|||||||
actionsSubject.send(.presentGlobalSearch)
|
actionsSubject.send(.presentGlobalSearch)
|
||||||
case .markRoomAsUnread(let roomIdentifier):
|
case .markRoomAsUnread(let roomIdentifier):
|
||||||
Task {
|
Task {
|
||||||
guard let roomProxy = await userSession.clientProxy.roomForIdentifier(roomIdentifier) else {
|
guard case let .joined(roomProxy) = await userSession.clientProxy.roomForIdentifier(roomIdentifier) else {
|
||||||
MXLog.error("Failed retrieving room for identifier: \(roomIdentifier)")
|
MXLog.error("Failed retrieving room for identifier: \(roomIdentifier)")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -173,7 +173,7 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
|
|||||||
}
|
}
|
||||||
case .markRoomAsRead(let roomIdentifier):
|
case .markRoomAsRead(let roomIdentifier):
|
||||||
Task {
|
Task {
|
||||||
guard let roomProxy = await userSession.clientProxy.roomForIdentifier(roomIdentifier) else {
|
guard case let .joined(roomProxy) = await userSession.clientProxy.roomForIdentifier(roomIdentifier) else {
|
||||||
MXLog.error("Failed retrieving room for identifier: \(roomIdentifier)")
|
MXLog.error("Failed retrieving room for identifier: \(roomIdentifier)")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -367,7 +367,7 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func markRoomAsFavourite(_ roomID: String, isFavourite: Bool) async {
|
private func markRoomAsFavourite(_ roomID: String, isFavourite: Bool) async {
|
||||||
guard let roomProxy = await userSession.clientProxy.roomForIdentifier(roomID) else {
|
guard case let .joined(roomProxy) = await userSession.clientProxy.roomForIdentifier(roomID) else {
|
||||||
MXLog.error("Failed retrieving room for identifier: \(roomID)")
|
MXLog.error("Failed retrieving room for identifier: \(roomID)")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -382,53 +382,47 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
|
|||||||
|
|
||||||
private static let leaveRoomLoadingID = "LeaveRoomLoading"
|
private static let leaveRoomLoadingID = "LeaveRoomLoading"
|
||||||
|
|
||||||
private func startLeaveRoomProcess(roomId: String) {
|
private func startLeaveRoomProcess(roomID: String) {
|
||||||
Task {
|
Task {
|
||||||
defer {
|
defer {
|
||||||
userIndicatorController.retractIndicatorWithId(Self.leaveRoomLoadingID)
|
userIndicatorController.retractIndicatorWithId(Self.leaveRoomLoadingID)
|
||||||
}
|
}
|
||||||
userIndicatorController.submitIndicator(UserIndicator(id: Self.leaveRoomLoadingID, type: .modal, title: L10n.commonLoading, persistent: true))
|
userIndicatorController.submitIndicator(UserIndicator(id: Self.leaveRoomLoadingID, type: .modal, title: L10n.commonLoading, persistent: true))
|
||||||
|
|
||||||
let room = await userSession.clientProxy.roomForIdentifier(roomId)
|
guard case let .joined(roomProxy) = await userSession.clientProxy.roomForIdentifier(roomID) else {
|
||||||
|
|
||||||
guard let room else {
|
|
||||||
state.bindings.alertInfo = AlertInfo(id: UUID(), title: L10n.errorUnknown)
|
state.bindings.alertInfo = AlertInfo(id: UUID(), title: L10n.errorUnknown)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if room.isPublic {
|
if roomProxy.isPublic {
|
||||||
state.bindings.leaveRoomAlertItem = LeaveRoomAlertItem(roomID: roomId, isDM: room.isEncryptedOneToOneRoom, state: .public)
|
state.bindings.leaveRoomAlertItem = LeaveRoomAlertItem(roomID: roomID, isDM: roomProxy.isEncryptedOneToOneRoom, state: .public)
|
||||||
} else {
|
} else {
|
||||||
state.bindings.leaveRoomAlertItem = if room.joinedMembersCount > 1 {
|
state.bindings.leaveRoomAlertItem = if roomProxy.joinedMembersCount > 1 {
|
||||||
LeaveRoomAlertItem(roomID: roomId, isDM: room.isEncryptedOneToOneRoom, state: .private)
|
LeaveRoomAlertItem(roomID: roomID, isDM: roomProxy.isEncryptedOneToOneRoom, state: .private)
|
||||||
} else {
|
} else {
|
||||||
LeaveRoomAlertItem(roomID: roomId, isDM: room.isEncryptedOneToOneRoom, state: .empty)
|
LeaveRoomAlertItem(roomID: roomID, isDM: roomProxy.isEncryptedOneToOneRoom, state: .empty)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func leaveRoom(roomId: String) {
|
private func leaveRoom(roomID: String) async {
|
||||||
Task {
|
defer {
|
||||||
defer {
|
userIndicatorController.retractIndicatorWithId(Self.leaveRoomLoadingID)
|
||||||
userIndicatorController.retractIndicatorWithId(Self.leaveRoomLoadingID)
|
|
||||||
}
|
|
||||||
userIndicatorController.submitIndicator(UserIndicator(id: Self.leaveRoomLoadingID, type: .modal, title: L10n.commonLeavingRoom, persistent: true))
|
|
||||||
|
|
||||||
let room = await userSession.clientProxy.roomForIdentifier(roomId)
|
|
||||||
let result = await room?.leaveRoom()
|
|
||||||
|
|
||||||
switch result {
|
|
||||||
case .none, .some(.failure):
|
|
||||||
state.bindings.alertInfo = AlertInfo(id: UUID(), title: L10n.errorUnknown)
|
|
||||||
case .some(.success):
|
|
||||||
userIndicatorController.submitIndicator(UserIndicator(id: UUID().uuidString,
|
|
||||||
type: .toast,
|
|
||||||
title: L10n.commonCurrentUserLeftRoom,
|
|
||||||
iconName: "checkmark"))
|
|
||||||
actionsSubject.send(.roomLeft(roomIdentifier: roomId))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
userIndicatorController.submitIndicator(UserIndicator(id: Self.leaveRoomLoadingID, type: .modal, title: L10n.commonLeavingRoom, persistent: true))
|
||||||
|
|
||||||
|
guard case let .joined(roomProxy) = await userSession.clientProxy.roomForIdentifier(roomID),
|
||||||
|
case .success = await roomProxy.leaveRoom() else {
|
||||||
|
state.bindings.alertInfo = AlertInfo(id: UUID(), title: L10n.errorUnknown)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
userIndicatorController.submitIndicator(UserIndicator(id: UUID().uuidString,
|
||||||
|
type: .toast,
|
||||||
|
title: L10n.commonCurrentUserLeftRoom,
|
||||||
|
iconName: "checkmark"))
|
||||||
|
actionsSubject.send(.roomLeft(roomIdentifier: roomID))
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: Invites
|
// MARK: Invites
|
||||||
@@ -440,7 +434,7 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
|
|||||||
|
|
||||||
userIndicatorController.submitIndicator(UserIndicator(id: roomID, type: .modal, title: L10n.commonLoading, persistent: true))
|
userIndicatorController.submitIndicator(UserIndicator(id: roomID, type: .modal, title: L10n.commonLoading, persistent: true))
|
||||||
|
|
||||||
guard let roomProxy = await userSession.clientProxy.roomForIdentifier(roomID) else {
|
guard case let .invited(roomProxy) = await userSession.clientProxy.roomForIdentifier(roomID) else {
|
||||||
displayError()
|
displayError()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -478,7 +472,7 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
|
|||||||
|
|
||||||
userIndicatorController.submitIndicator(UserIndicator(id: roomID, type: .modal, title: L10n.commonLoading, persistent: true))
|
userIndicatorController.submitIndicator(UserIndicator(id: roomID, type: .modal, title: L10n.commonLoading, persistent: true))
|
||||||
|
|
||||||
guard let roomProxy = await userSession.clientProxy.roomForIdentifier(roomID) else {
|
guard case let .invited(roomProxy) = await userSession.clientProxy.roomForIdentifier(roomID) else {
|
||||||
displayError()
|
displayError()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ enum InviteUsersScreenViewModelAction {
|
|||||||
|
|
||||||
enum InviteUsersScreenRoomType {
|
enum InviteUsersScreenRoomType {
|
||||||
case draft
|
case draft
|
||||||
case room(roomProxy: RoomProxyProtocol)
|
case room(roomProxy: JoinedRoomProxyProtocol)
|
||||||
}
|
}
|
||||||
|
|
||||||
struct InviteUsersScreenViewState: BindableState {
|
struct InviteUsersScreenViewState: BindableState {
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
|
|||||||
private let userIndicatorController: UserIndicatorControllerProtocol
|
private let userIndicatorController: UserIndicatorControllerProtocol
|
||||||
|
|
||||||
private var roomPreviewDetails: RoomPreviewDetails?
|
private var roomPreviewDetails: RoomPreviewDetails?
|
||||||
private var roomProxy: RoomProxyProtocol?
|
private var room: RoomProxyType?
|
||||||
|
|
||||||
private let actionsSubject: PassthroughSubject<JoinRoomScreenViewModelAction, Never> = .init()
|
private let actionsSubject: PassthroughSubject<JoinRoomScreenViewModelAction, Never> = .init()
|
||||||
var actionsPublisher: AnyPublisher<JoinRoomScreenViewModelAction, Never> {
|
var actionsPublisher: AnyPublisher<JoinRoomScreenViewModelAction, Never> {
|
||||||
@@ -89,8 +89,8 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
|
|||||||
// See if we known about the room locally and, if so, have that
|
// See if we known about the room locally and, if so, have that
|
||||||
// take priority over the preview one.
|
// take priority over the preview one.
|
||||||
|
|
||||||
if let roomProxy = await clientProxy.roomForIdentifier(roomID) {
|
if let room = await clientProxy.roomForIdentifier(roomID) {
|
||||||
self.roomProxy = roomProxy
|
self.room = room
|
||||||
await updateRoomDetails()
|
await updateRoomDetails()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,8 +106,20 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func updateRoomDetails() async {
|
private func updateRoomDetails() async {
|
||||||
|
var roomProxy: RoomProxyProtocol?
|
||||||
|
var inviter: RoomInviterDetails?
|
||||||
|
|
||||||
|
switch room {
|
||||||
|
case .joined(let joinedRoomProxy):
|
||||||
|
roomProxy = joinedRoomProxy
|
||||||
|
case .invited(let invitedRoomProxy):
|
||||||
|
inviter = await invitedRoomProxy.inviter.flatMap(RoomInviterDetails.init)
|
||||||
|
roomProxy = invitedRoomProxy
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
let name = roomProxy?.name ?? roomPreviewDetails?.name
|
let name = roomProxy?.name ?? roomPreviewDetails?.name
|
||||||
let inviter = await roomProxy?.inviter.flatMap(RoomInviterDetails.init)
|
|
||||||
state.roomDetails = JoinRoomScreenRoomDetails(name: name,
|
state.roomDetails = JoinRoomScreenRoomDetails(name: name,
|
||||||
topic: roomProxy?.topic ?? roomPreviewDetails?.topic,
|
topic: roomProxy?.topic ?? roomPreviewDetails?.topic,
|
||||||
canonicalAlias: roomProxy?.canonicalAlias ?? roomPreviewDetails?.canonicalAlias,
|
canonicalAlias: roomProxy?.canonicalAlias ?? roomPreviewDetails?.canonicalAlias,
|
||||||
@@ -119,9 +131,18 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func updateMode() {
|
private func updateMode() {
|
||||||
if roomProxy?.membership == .invited || roomPreviewDetails?.isInvited ?? false { // Check invites first to show Accept/Decline buttons on public rooms.
|
// Check invites first to show Accept/Decline buttons on public rooms.
|
||||||
|
if case .invited = room {
|
||||||
state.mode = .invited
|
state.mode = .invited
|
||||||
} else if roomProxy?.isPublic ?? false || roomPreviewDetails?.isPublic ?? false {
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if roomPreviewDetails?.isInvited ?? false {
|
||||||
|
state.mode = .invited
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if roomPreviewDetails?.isPublic ?? false {
|
||||||
state.mode = .join
|
state.mode = .join
|
||||||
} else if roomPreviewDetails?.canKnock ?? false, allowKnocking { // Knocking is not supported yet, the flag is purely for preview tests.
|
} else if roomPreviewDetails?.canKnock ?? false, allowKnocking { // Knocking is not supported yet, the flag is purely for preview tests.
|
||||||
state.mode = .knock
|
state.mode = .knock
|
||||||
@@ -180,7 +201,7 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
|
|||||||
|
|
||||||
userIndicatorController.submitIndicator(UserIndicator(id: roomID, type: .modal, title: L10n.commonLoading, persistent: true))
|
userIndicatorController.submitIndicator(UserIndicator(id: roomID, type: .modal, title: L10n.commonLoading, persistent: true))
|
||||||
|
|
||||||
guard let roomProxy = await clientProxy.roomForIdentifier(roomID) else {
|
guard case let .invited(roomProxy) = room else {
|
||||||
userIndicatorController.submitIndicator(.init(title: L10n.errorUnknown))
|
userIndicatorController.submitIndicator(.init(title: L10n.errorUnknown))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -19,7 +19,7 @@ import SwiftUI
|
|||||||
|
|
||||||
struct MediaUploadPreviewScreenCoordinatorParameters {
|
struct MediaUploadPreviewScreenCoordinatorParameters {
|
||||||
let userIndicatorController: UserIndicatorControllerProtocol
|
let userIndicatorController: UserIndicatorControllerProtocol
|
||||||
let roomProxy: RoomProxyProtocol
|
let roomProxy: JoinedRoomProxyProtocol
|
||||||
let mediaUploadingPreprocessor: MediaUploadingPreprocessor
|
let mediaUploadingPreprocessor: MediaUploadingPreprocessor
|
||||||
let title: String?
|
let title: String?
|
||||||
let url: URL
|
let url: URL
|
||||||
|
|||||||
+2
-2
@@ -22,7 +22,7 @@ typealias MediaUploadPreviewScreenViewModelType = StateStoreViewModel<MediaUploa
|
|||||||
|
|
||||||
class MediaUploadPreviewScreenViewModel: MediaUploadPreviewScreenViewModelType, MediaUploadPreviewScreenViewModelProtocol {
|
class MediaUploadPreviewScreenViewModel: MediaUploadPreviewScreenViewModelType, MediaUploadPreviewScreenViewModelProtocol {
|
||||||
private let userIndicatorController: UserIndicatorControllerProtocol
|
private let userIndicatorController: UserIndicatorControllerProtocol
|
||||||
private let roomProxy: RoomProxyProtocol
|
private let roomProxy: JoinedRoomProxyProtocol
|
||||||
private let mediaUploadingPreprocessor: MediaUploadingPreprocessor
|
private let mediaUploadingPreprocessor: MediaUploadingPreprocessor
|
||||||
private let url: URL
|
private let url: URL
|
||||||
private var requestHandle: SendAttachmentJoinHandleProtocol? {
|
private var requestHandle: SendAttachmentJoinHandleProtocol? {
|
||||||
@@ -38,7 +38,7 @@ class MediaUploadPreviewScreenViewModel: MediaUploadPreviewScreenViewModelType,
|
|||||||
}
|
}
|
||||||
|
|
||||||
init(userIndicatorController: UserIndicatorControllerProtocol,
|
init(userIndicatorController: UserIndicatorControllerProtocol,
|
||||||
roomProxy: RoomProxyProtocol,
|
roomProxy: JoinedRoomProxyProtocol,
|
||||||
mediaUploadingPreprocessor: MediaUploadingPreprocessor,
|
mediaUploadingPreprocessor: MediaUploadingPreprocessor,
|
||||||
title: String?,
|
title: String?,
|
||||||
url: URL) {
|
url: URL) {
|
||||||
|
|||||||
+1
-1
@@ -124,7 +124,7 @@ private class PreviewItem: NSObject, QLPreviewItem {
|
|||||||
|
|
||||||
struct MediaUploadPreviewScreen_Previews: PreviewProvider, TestablePreview {
|
struct MediaUploadPreviewScreen_Previews: PreviewProvider, TestablePreview {
|
||||||
static let viewModel = MediaUploadPreviewScreenViewModel(userIndicatorController: UserIndicatorControllerMock.default,
|
static let viewModel = MediaUploadPreviewScreenViewModel(userIndicatorController: UserIndicatorControllerMock.default,
|
||||||
roomProxy: RoomProxyMock(),
|
roomProxy: JoinedRoomProxyMock(),
|
||||||
mediaUploadingPreprocessor: MediaUploadingPreprocessor(),
|
mediaUploadingPreprocessor: MediaUploadingPreprocessor(),
|
||||||
title: "some random file name",
|
title: "some random file name",
|
||||||
url: URL.picturesDirectory)
|
url: URL.picturesDirectory)
|
||||||
|
|||||||
+1
-1
@@ -118,7 +118,7 @@ class MessageForwardingScreenViewModel: MessageForwardingScreenViewModelType, Me
|
|||||||
fatalError()
|
fatalError()
|
||||||
}
|
}
|
||||||
|
|
||||||
guard let targetRoomProxy = await clientProxy.roomForIdentifier(roomID) else {
|
guard case let .joined(targetRoomProxy) = await clientProxy.roomForIdentifier(roomID) else {
|
||||||
MXLog.error("Failed retrieving room to forward to with id: \(roomID)")
|
MXLog.error("Failed retrieving room to forward to with id: \(roomID)")
|
||||||
userIndicatorController.submitIndicator(UserIndicator(title: L10n.errorUnknown))
|
userIndicatorController.submitIndicator(UserIndicator(title: L10n.errorUnknown))
|
||||||
return
|
return
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ import Combine
|
|||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
struct PinnedEventsTimelineScreenCoordinatorParameters {
|
struct PinnedEventsTimelineScreenCoordinatorParameters {
|
||||||
let roomProxy: RoomProxyProtocol
|
let roomProxy: JoinedRoomProxyProtocol
|
||||||
let timelineController: RoomTimelineControllerProtocol
|
let timelineController: RoomTimelineControllerProtocol
|
||||||
let mediaProvider: MediaProviderProtocol
|
let mediaProvider: MediaProviderProtocol
|
||||||
let mediaPlayerProvider: MediaPlayerProviderProtocol
|
let mediaPlayerProvider: MediaPlayerProviderProtocol
|
||||||
|
|||||||
+1
-1
@@ -81,7 +81,7 @@ struct PinnedEventsTimelineScreen_Previews: PreviewProvider, TestablePreview {
|
|||||||
static let emptyTimelineViewModel: TimelineViewModel = {
|
static let emptyTimelineViewModel: TimelineViewModel = {
|
||||||
let timelineController = MockRoomTimelineController()
|
let timelineController = MockRoomTimelineController()
|
||||||
timelineController.timelineItems = []
|
timelineController.timelineItems = []
|
||||||
return TimelineViewModel(roomProxy: RoomProxyMock(.init(name: "Preview room")),
|
return TimelineViewModel(roomProxy: JoinedRoomProxyMock(.init(name: "Preview room")),
|
||||||
timelineController: timelineController,
|
timelineController: timelineController,
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import SwiftUI
|
|||||||
struct ReportContentScreenCoordinatorParameters {
|
struct ReportContentScreenCoordinatorParameters {
|
||||||
let eventID: String
|
let eventID: String
|
||||||
let senderID: String
|
let senderID: String
|
||||||
let roomProxy: RoomProxyProtocol
|
let roomProxy: JoinedRoomProxyProtocol
|
||||||
let clientProxy: ClientProxyProtocol
|
let clientProxy: ClientProxyProtocol
|
||||||
let userIndicatorController: UserIndicatorControllerProtocol
|
let userIndicatorController: UserIndicatorControllerProtocol
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ typealias ReportContentScreenViewModelType = StateStoreViewModel<ReportContentSc
|
|||||||
class ReportContentScreenViewModel: ReportContentScreenViewModelType, ReportContentScreenViewModelProtocol {
|
class ReportContentScreenViewModel: ReportContentScreenViewModelType, ReportContentScreenViewModelProtocol {
|
||||||
private let eventID: String
|
private let eventID: String
|
||||||
private let senderID: String
|
private let senderID: String
|
||||||
private let roomProxy: RoomProxyProtocol
|
private let roomProxy: JoinedRoomProxyProtocol
|
||||||
private let clientProxy: ClientProxyProtocol
|
private let clientProxy: ClientProxyProtocol
|
||||||
private let actionsSubject: PassthroughSubject<ReportContentScreenViewModelAction, Never> = .init()
|
private let actionsSubject: PassthroughSubject<ReportContentScreenViewModelAction, Never> = .init()
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ class ReportContentScreenViewModel: ReportContentScreenViewModelType, ReportCont
|
|||||||
actionsSubject.eraseToAnyPublisher()
|
actionsSubject.eraseToAnyPublisher()
|
||||||
}
|
}
|
||||||
|
|
||||||
init(eventID: String, senderID: String, roomProxy: RoomProxyProtocol, clientProxy: ClientProxyProtocol) {
|
init(eventID: String, senderID: String, roomProxy: JoinedRoomProxyProtocol, clientProxy: ClientProxyProtocol) {
|
||||||
self.eventID = eventID
|
self.eventID = eventID
|
||||||
self.senderID = senderID
|
self.senderID = senderID
|
||||||
self.roomProxy = roomProxy
|
self.roomProxy = roomProxy
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ struct ReportContentScreen: View {
|
|||||||
struct ReportContentScreen_Previews: PreviewProvider, TestablePreview {
|
struct ReportContentScreen_Previews: PreviewProvider, TestablePreview {
|
||||||
static let viewModel = ReportContentScreenViewModel(eventID: "",
|
static let viewModel = ReportContentScreenViewModel(eventID: "",
|
||||||
senderID: "",
|
senderID: "",
|
||||||
roomProxy: RoomProxyMock(.init()),
|
roomProxy: JoinedRoomProxyMock(.init()),
|
||||||
clientProxy: ClientProxyMock(.init()))
|
clientProxy: ClientProxyMock(.init()))
|
||||||
|
|
||||||
static var previews: some View {
|
static var previews: some View {
|
||||||
|
|||||||
+1
-1
@@ -20,7 +20,7 @@ import SwiftUI
|
|||||||
struct RoomChangePermissionsScreenCoordinatorParameters {
|
struct RoomChangePermissionsScreenCoordinatorParameters {
|
||||||
let permissions: RoomPermissions
|
let permissions: RoomPermissions
|
||||||
let permissionsGroup: RoomRolesAndPermissionsScreenPermissionsGroup
|
let permissionsGroup: RoomRolesAndPermissionsScreenPermissionsGroup
|
||||||
let roomProxy: RoomProxyProtocol
|
let roomProxy: JoinedRoomProxyProtocol
|
||||||
let userIndicatorController: UserIndicatorControllerProtocol
|
let userIndicatorController: UserIndicatorControllerProtocol
|
||||||
let analytics: AnalyticsService
|
let analytics: AnalyticsService
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -21,7 +21,7 @@ import SwiftUI
|
|||||||
typealias RoomChangePermissionsScreenViewModelType = StateStoreViewModel<RoomChangePermissionsScreenViewState, RoomChangePermissionsScreenViewAction>
|
typealias RoomChangePermissionsScreenViewModelType = StateStoreViewModel<RoomChangePermissionsScreenViewState, RoomChangePermissionsScreenViewAction>
|
||||||
|
|
||||||
class RoomChangePermissionsScreenViewModel: RoomChangePermissionsScreenViewModelType, RoomChangePermissionsScreenViewModelProtocol {
|
class RoomChangePermissionsScreenViewModel: RoomChangePermissionsScreenViewModelType, RoomChangePermissionsScreenViewModelProtocol {
|
||||||
private let roomProxy: RoomProxyProtocol
|
private let roomProxy: JoinedRoomProxyProtocol
|
||||||
private let userIndicatorController: UserIndicatorControllerProtocol
|
private let userIndicatorController: UserIndicatorControllerProtocol
|
||||||
private let analytics: AnalyticsService
|
private let analytics: AnalyticsService
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ class RoomChangePermissionsScreenViewModel: RoomChangePermissionsScreenViewModel
|
|||||||
|
|
||||||
init(currentPermissions: RoomPermissions,
|
init(currentPermissions: RoomPermissions,
|
||||||
group: RoomRolesAndPermissionsScreenPermissionsGroup,
|
group: RoomRolesAndPermissionsScreenPermissionsGroup,
|
||||||
roomProxy: RoomProxyProtocol,
|
roomProxy: JoinedRoomProxyProtocol,
|
||||||
userIndicatorController: UserIndicatorControllerProtocol,
|
userIndicatorController: UserIndicatorControllerProtocol,
|
||||||
analytics: AnalyticsService) {
|
analytics: AnalyticsService) {
|
||||||
self.roomProxy = roomProxy
|
self.roomProxy = roomProxy
|
||||||
|
|||||||
+1
-1
@@ -86,7 +86,7 @@ struct RoomChangePermissionsScreen_Previews: PreviewProvider, TestablePreview {
|
|||||||
static func makeViewModel(group: RoomRolesAndPermissionsScreenPermissionsGroup) -> RoomChangePermissionsScreenViewModel {
|
static func makeViewModel(group: RoomRolesAndPermissionsScreenPermissionsGroup) -> RoomChangePermissionsScreenViewModel {
|
||||||
RoomChangePermissionsScreenViewModel(currentPermissions: .init(powerLevels: .mock),
|
RoomChangePermissionsScreenViewModel(currentPermissions: .init(powerLevels: .mock),
|
||||||
group: group,
|
group: group,
|
||||||
roomProxy: RoomProxyMock(.init()),
|
roomProxy: JoinedRoomProxyMock(.init()),
|
||||||
userIndicatorController: UserIndicatorControllerMock(),
|
userIndicatorController: UserIndicatorControllerMock(),
|
||||||
analytics: ServiceLocator.shared.analytics)
|
analytics: ServiceLocator.shared.analytics)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -19,7 +19,7 @@ import SwiftUI
|
|||||||
|
|
||||||
struct RoomChangeRolesScreenCoordinatorParameters {
|
struct RoomChangeRolesScreenCoordinatorParameters {
|
||||||
let mode: RoomMemberDetails.Role
|
let mode: RoomMemberDetails.Role
|
||||||
let roomProxy: RoomProxyProtocol
|
let roomProxy: JoinedRoomProxyProtocol
|
||||||
let mediaProvider: MediaProviderProtocol
|
let mediaProvider: MediaProviderProtocol
|
||||||
let userIndicatorController: UserIndicatorControllerProtocol
|
let userIndicatorController: UserIndicatorControllerProtocol
|
||||||
let analytics: AnalyticsService
|
let analytics: AnalyticsService
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import SwiftUI
|
|||||||
typealias RoomChangeRolesScreenViewModelType = StateStoreViewModel<RoomChangeRolesScreenViewState, RoomChangeRolesScreenViewAction>
|
typealias RoomChangeRolesScreenViewModelType = StateStoreViewModel<RoomChangeRolesScreenViewState, RoomChangeRolesScreenViewAction>
|
||||||
|
|
||||||
class RoomChangeRolesScreenViewModel: RoomChangeRolesScreenViewModelType, RoomChangeRolesScreenViewModelProtocol {
|
class RoomChangeRolesScreenViewModel: RoomChangeRolesScreenViewModelType, RoomChangeRolesScreenViewModelProtocol {
|
||||||
private let roomProxy: RoomProxyProtocol
|
private let roomProxy: JoinedRoomProxyProtocol
|
||||||
private let userIndicatorController: UserIndicatorControllerProtocol
|
private let userIndicatorController: UserIndicatorControllerProtocol
|
||||||
private let analytics: AnalyticsService
|
private let analytics: AnalyticsService
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ class RoomChangeRolesScreenViewModel: RoomChangeRolesScreenViewModelType, RoomCh
|
|||||||
}
|
}
|
||||||
|
|
||||||
init(mode: RoomMemberDetails.Role,
|
init(mode: RoomMemberDetails.Role,
|
||||||
roomProxy: RoomProxyProtocol,
|
roomProxy: JoinedRoomProxyProtocol,
|
||||||
mediaProvider: MediaProviderProtocol,
|
mediaProvider: MediaProviderProtocol,
|
||||||
userIndicatorController: UserIndicatorControllerProtocol,
|
userIndicatorController: UserIndicatorControllerProtocol,
|
||||||
analytics: AnalyticsService) {
|
analytics: AnalyticsService) {
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ struct RoomChangeRolesScreen_Previews: PreviewProvider, TestablePreview {
|
|||||||
|
|
||||||
static func makeViewModel(mode: RoomMemberDetails.Role) -> RoomChangeRolesScreenViewModel {
|
static func makeViewModel(mode: RoomMemberDetails.Role) -> RoomChangeRolesScreenViewModel {
|
||||||
RoomChangeRolesScreenViewModel(mode: mode,
|
RoomChangeRolesScreenViewModel(mode: mode,
|
||||||
roomProxy: RoomProxyMock(.init(members: .allMembersAsAdmin)),
|
roomProxy: JoinedRoomProxyMock(.init(members: .allMembersAsAdmin)),
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
userIndicatorController: UserIndicatorControllerMock(),
|
userIndicatorController: UserIndicatorControllerMock(),
|
||||||
analytics: ServiceLocator.shared.analytics)
|
analytics: ServiceLocator.shared.analytics)
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ import Combine
|
|||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
struct RoomDetailsEditScreenCoordinatorParameters {
|
struct RoomDetailsEditScreenCoordinatorParameters {
|
||||||
let roomProxy: RoomProxyProtocol
|
let roomProxy: JoinedRoomProxyProtocol
|
||||||
let mediaProvider: MediaProviderProtocol
|
let mediaProvider: MediaProviderProtocol
|
||||||
weak var navigationStackCoordinator: NavigationStackCoordinator?
|
weak var navigationStackCoordinator: NavigationStackCoordinator?
|
||||||
let userIndicatorController: UserIndicatorControllerProtocol
|
let userIndicatorController: UserIndicatorControllerProtocol
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ typealias RoomDetailsEditScreenViewModelType = StateStoreViewModel<RoomDetailsEd
|
|||||||
|
|
||||||
class RoomDetailsEditScreenViewModel: RoomDetailsEditScreenViewModelType, RoomDetailsEditScreenViewModelProtocol {
|
class RoomDetailsEditScreenViewModel: RoomDetailsEditScreenViewModelType, RoomDetailsEditScreenViewModelProtocol {
|
||||||
private let actionsSubject: PassthroughSubject<RoomDetailsEditScreenViewModelAction, Never> = .init()
|
private let actionsSubject: PassthroughSubject<RoomDetailsEditScreenViewModelAction, Never> = .init()
|
||||||
private let roomProxy: RoomProxyProtocol
|
private let roomProxy: JoinedRoomProxyProtocol
|
||||||
private let userIndicatorController: UserIndicatorControllerProtocol
|
private let userIndicatorController: UserIndicatorControllerProtocol
|
||||||
private let mediaPreprocessor: MediaUploadingPreprocessor = .init()
|
private let mediaPreprocessor: MediaUploadingPreprocessor = .init()
|
||||||
|
|
||||||
@@ -29,7 +29,7 @@ class RoomDetailsEditScreenViewModel: RoomDetailsEditScreenViewModelType, RoomDe
|
|||||||
actionsSubject.eraseToAnyPublisher()
|
actionsSubject.eraseToAnyPublisher()
|
||||||
}
|
}
|
||||||
|
|
||||||
init(roomProxy: RoomProxyProtocol,
|
init(roomProxy: JoinedRoomProxyProtocol,
|
||||||
mediaProvider: MediaProviderProtocol,
|
mediaProvider: MediaProviderProtocol,
|
||||||
userIndicatorController: UserIndicatorControllerProtocol) {
|
userIndicatorController: UserIndicatorControllerProtocol) {
|
||||||
self.roomProxy = roomProxy
|
self.roomProxy = roomProxy
|
||||||
|
|||||||
@@ -157,9 +157,9 @@ struct RoomDetailsEditScreen: View {
|
|||||||
|
|
||||||
struct RoomDetailsEditScreen_Previews: PreviewProvider, TestablePreview {
|
struct RoomDetailsEditScreen_Previews: PreviewProvider, TestablePreview {
|
||||||
static let editableViewModel = {
|
static let editableViewModel = {
|
||||||
let roomProxy = RoomProxyMock(.init(id: "test_id",
|
let roomProxy = JoinedRoomProxyMock(.init(id: "test_id",
|
||||||
name: "Room",
|
name: "Room",
|
||||||
members: [.mockMeAdmin]))
|
members: [.mockMeAdmin]))
|
||||||
|
|
||||||
return RoomDetailsEditScreenViewModel(roomProxy: roomProxy,
|
return RoomDetailsEditScreenViewModel(roomProxy: roomProxy,
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
@@ -167,9 +167,9 @@ struct RoomDetailsEditScreen_Previews: PreviewProvider, TestablePreview {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
static let readOnlyViewModel = {
|
static let readOnlyViewModel = {
|
||||||
let roomProxy = RoomProxyMock(.init(id: "test_id",
|
let roomProxy = JoinedRoomProxyMock(.init(id: "test_id",
|
||||||
name: "Room",
|
name: "Room",
|
||||||
members: [.mockAlice]))
|
members: [.mockAlice]))
|
||||||
|
|
||||||
return RoomDetailsEditScreenViewModel(roomProxy: roomProxy,
|
return RoomDetailsEditScreenViewModel(roomProxy: roomProxy,
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import Combine
|
|||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
struct RoomDetailsScreenCoordinatorParameters {
|
struct RoomDetailsScreenCoordinatorParameters {
|
||||||
let roomProxy: RoomProxyProtocol
|
let roomProxy: JoinedRoomProxyProtocol
|
||||||
let clientProxy: ClientProxyProtocol
|
let clientProxy: ClientProxyProtocol
|
||||||
let mediaProvider: MediaProviderProtocol
|
let mediaProvider: MediaProviderProtocol
|
||||||
let analyticsService: AnalyticsService
|
let analyticsService: AnalyticsService
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import SwiftUI
|
|||||||
typealias RoomDetailsScreenViewModelType = StateStoreViewModel<RoomDetailsScreenViewState, RoomDetailsScreenViewAction>
|
typealias RoomDetailsScreenViewModelType = StateStoreViewModel<RoomDetailsScreenViewState, RoomDetailsScreenViewAction>
|
||||||
|
|
||||||
class RoomDetailsScreenViewModel: RoomDetailsScreenViewModelType, RoomDetailsScreenViewModelProtocol {
|
class RoomDetailsScreenViewModel: RoomDetailsScreenViewModelType, RoomDetailsScreenViewModelProtocol {
|
||||||
private let roomProxy: RoomProxyProtocol
|
private let roomProxy: JoinedRoomProxyProtocol
|
||||||
private let clientProxy: ClientProxyProtocol
|
private let clientProxy: ClientProxyProtocol
|
||||||
private let analyticsService: AnalyticsService
|
private let analyticsService: AnalyticsService
|
||||||
private let mediaProvider: MediaProviderProtocol
|
private let mediaProvider: MediaProviderProtocol
|
||||||
@@ -54,7 +54,7 @@ class RoomDetailsScreenViewModel: RoomDetailsScreenViewModelType, RoomDetailsScr
|
|||||||
actionsSubject.eraseToAnyPublisher()
|
actionsSubject.eraseToAnyPublisher()
|
||||||
}
|
}
|
||||||
|
|
||||||
init(roomProxy: RoomProxyProtocol,
|
init(roomProxy: JoinedRoomProxyProtocol,
|
||||||
clientProxy: ClientProxyProtocol,
|
clientProxy: ClientProxyProtocol,
|
||||||
mediaProvider: MediaProviderProtocol,
|
mediaProvider: MediaProviderProtocol,
|
||||||
analyticsService: AnalyticsService,
|
analyticsService: AnalyticsService,
|
||||||
|
|||||||
@@ -311,20 +311,20 @@ struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview {
|
|||||||
.mockBob,
|
.mockBob,
|
||||||
.mockCharlie
|
.mockCharlie
|
||||||
]
|
]
|
||||||
let roomProxy = RoomProxyMock(.init(id: "room_a_id",
|
let roomProxy = JoinedRoomProxyMock(.init(id: "room_a_id",
|
||||||
name: "Room A",
|
name: "Room A",
|
||||||
topic: """
|
topic: """
|
||||||
Discussions about Element X iOS | https://github.com/vector-im/element-x-ios
|
Discussions about Element X iOS | https://github.com/vector-im/element-x-ios
|
||||||
|
|
||||||
Feature Status: https://github.com/vector-im/element-x-ios/issues/1225
|
Feature Status: https://github.com/vector-im/element-x-ios/issues/1225
|
||||||
|
|
||||||
App Store: https://apple.co/3r6LJHZ
|
App Store: https://apple.co/3r6LJHZ
|
||||||
TestFlight: https://testflight.apple.com/join/uZbeZCOi
|
TestFlight: https://testflight.apple.com/join/uZbeZCOi
|
||||||
""",
|
""",
|
||||||
isDirect: false,
|
isDirect: false,
|
||||||
isEncrypted: true,
|
isEncrypted: true,
|
||||||
canonicalAlias: "#alias:domain.com",
|
canonicalAlias: "#alias:domain.com",
|
||||||
members: members))
|
members: members))
|
||||||
|
|
||||||
var notificationSettingsProxyMockConfiguration = NotificationSettingsProxyMockConfiguration()
|
var notificationSettingsProxyMockConfiguration = NotificationSettingsProxyMockConfiguration()
|
||||||
notificationSettingsProxyMockConfiguration.roomMode.isDefault = false
|
notificationSettingsProxyMockConfiguration.roomMode.isDefault = false
|
||||||
@@ -349,13 +349,13 @@ struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview {
|
|||||||
.mockDan
|
.mockDan
|
||||||
]
|
]
|
||||||
|
|
||||||
let roomProxy = RoomProxyMock(.init(id: "dm_room_id",
|
let roomProxy = JoinedRoomProxyMock(.init(id: "dm_room_id",
|
||||||
name: "DM Room",
|
name: "DM Room",
|
||||||
topic: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
|
topic: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
|
||||||
isDirect: true,
|
isDirect: true,
|
||||||
isEncrypted: true,
|
isEncrypted: true,
|
||||||
canonicalAlias: "#alias:domain.com",
|
canonicalAlias: "#alias:domain.com",
|
||||||
members: members))
|
members: members))
|
||||||
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init())
|
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init())
|
||||||
let appSettings = AppSettings()
|
let appSettings = AppSettings()
|
||||||
appSettings.pinningEnabled = true
|
appSettings.pinningEnabled = true
|
||||||
@@ -378,11 +378,11 @@ struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview {
|
|||||||
.mockBob,
|
.mockBob,
|
||||||
.mockCharlie
|
.mockCharlie
|
||||||
]
|
]
|
||||||
let roomProxy = RoomProxyMock(.init(id: "simple_room_id",
|
let roomProxy = JoinedRoomProxyMock(.init(id: "simple_room_id",
|
||||||
name: "Room A",
|
name: "Room A",
|
||||||
isDirect: false,
|
isDirect: false,
|
||||||
isEncrypted: false,
|
isEncrypted: false,
|
||||||
members: members))
|
members: members))
|
||||||
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init())
|
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init())
|
||||||
let appSettings = AppSettings()
|
let appSettings = AppSettings()
|
||||||
appSettings.pinningEnabled = true
|
appSettings.pinningEnabled = true
|
||||||
|
|||||||
+1
-1
@@ -19,7 +19,7 @@ import SwiftUI
|
|||||||
|
|
||||||
struct RoomMemberDetailsScreenCoordinatorParameters {
|
struct RoomMemberDetailsScreenCoordinatorParameters {
|
||||||
let userID: String
|
let userID: String
|
||||||
let roomProxy: RoomProxyProtocol
|
let roomProxy: JoinedRoomProxyProtocol
|
||||||
let clientProxy: ClientProxyProtocol
|
let clientProxy: ClientProxyProtocol
|
||||||
let mediaProvider: MediaProviderProtocol
|
let mediaProvider: MediaProviderProtocol
|
||||||
let userIndicatorController: UserIndicatorControllerProtocol
|
let userIndicatorController: UserIndicatorControllerProtocol
|
||||||
|
|||||||
+2
-2
@@ -20,7 +20,7 @@ import SwiftUI
|
|||||||
typealias RoomMemberDetailsScreenViewModelType = StateStoreViewModel<RoomMemberDetailsScreenViewState, RoomMemberDetailsScreenViewAction>
|
typealias RoomMemberDetailsScreenViewModelType = StateStoreViewModel<RoomMemberDetailsScreenViewState, RoomMemberDetailsScreenViewAction>
|
||||||
|
|
||||||
class RoomMemberDetailsScreenViewModel: RoomMemberDetailsScreenViewModelType, RoomMemberDetailsScreenViewModelProtocol {
|
class RoomMemberDetailsScreenViewModel: RoomMemberDetailsScreenViewModelType, RoomMemberDetailsScreenViewModelProtocol {
|
||||||
private let roomProxy: RoomProxyProtocol
|
private let roomProxy: JoinedRoomProxyProtocol
|
||||||
private let clientProxy: ClientProxyProtocol
|
private let clientProxy: ClientProxyProtocol
|
||||||
private let mediaProvider: MediaProviderProtocol
|
private let mediaProvider: MediaProviderProtocol
|
||||||
private let userIndicatorController: UserIndicatorControllerProtocol
|
private let userIndicatorController: UserIndicatorControllerProtocol
|
||||||
@@ -35,7 +35,7 @@ class RoomMemberDetailsScreenViewModel: RoomMemberDetailsScreenViewModelType, Ro
|
|||||||
}
|
}
|
||||||
|
|
||||||
init(userID: String,
|
init(userID: String,
|
||||||
roomProxy: RoomProxyProtocol,
|
roomProxy: JoinedRoomProxyProtocol,
|
||||||
clientProxy: ClientProxyProtocol,
|
clientProxy: ClientProxyProtocol,
|
||||||
mediaProvider: MediaProviderProtocol,
|
mediaProvider: MediaProviderProtocol,
|
||||||
userIndicatorController: UserIndicatorControllerProtocol,
|
userIndicatorController: UserIndicatorControllerProtocol,
|
||||||
|
|||||||
@@ -143,7 +143,7 @@ struct RoomMemberDetailsScreen_Previews: PreviewProvider, TestablePreview {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static func makeViewModel(member: RoomMemberProxyMock) -> RoomMemberDetailsScreenViewModel {
|
static func makeViewModel(member: RoomMemberProxyMock) -> RoomMemberDetailsScreenViewModel {
|
||||||
let roomProxyMock = RoomProxyMock(.init(name: ""))
|
let roomProxyMock = JoinedRoomProxyMock(.init(name: ""))
|
||||||
roomProxyMock.getMemberUserIDReturnValue = .success(member)
|
roomProxyMock.getMemberUserIDReturnValue = .success(member)
|
||||||
|
|
||||||
let clientProxyMock = ClientProxyMock(.init())
|
let clientProxyMock = ClientProxyMock(.init())
|
||||||
|
|||||||
+1
-1
@@ -19,7 +19,7 @@ import SwiftUI
|
|||||||
|
|
||||||
struct RoomMembersListScreenCoordinatorParameters {
|
struct RoomMembersListScreenCoordinatorParameters {
|
||||||
let mediaProvider: MediaProviderProtocol
|
let mediaProvider: MediaProviderProtocol
|
||||||
let roomProxy: RoomProxyProtocol
|
let roomProxy: JoinedRoomProxyProtocol
|
||||||
let userIndicatorController: UserIndicatorControllerProtocol
|
let userIndicatorController: UserIndicatorControllerProtocol
|
||||||
let analytics: AnalyticsService
|
let analytics: AnalyticsService
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import SwiftUI
|
|||||||
typealias RoomMembersListScreenViewModelType = StateStoreViewModel<RoomMembersListScreenViewState, RoomMembersListScreenViewAction>
|
typealias RoomMembersListScreenViewModelType = StateStoreViewModel<RoomMembersListScreenViewState, RoomMembersListScreenViewAction>
|
||||||
|
|
||||||
class RoomMembersListScreenViewModel: RoomMembersListScreenViewModelType, RoomMembersListScreenViewModelProtocol {
|
class RoomMembersListScreenViewModel: RoomMembersListScreenViewModelType, RoomMembersListScreenViewModelProtocol {
|
||||||
private let roomProxy: RoomProxyProtocol
|
private let roomProxy: JoinedRoomProxyProtocol
|
||||||
private let userIndicatorController: UserIndicatorControllerProtocol
|
private let userIndicatorController: UserIndicatorControllerProtocol
|
||||||
private let analytics: AnalyticsService
|
private let analytics: AnalyticsService
|
||||||
|
|
||||||
@@ -33,7 +33,7 @@ class RoomMembersListScreenViewModel: RoomMembersListScreenViewModelType, RoomMe
|
|||||||
}
|
}
|
||||||
|
|
||||||
init(initialMode: RoomMembersListScreenMode = .members,
|
init(initialMode: RoomMembersListScreenMode = .members,
|
||||||
roomProxy: RoomProxyProtocol,
|
roomProxy: JoinedRoomProxyProtocol,
|
||||||
mediaProvider: MediaProviderProtocol,
|
mediaProvider: MediaProviderProtocol,
|
||||||
userIndicatorController: UserIndicatorControllerProtocol,
|
userIndicatorController: UserIndicatorControllerProtocol,
|
||||||
analytics: AnalyticsService) {
|
analytics: AnalyticsService) {
|
||||||
|
|||||||
+1
-1
@@ -108,7 +108,7 @@ struct RoomMembersListManageMemberSheetLive_Previews: PreviewProvider {
|
|||||||
private extension RoomMembersListScreenViewModel {
|
private extension RoomMembersListScreenViewModel {
|
||||||
static var mock: RoomMembersListScreenViewModel {
|
static var mock: RoomMembersListScreenViewModel {
|
||||||
RoomMembersListScreenViewModel(initialMode: .members,
|
RoomMembersListScreenViewModel(initialMode: .members,
|
||||||
roomProxy: RoomProxyMock(.init(members: .allMembersAsAdmin)),
|
roomProxy: JoinedRoomProxyMock(.init(members: .allMembersAsAdmin)),
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
userIndicatorController: ServiceLocator.shared.userIndicatorController,
|
userIndicatorController: ServiceLocator.shared.userIndicatorController,
|
||||||
analytics: ServiceLocator.shared.analytics)
|
analytics: ServiceLocator.shared.analytics)
|
||||||
|
|||||||
@@ -179,10 +179,10 @@ struct RoomMembersListScreen_Previews: PreviewProvider, TestablePreview {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return RoomMembersListScreenViewModel(initialMode: initialMode,
|
return RoomMembersListScreenViewModel(initialMode: initialMode,
|
||||||
roomProxy: RoomProxyMock(.init(name: "Some room",
|
roomProxy: JoinedRoomProxyMock(.init(name: "Some room",
|
||||||
members: members,
|
members: members,
|
||||||
ownUserID: ownUserID,
|
ownUserID: ownUserID,
|
||||||
canUserInvite: false)),
|
canUserInvite: false)),
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
userIndicatorController: ServiceLocator.shared.userIndicatorController,
|
userIndicatorController: ServiceLocator.shared.userIndicatorController,
|
||||||
analytics: ServiceLocator.shared.analytics)
|
analytics: ServiceLocator.shared.analytics)
|
||||||
|
|||||||
+2
-2
@@ -106,8 +106,8 @@ struct RoomMembersListMemberCell_Previews: PreviewProvider, TestablePreview {
|
|||||||
.init(with: .init(userID: "@badavatar:matrix.org", avatarURL: .picturesDirectory, membership: .ban))
|
.init(with: .init(userID: "@badavatar:matrix.org", avatarURL: .picturesDirectory, membership: .ban))
|
||||||
]
|
]
|
||||||
|
|
||||||
static let viewModel = RoomMembersListScreenViewModel(roomProxy: RoomProxyMock(.init(name: "Some room",
|
static let viewModel = RoomMembersListScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(name: "Some room",
|
||||||
members: members)),
|
members: members)),
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
userIndicatorController: ServiceLocator.shared.userIndicatorController,
|
userIndicatorController: ServiceLocator.shared.userIndicatorController,
|
||||||
analytics: ServiceLocator.shared.analytics)
|
analytics: ServiceLocator.shared.analytics)
|
||||||
|
|||||||
+1
-1
@@ -20,7 +20,7 @@ import SwiftUI
|
|||||||
struct RoomNotificationSettingsScreenCoordinatorParameters {
|
struct RoomNotificationSettingsScreenCoordinatorParameters {
|
||||||
weak var navigationStackCoordinator: NavigationStackCoordinator?
|
weak var navigationStackCoordinator: NavigationStackCoordinator?
|
||||||
let notificationSettingsProxy: NotificationSettingsProxyProtocol
|
let notificationSettingsProxy: NotificationSettingsProxyProtocol
|
||||||
let roomProxy: RoomProxyProtocol
|
let roomProxy: JoinedRoomProxyProtocol
|
||||||
let displayAsUserDefinedRoomSettings: Bool
|
let displayAsUserDefinedRoomSettings: Bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -22,7 +22,7 @@ typealias RoomNotificationSettingsScreenViewModelType = StateStoreViewModel<Room
|
|||||||
class RoomNotificationSettingsScreenViewModel: RoomNotificationSettingsScreenViewModelType, RoomNotificationSettingsScreenViewModelProtocol {
|
class RoomNotificationSettingsScreenViewModel: RoomNotificationSettingsScreenViewModelType, RoomNotificationSettingsScreenViewModelProtocol {
|
||||||
private let actionsSubject: PassthroughSubject<RoomNotificationSettingsScreenViewModelAction, Never> = .init()
|
private let actionsSubject: PassthroughSubject<RoomNotificationSettingsScreenViewModelAction, Never> = .init()
|
||||||
private let notificationSettingsProxy: NotificationSettingsProxyProtocol
|
private let notificationSettingsProxy: NotificationSettingsProxyProtocol
|
||||||
private let roomProxy: RoomProxyProtocol
|
private let roomProxy: JoinedRoomProxyProtocol
|
||||||
|
|
||||||
// periphery:ignore - cancellable tasks cancel when reassigned
|
// periphery:ignore - cancellable tasks cancel when reassigned
|
||||||
@CancellableTask private var fetchNotificationSettingsTask: Task<Void, Error>?
|
@CancellableTask private var fetchNotificationSettingsTask: Task<Void, Error>?
|
||||||
@@ -31,7 +31,7 @@ class RoomNotificationSettingsScreenViewModel: RoomNotificationSettingsScreenVie
|
|||||||
actionsSubject.eraseToAnyPublisher()
|
actionsSubject.eraseToAnyPublisher()
|
||||||
}
|
}
|
||||||
|
|
||||||
init(notificationSettingsProxy: NotificationSettingsProxyProtocol, roomProxy: RoomProxyProtocol, displayAsUserDefinedRoomSettings: Bool) {
|
init(notificationSettingsProxy: NotificationSettingsProxyProtocol, roomProxy: JoinedRoomProxyProtocol, displayAsUserDefinedRoomSettings: Bool) {
|
||||||
let bindings = RoomNotificationSettingsScreenViewStateBindings()
|
let bindings = RoomNotificationSettingsScreenViewStateBindings()
|
||||||
self.notificationSettingsProxy = notificationSettingsProxy
|
self.notificationSettingsProxy = notificationSettingsProxy
|
||||||
self.roomProxy = roomProxy
|
self.roomProxy = roomProxy
|
||||||
|
|||||||
+2
-2
@@ -42,7 +42,7 @@ struct RoomNotificationSettingsCustomSectionView_Previews: PreviewProvider, Test
|
|||||||
static let viewModel = {
|
static let viewModel = {
|
||||||
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init(defaultRoomMode: .allMessages, roomMode: .mentionsAndKeywordsOnly))
|
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init(defaultRoomMode: .allMessages, roomMode: .mentionsAndKeywordsOnly))
|
||||||
|
|
||||||
let roomProxy = RoomProxyMock(.init(name: "Room", isEncrypted: true))
|
let roomProxy = JoinedRoomProxyMock(.init(name: "Room", isEncrypted: true))
|
||||||
|
|
||||||
return RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxy,
|
return RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxy,
|
||||||
roomProxy: roomProxy,
|
roomProxy: roomProxy,
|
||||||
@@ -52,7 +52,7 @@ struct RoomNotificationSettingsCustomSectionView_Previews: PreviewProvider, Test
|
|||||||
static let viewModelUnencrypted = {
|
static let viewModelUnencrypted = {
|
||||||
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init(defaultRoomMode: .allMessages, roomMode: .mentionsAndKeywordsOnly))
|
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init(defaultRoomMode: .allMessages, roomMode: .mentionsAndKeywordsOnly))
|
||||||
|
|
||||||
let roomProxy = RoomProxyMock(.init(name: "Room", isEncrypted: false))
|
let roomProxy = JoinedRoomProxyMock(.init(name: "Room", isEncrypted: false))
|
||||||
|
|
||||||
return RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxy,
|
return RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxy,
|
||||||
roomProxy: roomProxy,
|
roomProxy: roomProxy,
|
||||||
|
|||||||
+2
-2
@@ -83,7 +83,7 @@ struct RoomNotificationSettingsScreen_Previews: PreviewProvider, TestablePreview
|
|||||||
static let viewModel = {
|
static let viewModel = {
|
||||||
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init(defaultRoomMode: .mentionsAndKeywordsOnly, roomMode: .mentionsAndKeywordsOnly))
|
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init(defaultRoomMode: .mentionsAndKeywordsOnly, roomMode: .mentionsAndKeywordsOnly))
|
||||||
|
|
||||||
let roomProxy = RoomProxyMock(.init(name: "Room", isEncrypted: true))
|
let roomProxy = JoinedRoomProxyMock(.init(name: "Room", isEncrypted: true))
|
||||||
|
|
||||||
return RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxy,
|
return RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxy,
|
||||||
roomProxy: roomProxy,
|
roomProxy: roomProxy,
|
||||||
@@ -93,7 +93,7 @@ struct RoomNotificationSettingsScreen_Previews: PreviewProvider, TestablePreview
|
|||||||
static let viewModelCustom = {
|
static let viewModelCustom = {
|
||||||
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init(defaultRoomMode: .allMessages, roomMode: .mentionsAndKeywordsOnly))
|
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init(defaultRoomMode: .allMessages, roomMode: .mentionsAndKeywordsOnly))
|
||||||
|
|
||||||
let roomProxy = RoomProxyMock(.init(name: "Room", isEncrypted: true))
|
let roomProxy = JoinedRoomProxyMock(.init(name: "Room", isEncrypted: true))
|
||||||
|
|
||||||
return RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxy,
|
return RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxy,
|
||||||
roomProxy: roomProxy,
|
roomProxy: roomProxy,
|
||||||
|
|||||||
+2
-2
@@ -52,7 +52,7 @@ struct RoomNotificationSettingsUserDefinedScreen_Previews: PreviewProvider, Test
|
|||||||
static let viewModel = {
|
static let viewModel = {
|
||||||
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init(defaultRoomMode: .mentionsAndKeywordsOnly, roomMode: .mentionsAndKeywordsOnly))
|
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init(defaultRoomMode: .mentionsAndKeywordsOnly, roomMode: .mentionsAndKeywordsOnly))
|
||||||
|
|
||||||
let roomProxy = RoomProxyMock(.init(name: "Room", isEncrypted: true))
|
let roomProxy = JoinedRoomProxyMock(.init(name: "Room", isEncrypted: true))
|
||||||
|
|
||||||
return RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxy,
|
return RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxy,
|
||||||
roomProxy: roomProxy,
|
roomProxy: roomProxy,
|
||||||
@@ -62,7 +62,7 @@ struct RoomNotificationSettingsUserDefinedScreen_Previews: PreviewProvider, Test
|
|||||||
static let viewModelUnencrypted = {
|
static let viewModelUnencrypted = {
|
||||||
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init(defaultRoomMode: .mentionsAndKeywordsOnly, roomMode: .mentionsAndKeywordsOnly))
|
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init(defaultRoomMode: .mentionsAndKeywordsOnly, roomMode: .mentionsAndKeywordsOnly))
|
||||||
|
|
||||||
let roomProxy = RoomProxyMock(.init(name: "Room", isEncrypted: false))
|
let roomProxy = JoinedRoomProxyMock(.init(name: "Room", isEncrypted: false))
|
||||||
|
|
||||||
return RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxy,
|
return RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxy,
|
||||||
roomProxy: roomProxy,
|
roomProxy: roomProxy,
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ struct RoomPollsHistoryScreen_Previews: PreviewProvider, TestablePreview {
|
|||||||
static let viewModelEmpty: RoomPollsHistoryScreenViewModel = {
|
static let viewModelEmpty: RoomPollsHistoryScreenViewModel = {
|
||||||
let roomTimelineController = MockRoomTimelineController()
|
let roomTimelineController = MockRoomTimelineController()
|
||||||
roomTimelineController.timelineItems = []
|
roomTimelineController.timelineItems = []
|
||||||
let roomProxyMockConfiguration = RoomProxyMockConfiguration(name: "Polls")
|
let roomProxyMockConfiguration = JoinedRoomProxyMockConfiguration(name: "Polls")
|
||||||
let viewModel = RoomPollsHistoryScreenViewModel(pollInteractionHandler: PollInteractionHandlerMock(),
|
let viewModel = RoomPollsHistoryScreenViewModel(pollInteractionHandler: PollInteractionHandlerMock(),
|
||||||
roomTimelineController: roomTimelineController,
|
roomTimelineController: roomTimelineController,
|
||||||
userIndicatorController: UserIndicatorControllerMock())
|
userIndicatorController: UserIndicatorControllerMock())
|
||||||
@@ -146,7 +146,7 @@ struct RoomPollsHistoryScreen_Previews: PreviewProvider, TestablePreview {
|
|||||||
roomTimelineController.timelineItemsTimestamp[item.id] = date
|
roomTimelineController.timelineItemsTimestamp[item.id] = date
|
||||||
}
|
}
|
||||||
|
|
||||||
let roomProxyMockConfiguration = RoomProxyMockConfiguration(name: "Polls", timelineStartReached: true)
|
let roomProxyMockConfiguration = JoinedRoomProxyMockConfiguration(name: "Polls", timelineStartReached: true)
|
||||||
let viewModel = RoomPollsHistoryScreenViewModel(pollInteractionHandler: PollInteractionHandlerMock(),
|
let viewModel = RoomPollsHistoryScreenViewModel(pollInteractionHandler: PollInteractionHandlerMock(),
|
||||||
roomTimelineController: roomTimelineController,
|
roomTimelineController: roomTimelineController,
|
||||||
userIndicatorController: UserIndicatorControllerMock())
|
userIndicatorController: UserIndicatorControllerMock())
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ import Combine
|
|||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
struct RoomRolesAndPermissionsScreenCoordinatorParameters {
|
struct RoomRolesAndPermissionsScreenCoordinatorParameters {
|
||||||
let roomProxy: RoomProxyProtocol
|
let roomProxy: JoinedRoomProxyProtocol
|
||||||
let userIndicatorController: UserIndicatorControllerProtocol
|
let userIndicatorController: UserIndicatorControllerProtocol
|
||||||
let analytics: AnalyticsService
|
let analytics: AnalyticsService
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -20,7 +20,7 @@ import SwiftUI
|
|||||||
typealias RoomRolesAndPermissionsScreenViewModelType = StateStoreViewModel<RoomRolesAndPermissionsScreenViewState, RoomRolesAndPermissionsScreenViewAction>
|
typealias RoomRolesAndPermissionsScreenViewModelType = StateStoreViewModel<RoomRolesAndPermissionsScreenViewState, RoomRolesAndPermissionsScreenViewAction>
|
||||||
|
|
||||||
class RoomRolesAndPermissionsScreenViewModel: RoomRolesAndPermissionsScreenViewModelType, RoomRolesAndPermissionsScreenViewModelProtocol {
|
class RoomRolesAndPermissionsScreenViewModel: RoomRolesAndPermissionsScreenViewModelType, RoomRolesAndPermissionsScreenViewModelProtocol {
|
||||||
private let roomProxy: RoomProxyProtocol
|
private let roomProxy: JoinedRoomProxyProtocol
|
||||||
private let userIndicatorController: UserIndicatorControllerProtocol
|
private let userIndicatorController: UserIndicatorControllerProtocol
|
||||||
private let analytics: AnalyticsService
|
private let analytics: AnalyticsService
|
||||||
|
|
||||||
@@ -29,7 +29,7 @@ class RoomRolesAndPermissionsScreenViewModel: RoomRolesAndPermissionsScreenViewM
|
|||||||
actionsSubject.eraseToAnyPublisher()
|
actionsSubject.eraseToAnyPublisher()
|
||||||
}
|
}
|
||||||
|
|
||||||
init(initialPermissions: RoomPermissions? = nil, roomProxy: RoomProxyProtocol, userIndicatorController: UserIndicatorControllerProtocol, analytics: AnalyticsService) {
|
init(initialPermissions: RoomPermissions? = nil, roomProxy: JoinedRoomProxyProtocol, userIndicatorController: UserIndicatorControllerProtocol, analytics: AnalyticsService) {
|
||||||
self.roomProxy = roomProxy
|
self.roomProxy = roomProxy
|
||||||
self.userIndicatorController = userIndicatorController
|
self.userIndicatorController = userIndicatorController
|
||||||
self.analytics = analytics
|
self.analytics = analytics
|
||||||
|
|||||||
+1
-1
@@ -127,7 +127,7 @@ struct RoomRolesAndPermissionsScreen: View {
|
|||||||
|
|
||||||
struct RoomRolesAndPermissionsScreen_Previews: PreviewProvider, TestablePreview {
|
struct RoomRolesAndPermissionsScreen_Previews: PreviewProvider, TestablePreview {
|
||||||
static let viewModel = RoomRolesAndPermissionsScreenViewModel(initialPermissions: RoomPermissions(powerLevels: .mock),
|
static let viewModel = RoomRolesAndPermissionsScreenViewModel(initialPermissions: RoomPermissions(powerLevels: .mock),
|
||||||
roomProxy: RoomProxyMock(.init(members: .allMembersAsAdmin)),
|
roomProxy: JoinedRoomProxyMock(.init(members: .allMembersAsAdmin)),
|
||||||
userIndicatorController: UserIndicatorControllerMock(),
|
userIndicatorController: UserIndicatorControllerMock(),
|
||||||
analytics: ServiceLocator.shared.analytics)
|
analytics: ServiceLocator.shared.analytics)
|
||||||
static var previews: some View {
|
static var previews: some View {
|
||||||
|
|||||||
+2
-2
@@ -22,13 +22,13 @@ private enum SuggestionTriggerPattern: Character {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final class CompletionSuggestionService: CompletionSuggestionServiceProtocol {
|
final class CompletionSuggestionService: CompletionSuggestionServiceProtocol {
|
||||||
private let roomProxy: RoomProxyProtocol
|
private let roomProxy: JoinedRoomProxyProtocol
|
||||||
private var canMentionAllUsers = false
|
private var canMentionAllUsers = false
|
||||||
private(set) var suggestionsPublisher: AnyPublisher<[SuggestionItem], Never> = Empty().eraseToAnyPublisher()
|
private(set) var suggestionsPublisher: AnyPublisher<[SuggestionItem], Never> = Empty().eraseToAnyPublisher()
|
||||||
|
|
||||||
private let suggestionTriggerSubject = CurrentValueSubject<SuggestionTrigger?, Never>(nil)
|
private let suggestionTriggerSubject = CurrentValueSubject<SuggestionTrigger?, Never>(nil)
|
||||||
|
|
||||||
init(roomProxy: RoomProxyProtocol) {
|
init(roomProxy: JoinedRoomProxyProtocol) {
|
||||||
self.roomProxy = roomProxy
|
self.roomProxy = roomProxy
|
||||||
|
|
||||||
suggestionsPublisher = suggestionTriggerSubject
|
suggestionsPublisher = suggestionTriggerSubject
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import SwiftUI
|
|||||||
import WysiwygComposer
|
import WysiwygComposer
|
||||||
|
|
||||||
struct RoomScreenCoordinatorParameters {
|
struct RoomScreenCoordinatorParameters {
|
||||||
let roomProxy: RoomProxyProtocol
|
let roomProxy: JoinedRoomProxyProtocol
|
||||||
var focussedEventID: String?
|
var focussedEventID: String?
|
||||||
let timelineController: RoomTimelineControllerProtocol
|
let timelineController: RoomTimelineControllerProtocol
|
||||||
let mediaProvider: MediaProviderProtocol
|
let mediaProvider: MediaProviderProtocol
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ import SwiftUI
|
|||||||
typealias RoomScreenViewModelType = StateStoreViewModel<RoomScreenViewState, RoomScreenViewAction>
|
typealias RoomScreenViewModelType = StateStoreViewModel<RoomScreenViewState, RoomScreenViewAction>
|
||||||
|
|
||||||
class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol {
|
class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol {
|
||||||
private let roomProxy: RoomProxyProtocol
|
private let roomProxy: JoinedRoomProxyProtocol
|
||||||
private let appMediator: AppMediatorProtocol
|
private let appMediator: AppMediatorProtocol
|
||||||
private let appSettings: AppSettings
|
private let appSettings: AppSettings
|
||||||
private let analyticsService: AnalyticsService
|
private let analyticsService: AnalyticsService
|
||||||
@@ -51,7 +51,7 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
init(roomProxy: RoomProxyProtocol,
|
init(roomProxy: JoinedRoomProxyProtocol,
|
||||||
mediaProvider: MediaProviderProtocol,
|
mediaProvider: MediaProviderProtocol,
|
||||||
appMediator: AppMediatorProtocol,
|
appMediator: AppMediatorProtocol,
|
||||||
appSettings: AppSettings,
|
appSettings: AppSettings,
|
||||||
@@ -183,7 +183,7 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
|
|||||||
}
|
}
|
||||||
|
|
||||||
extension RoomScreenViewModel {
|
extension RoomScreenViewModel {
|
||||||
static func mock(roomProxyMock: RoomProxyMock) -> RoomScreenViewModel {
|
static func mock(roomProxyMock: JoinedRoomProxyMock) -> RoomScreenViewModel {
|
||||||
RoomScreenViewModel(roomProxy: roomProxyMock,
|
RoomScreenViewModel(roomProxy: roomProxyMock,
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
appMediator: AppMediatorMock.default,
|
appMediator: AppMediatorMock.default,
|
||||||
|
|||||||
@@ -210,9 +210,9 @@ struct RoomScreen: View {
|
|||||||
// MARK: - Previews
|
// MARK: - Previews
|
||||||
|
|
||||||
struct RoomScreen_Previews: PreviewProvider, TestablePreview {
|
struct RoomScreen_Previews: PreviewProvider, TestablePreview {
|
||||||
static let roomProxyMock = RoomProxyMock(.init(id: "stable_id",
|
static let roomProxyMock = JoinedRoomProxyMock(.init(id: "stable_id",
|
||||||
name: "Preview room",
|
name: "Preview room",
|
||||||
hasOngoingCall: true))
|
hasOngoingCall: true))
|
||||||
static let roomViewModel = RoomScreenViewModel.mock(roomProxyMock: roomProxyMock)
|
static let roomViewModel = RoomScreenViewModel.mock(roomProxyMock: roomProxyMock)
|
||||||
static let timelineViewModel = TimelineViewModel(roomProxy: roomProxyMock,
|
static let timelineViewModel = TimelineViewModel(roomProxy: roomProxyMock,
|
||||||
timelineController: MockRoomTimelineController(),
|
timelineController: MockRoomTimelineController(),
|
||||||
|
|||||||
+1
-1
@@ -57,7 +57,7 @@ final class NotificationSettingsEditScreenCoordinator: CoordinatorProtocol {
|
|||||||
// MARK: - Private
|
// MARK: - Private
|
||||||
|
|
||||||
private func presentRoomNotificationSettings(roomID: String) async {
|
private func presentRoomNotificationSettings(roomID: String) async {
|
||||||
guard let roomProxy = await parameters.userSession.clientProxy.roomForIdentifier(roomID) else { return }
|
guard case let .joined(roomProxy) = await parameters.userSession.clientProxy.roomForIdentifier(roomID) else { return }
|
||||||
|
|
||||||
let roomNotificationSettingsParameters = RoomNotificationSettingsScreenCoordinatorParameters(navigationStackCoordinator: parameters.navigationStackCoordinator,
|
let roomNotificationSettingsParameters = RoomNotificationSettingsScreenCoordinatorParameters(navigationStackCoordinator: parameters.navigationStackCoordinator,
|
||||||
notificationSettingsProxy: parameters.notificationSettings,
|
notificationSettingsProxy: parameters.notificationSettings,
|
||||||
|
|||||||
+1
-1
@@ -138,7 +138,7 @@ class NotificationSettingsEditScreenViewModel: NotificationSettingsEditScreenVie
|
|||||||
var roomsWithUserDefinedMode: [NotificationSettingsEditScreenRoom] = []
|
var roomsWithUserDefinedMode: [NotificationSettingsEditScreenRoom] = []
|
||||||
|
|
||||||
for roomSummary in filteredRoomsSummary {
|
for roomSummary in filteredRoomsSummary {
|
||||||
guard let roomProxy = await userSession.clientProxy.roomForIdentifier(roomSummary.id) else { continue }
|
guard case let .joined(roomProxy) = await userSession.clientProxy.roomForIdentifier(roomSummary.id) else { continue }
|
||||||
// `isOneToOneRoom` here is not the same as `isDirect` on the room. From the point of view of the push rule, a one-to-one room is a room with exactly two active members.
|
// `isOneToOneRoom` here is not the same as `isDirect` on the room. From the point of view of the push rule, a one-to-one room is a room with exactly two active members.
|
||||||
let isOneToOneRoom = roomProxy.activeMembersCount == 2
|
let isOneToOneRoom = roomProxy.activeMembersCount == 2
|
||||||
// display only the rooms we're interested in
|
// display only the rooms we're interested in
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ enum TimelineInteractionHandlerAction {
|
|||||||
|
|
||||||
@MainActor
|
@MainActor
|
||||||
class TimelineInteractionHandler {
|
class TimelineInteractionHandler {
|
||||||
private let roomProxy: RoomProxyProtocol
|
private let roomProxy: JoinedRoomProxyProtocol
|
||||||
private let timelineController: RoomTimelineControllerProtocol
|
private let timelineController: RoomTimelineControllerProtocol
|
||||||
private let mediaProvider: MediaProviderProtocol
|
private let mediaProvider: MediaProviderProtocol
|
||||||
private let mediaPlayerProvider: MediaPlayerProviderProtocol
|
private let mediaPlayerProvider: MediaPlayerProviderProtocol
|
||||||
@@ -60,7 +60,7 @@ class TimelineInteractionHandler {
|
|||||||
|
|
||||||
private var resumeVoiceMessagePlaybackAfterScrubbing = false
|
private var resumeVoiceMessagePlaybackAfterScrubbing = false
|
||||||
|
|
||||||
init(roomProxy: RoomProxyProtocol,
|
init(roomProxy: JoinedRoomProxyProtocol,
|
||||||
timelineController: RoomTimelineControllerProtocol,
|
timelineController: RoomTimelineControllerProtocol,
|
||||||
mediaProvider: MediaProviderProtocol,
|
mediaProvider: MediaProviderProtocol,
|
||||||
mediaPlayerProvider: MediaPlayerProviderProtocol,
|
mediaPlayerProvider: MediaPlayerProviderProtocol,
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ class TimelineViewModel: TimelineViewModelType, TimelineViewModelProtocol {
|
|||||||
static let toastErrorID = "RoomScreenToastError"
|
static let toastErrorID = "RoomScreenToastError"
|
||||||
}
|
}
|
||||||
|
|
||||||
private let roomProxy: RoomProxyProtocol
|
private let roomProxy: JoinedRoomProxyProtocol
|
||||||
private let timelineController: RoomTimelineControllerProtocol
|
private let timelineController: RoomTimelineControllerProtocol
|
||||||
private let mediaPlayerProvider: MediaPlayerProviderProtocol
|
private let mediaPlayerProvider: MediaPlayerProviderProtocol
|
||||||
private let userIndicatorController: UserIndicatorControllerProtocol
|
private let userIndicatorController: UserIndicatorControllerProtocol
|
||||||
@@ -49,7 +49,7 @@ class TimelineViewModel: TimelineViewModelType, TimelineViewModelProtocol {
|
|||||||
private var paginateBackwardsTask: Task<Void, Never>?
|
private var paginateBackwardsTask: Task<Void, Never>?
|
||||||
private var paginateForwardsTask: Task<Void, Never>?
|
private var paginateForwardsTask: Task<Void, Never>?
|
||||||
|
|
||||||
init(roomProxy: RoomProxyProtocol,
|
init(roomProxy: JoinedRoomProxyProtocol,
|
||||||
focussedEventID: String? = nil,
|
focussedEventID: String? = nil,
|
||||||
timelineController: RoomTimelineControllerProtocol,
|
timelineController: RoomTimelineControllerProtocol,
|
||||||
mediaProvider: MediaProviderProtocol,
|
mediaProvider: MediaProviderProtocol,
|
||||||
@@ -819,7 +819,7 @@ private extension RoomProxyProtocol {
|
|||||||
// MARK: - Mocks
|
// MARK: - Mocks
|
||||||
|
|
||||||
extension TimelineViewModel {
|
extension TimelineViewModel {
|
||||||
static let mock = TimelineViewModel(roomProxy: RoomProxyMock(.init(name: "Preview room")),
|
static let mock = TimelineViewModel(roomProxy: JoinedRoomProxyMock(.init(name: "Preview room")),
|
||||||
focussedEventID: nil,
|
focussedEventID: nil,
|
||||||
timelineController: MockRoomTimelineController(),
|
timelineController: MockRoomTimelineController(),
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ struct ReadReceiptsSummaryView_Previews: PreviewProvider, TestablePreview {
|
|||||||
.mockCharlie,
|
.mockCharlie,
|
||||||
.mockDan
|
.mockDan
|
||||||
]
|
]
|
||||||
let roomProxyMock = RoomProxyMock(.init(name: "Room", members: members))
|
let roomProxyMock = JoinedRoomProxyMock(.init(name: "Room", members: members))
|
||||||
let mock = TimelineViewModel(roomProxy: roomProxyMock,
|
let mock = TimelineViewModel(roomProxy: roomProxyMock,
|
||||||
timelineController: MockRoomTimelineController(),
|
timelineController: MockRoomTimelineController(),
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ struct TimelineReadReceiptsView_Previews: PreviewProvider, TestablePreview {
|
|||||||
.mockMe
|
.mockMe
|
||||||
]
|
]
|
||||||
|
|
||||||
static let viewModel = TimelineViewModel(roomProxy: RoomProxyMock(.init(name: "Test", members: members)),
|
static let viewModel = TimelineViewModel(roomProxy: JoinedRoomProxyMock(.init(name: "Test", members: members)),
|
||||||
timelineController: MockRoomTimelineController(),
|
timelineController: MockRoomTimelineController(),
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||||
|
|||||||
+1
-1
@@ -93,7 +93,7 @@ struct HighlightedTimelineItemModifier_Previews: PreviewProvider, TestablePrevie
|
|||||||
|
|
||||||
/// A preview that allows quick testing of the highlight appearance across various timeline scenarios.
|
/// A preview that allows quick testing of the highlight appearance across various timeline scenarios.
|
||||||
struct HighlightedTimelineItemTimeline_Previews: PreviewProvider {
|
struct HighlightedTimelineItemTimeline_Previews: PreviewProvider {
|
||||||
static let roomProxyMock = RoomProxyMock(.init(name: "Preview room"))
|
static let roomProxyMock = JoinedRoomProxyMock(.init(name: "Preview room"))
|
||||||
static let roomViewModel = RoomScreenViewModel.mock(roomProxyMock: roomProxyMock)
|
static let roomViewModel = RoomScreenViewModel.mock(roomProxyMock: roomProxyMock)
|
||||||
static let focussedEventID = "RoomTimelineItemFixtures.default.5"
|
static let focussedEventID = "RoomTimelineItemFixtures.default.5"
|
||||||
static let timelineViewModel = TimelineViewModel(roomProxy: roomProxyMock,
|
static let timelineViewModel = TimelineViewModel(roomProxy: roomProxyMock,
|
||||||
|
|||||||
@@ -79,8 +79,8 @@ struct TimelineView: UIViewControllerRepresentable {
|
|||||||
// MARK: - Previews
|
// MARK: - Previews
|
||||||
|
|
||||||
struct TimelineView_Previews: PreviewProvider, TestablePreview {
|
struct TimelineView_Previews: PreviewProvider, TestablePreview {
|
||||||
static let roomProxyMock = RoomProxyMock(.init(id: "stable_id",
|
static let roomProxyMock = JoinedRoomProxyMock(.init(id: "stable_id",
|
||||||
name: "Preview room"))
|
name: "Preview room"))
|
||||||
static let roomViewModel = RoomScreenViewModel.mock(roomProxyMock: roomProxyMock)
|
static let roomViewModel = RoomScreenViewModel.mock(roomProxyMock: roomProxyMock)
|
||||||
static let timelineViewModel = TimelineViewModel(roomProxy: roomProxyMock,
|
static let timelineViewModel = TimelineViewModel(roomProxy: roomProxyMock,
|
||||||
timelineController: MockRoomTimelineController(),
|
timelineController: MockRoomTimelineController(),
|
||||||
|
|||||||
@@ -443,23 +443,13 @@ class ClientProxy: ClientProxyProtocol {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
func roomForIdentifier(_ identifier: String) async -> RoomProxyProtocol? {
|
func roomForIdentifier(_ identifier: String) async -> RoomProxyType? {
|
||||||
guard let roomListService else {
|
|
||||||
MXLog.error("Failed retrieving room, room list service not set up")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Try fetching the room from the cold cache (if available) first
|
// Try fetching the room from the cold cache (if available) first
|
||||||
var (roomListItem, room) = await roomTupleForIdentifier(identifier)
|
if let room = await buildRoomForIdentifier(identifier) {
|
||||||
|
return room
|
||||||
if let roomListItem, let room {
|
|
||||||
return await RoomProxy(roomListService: roomListService,
|
|
||||||
roomListItem: roomListItem,
|
|
||||||
room: room)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Else wait for the visible rooms list to go into fully loaded
|
// Else wait for the visible rooms list to go into fully loaded
|
||||||
|
|
||||||
guard let roomSummaryProvider else {
|
guard let roomSummaryProvider else {
|
||||||
MXLog.error("Rooms summary provider not setup yet")
|
MXLog.error("Rooms summary provider not setup yet")
|
||||||
return nil
|
return nil
|
||||||
@@ -469,21 +459,7 @@ class ClientProxy: ClientProxyProtocol {
|
|||||||
_ = await roomSummaryProvider.statePublisher.values.first(where: { $0.isLoaded })
|
_ = await roomSummaryProvider.statePublisher.values.first(where: { $0.isLoaded })
|
||||||
}
|
}
|
||||||
|
|
||||||
(roomListItem, room) = await roomTupleForIdentifier(identifier)
|
return await buildRoomForIdentifier(identifier)
|
||||||
|
|
||||||
guard let roomListItem else {
|
|
||||||
MXLog.error("Invalid roomListItem for identifier \(identifier)")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
guard let room else {
|
|
||||||
MXLog.error("Invalid roomListItem fullRoom for identifier \(identifier)")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return await RoomProxy(roomListService: roomListService,
|
|
||||||
roomListItem: roomListItem,
|
|
||||||
room: room)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func roomPreviewForIdentifier(_ identifier: String, via: [String]) async -> Result<RoomPreviewDetails, ClientProxyError> {
|
func roomPreviewForIdentifier(_ identifier: String, via: [String]) async -> Result<RoomPreviewDetails, ClientProxyError> {
|
||||||
@@ -703,9 +679,9 @@ class ClientProxy: ClientProxyProtocol {
|
|||||||
var users: OrderedSet<UserProfileProxy> = []
|
var users: OrderedSet<UserProfileProxy> = []
|
||||||
|
|
||||||
for roomID in roomIdentifiers {
|
for roomID in roomIdentifiers {
|
||||||
guard let room = await roomForIdentifier(roomID),
|
guard case let .joined(roomProxy) = await roomForIdentifier(roomID),
|
||||||
room.isDirect,
|
roomProxy.isDirect,
|
||||||
let members = await room.members() else {
|
let members = await roomProxy.members() else {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -869,18 +845,45 @@ class ClientProxy: ClientProxyProtocol {
|
|||||||
return .exclude(eventTypes: stateEventFilters.map { FilterTimelineEventType.state(eventType: $0) })
|
return .exclude(eventTypes: stateEventFilters.map { FilterTimelineEventType.state(eventType: $0) })
|
||||||
}()
|
}()
|
||||||
|
|
||||||
private func roomTupleForIdentifier(_ identifier: String) async -> (RoomListItem?, Room?) {
|
private func buildRoomForIdentifier(_ identifier: String) async -> RoomProxyType? {
|
||||||
do {
|
guard let roomListService else {
|
||||||
let roomListItem = try roomListService?.room(roomId: identifier)
|
MXLog.error("Failed retrieving room, room list service not set up")
|
||||||
if roomListItem?.isTimelineInitialized() == false {
|
return nil
|
||||||
try await roomListItem?.initTimeline(eventTypeFilter: eventFilters, internalIdPrefix: nil)
|
}
|
||||||
}
|
|
||||||
let fullRoom = try roomListItem?.fullRoom()
|
|
||||||
|
|
||||||
return (roomListItem, fullRoom)
|
guard let roomListItem = try? roomListService.room(roomId: identifier) else {
|
||||||
} catch {
|
MXLog.error("Failed retrieving room, invalid room list item")
|
||||||
MXLog.error("Failed retrieving/initialising room with identifier: \(identifier)")
|
return nil
|
||||||
return (nil, nil)
|
}
|
||||||
|
|
||||||
|
if roomListItem.isTimelineInitialized() == false {
|
||||||
|
do {
|
||||||
|
try await roomListItem.initTimeline(eventTypeFilter: eventFilters, internalIdPrefix: nil)
|
||||||
|
} catch {
|
||||||
|
MXLog.error("Failed initializing room timeline with error: \(error)")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
guard let room = try? roomListItem.fullRoom() else {
|
||||||
|
MXLog.error("Failed retrieving room, invalid room list item full room")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
switch room.membership() {
|
||||||
|
case .invited:
|
||||||
|
return .invited(InvitedRoomProxy(roomListItem: roomListItem,
|
||||||
|
room: room))
|
||||||
|
case .joined:
|
||||||
|
guard let roomProxy = await JoinedRoomProxy(roomListService: roomListService,
|
||||||
|
roomListItem: roomListItem,
|
||||||
|
room: room) else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return .joined(roomProxy)
|
||||||
|
case .left:
|
||||||
|
return .left
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ protocol ClientProxyProtocol: AnyObject, MediaLoaderProtocol {
|
|||||||
|
|
||||||
func uploadMedia(_ media: MediaInfo) async -> Result<String, ClientProxyError>
|
func uploadMedia(_ media: MediaInfo) async -> Result<String, ClientProxyError>
|
||||||
|
|
||||||
func roomForIdentifier(_ identifier: String) async -> RoomProxyProtocol?
|
func roomForIdentifier(_ identifier: String) async -> RoomProxyType?
|
||||||
|
|
||||||
func roomPreviewForIdentifier(_ identifier: String, via: [String]) async -> Result<RoomPreviewDetails, ClientProxyError>
|
func roomPreviewForIdentifier(_ identifier: String, via: [String]) async -> Result<RoomPreviewDetails, ClientProxyError>
|
||||||
|
|
||||||
|
|||||||
@@ -19,11 +19,11 @@ import Foundation
|
|||||||
import MatrixRustSDK
|
import MatrixRustSDK
|
||||||
|
|
||||||
final class ComposerDraftService: ComposerDraftServiceProtocol {
|
final class ComposerDraftService: ComposerDraftServiceProtocol {
|
||||||
private let roomProxy: RoomProxyProtocol
|
private let roomProxy: JoinedRoomProxyProtocol
|
||||||
private let timelineItemfactory: RoomTimelineItemFactoryProtocol
|
private let timelineItemfactory: RoomTimelineItemFactoryProtocol
|
||||||
private var volatileDraft: ComposerDraftProxy?
|
private var volatileDraft: ComposerDraftProxy?
|
||||||
|
|
||||||
init(roomProxy: RoomProxyProtocol, timelineItemfactory: RoomTimelineItemFactoryProtocol) {
|
init(roomProxy: JoinedRoomProxyProtocol, timelineItemfactory: RoomTimelineItemFactoryProtocol) {
|
||||||
self.roomProxy = roomProxy
|
self.roomProxy = roomProxy
|
||||||
self.timelineItemfactory = timelineItemfactory
|
self.timelineItemfactory = timelineItemfactory
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ private enum GenericCallLinkQueryParameters {
|
|||||||
struct ElementCallConfiguration {
|
struct ElementCallConfiguration {
|
||||||
enum Kind {
|
enum Kind {
|
||||||
case genericCallLink(URL)
|
case genericCallLink(URL)
|
||||||
case roomCall(roomProxy: RoomProxyProtocol,
|
case roomCall(roomProxy: JoinedRoomProxyProtocol,
|
||||||
clientProxy: ClientProxyProtocol,
|
clientProxy: ClientProxyProtocol,
|
||||||
clientID: String,
|
clientID: String,
|
||||||
elementCallBaseURL: URL,
|
elementCallBaseURL: URL,
|
||||||
@@ -62,7 +62,7 @@ struct ElementCallConfiguration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Creates a configuration for an internal room call.
|
/// Creates a configuration for an internal room call.
|
||||||
init(roomProxy: RoomProxyProtocol,
|
init(roomProxy: JoinedRoomProxyProtocol,
|
||||||
clientProxy: ClientProxyProtocol,
|
clientProxy: ClientProxyProtocol,
|
||||||
clientID: String,
|
clientID: String,
|
||||||
elementCallBaseURL: URL,
|
elementCallBaseURL: URL,
|
||||||
|
|||||||
@@ -276,7 +276,7 @@ class ElementCallService: NSObject, ElementCallServiceProtocol, PKPushRegistryDe
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
guard let roomProxy = await clientProxy.roomForIdentifier(incomingCallID.roomID) else {
|
guard case let .joined(roomProxy) = await clientProxy.roomForIdentifier(incomingCallID.roomID) else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,9 +18,9 @@ import Foundation
|
|||||||
|
|
||||||
class PollInteractionHandler: PollInteractionHandlerProtocol {
|
class PollInteractionHandler: PollInteractionHandlerProtocol {
|
||||||
let analyticsService: AnalyticsService
|
let analyticsService: AnalyticsService
|
||||||
let roomProxy: RoomProxyProtocol
|
let roomProxy: JoinedRoomProxyProtocol
|
||||||
|
|
||||||
init(analyticsService: AnalyticsService, roomProxy: RoomProxyProtocol) {
|
init(analyticsService: AnalyticsService, roomProxy: JoinedRoomProxyProtocol) {
|
||||||
self.analyticsService = analyticsService
|
self.analyticsService = analyticsService
|
||||||
self.roomProxy = roomProxy
|
self.roomProxy = roomProxy
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,111 @@
|
|||||||
|
//
|
||||||
|
// Copyright 2024 New Vector Ltd
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import MatrixRustSDK
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class InvitedRoomProxy: InvitedRoomProxyProtocol {
|
||||||
|
private let roomListItem: RoomListItemProtocol
|
||||||
|
private let room: RoomProtocol
|
||||||
|
|
||||||
|
// A room identifier is constant and lazy stops it from being fetched
|
||||||
|
// multiple times over FFI
|
||||||
|
lazy var id: String = room.id()
|
||||||
|
|
||||||
|
var canonicalAlias: String? {
|
||||||
|
room.canonicalAlias()
|
||||||
|
}
|
||||||
|
|
||||||
|
var ownUserID: String {
|
||||||
|
room.ownUserId()
|
||||||
|
}
|
||||||
|
|
||||||
|
var name: String? {
|
||||||
|
roomListItem.displayName()
|
||||||
|
}
|
||||||
|
|
||||||
|
var topic: String? {
|
||||||
|
room.topic()
|
||||||
|
}
|
||||||
|
|
||||||
|
var avatarURL: URL? {
|
||||||
|
roomListItem.avatarUrl().flatMap(URL.init(string:))
|
||||||
|
}
|
||||||
|
|
||||||
|
var avatar: RoomAvatar {
|
||||||
|
if isDirect, avatarURL == nil {
|
||||||
|
let heroes = room.heroes()
|
||||||
|
|
||||||
|
if heroes.count == 1 {
|
||||||
|
return .heroes(heroes.map(UserProfileProxy.init))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return .room(id: id, name: name, avatarURL: avatarURL)
|
||||||
|
}
|
||||||
|
|
||||||
|
var isDirect: Bool {
|
||||||
|
room.isDirect()
|
||||||
|
}
|
||||||
|
|
||||||
|
var isPublic: Bool {
|
||||||
|
room.isPublic()
|
||||||
|
}
|
||||||
|
|
||||||
|
var isSpace: Bool {
|
||||||
|
room.isSpace()
|
||||||
|
}
|
||||||
|
|
||||||
|
var joinedMembersCount: Int {
|
||||||
|
Int(room.joinedMembersCount())
|
||||||
|
}
|
||||||
|
|
||||||
|
var activeMembersCount: Int {
|
||||||
|
Int(room.activeMembersCount())
|
||||||
|
}
|
||||||
|
|
||||||
|
var inviter: RoomMemberProxyProtocol? {
|
||||||
|
get async {
|
||||||
|
await (try? roomListItem.roomInfo().inviter).map(RoomMemberProxy.init)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
init(roomListItem: RoomListItemProtocol,
|
||||||
|
room: RoomProtocol) {
|
||||||
|
self.roomListItem = roomListItem
|
||||||
|
self.room = room
|
||||||
|
}
|
||||||
|
|
||||||
|
func acceptInvitation() async -> Result<Void, RoomProxyError> {
|
||||||
|
do {
|
||||||
|
try await room.join()
|
||||||
|
return .success(())
|
||||||
|
} catch {
|
||||||
|
MXLog.error("Failed accepting invitation with error: \(error)")
|
||||||
|
return .failure(.sdkError(error))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func rejectInvitation() async -> Result<Void, RoomProxyError> {
|
||||||
|
do {
|
||||||
|
return try await .success(room.leave())
|
||||||
|
} catch {
|
||||||
|
MXLog.error("Failed rejecting invitiation with error: \(error)")
|
||||||
|
return .failure(.sdkError(error))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+28
-55
@@ -19,7 +19,7 @@ import Foundation
|
|||||||
import MatrixRustSDK
|
import MatrixRustSDK
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class RoomProxy: RoomProxyProtocol {
|
class JoinedRoomProxy: JoinedRoomProxyProtocol {
|
||||||
private let roomListService: RoomListServiceProtocol
|
private let roomListService: RoomListServiceProtocol
|
||||||
private let roomListItem: RoomListItemProtocol
|
private let roomListItem: RoomListItemProtocol
|
||||||
private let room: RoomProtocol
|
private let room: RoomProtocol
|
||||||
@@ -77,13 +77,19 @@ class RoomProxy: RoomProxyProtocol {
|
|||||||
typingMembersSubject.asCurrentValuePublisher()
|
typingMembersSubject.asCurrentValuePublisher()
|
||||||
}
|
}
|
||||||
|
|
||||||
private let actionsSubject = PassthroughSubject<RoomProxyAction, Never>()
|
private let actionsSubject = PassthroughSubject<JoinedRoomProxyAction, Never>()
|
||||||
var actionsPublisher: AnyPublisher<RoomProxyAction, Never> {
|
var actionsPublisher: AnyPublisher<JoinedRoomProxyAction, Never> {
|
||||||
actionsSubject.eraseToAnyPublisher()
|
actionsSubject.eraseToAnyPublisher()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A room identifier is constant and lazy stops it from being fetched
|
||||||
|
// multiple times over FFI
|
||||||
lazy var id: String = room.id()
|
lazy var id: String = room.id()
|
||||||
|
|
||||||
|
var canonicalAlias: String? {
|
||||||
|
room.canonicalAlias()
|
||||||
|
}
|
||||||
|
|
||||||
var ownUserID: String {
|
var ownUserID: String {
|
||||||
room.ownUserId()
|
room.ownUserId()
|
||||||
}
|
}
|
||||||
@@ -96,14 +102,20 @@ class RoomProxy: RoomProxyProtocol {
|
|||||||
room.topic()
|
room.topic()
|
||||||
}
|
}
|
||||||
|
|
||||||
var membership: Membership {
|
var avatarURL: URL? {
|
||||||
room.membership()
|
roomListItem.avatarUrl().flatMap(URL.init(string:))
|
||||||
}
|
}
|
||||||
|
|
||||||
var inviter: RoomMemberProxyProtocol? {
|
var avatar: RoomAvatar {
|
||||||
get async {
|
if isDirect, avatarURL == nil {
|
||||||
await (try? roomListItem.roomInfo().inviter).map(RoomMemberProxy.init)
|
let heroes = room.heroes()
|
||||||
|
|
||||||
|
if heroes.count == 1 {
|
||||||
|
return .heroes(heroes.map(UserProfileProxy.init))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return .room(id: id, name: name, avatarURL: avatarURL)
|
||||||
}
|
}
|
||||||
|
|
||||||
var isDirect: Bool {
|
var isDirect: Bool {
|
||||||
@@ -118,6 +130,14 @@ class RoomProxy: RoomProxyProtocol {
|
|||||||
room.isSpace()
|
room.isSpace()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var joinedMembersCount: Int {
|
||||||
|
Int(room.joinedMembersCount())
|
||||||
|
}
|
||||||
|
|
||||||
|
var activeMembersCount: Int {
|
||||||
|
Int(room.activeMembersCount())
|
||||||
|
}
|
||||||
|
|
||||||
var isEncrypted: Bool {
|
var isEncrypted: Bool {
|
||||||
(try? room.isEncrypted()) ?? false
|
(try? room.isEncrypted()) ?? false
|
||||||
}
|
}
|
||||||
@@ -145,34 +165,6 @@ class RoomProxy: RoomProxyProtocol {
|
|||||||
room.activeRoomCallParticipants()
|
room.activeRoomCallParticipants()
|
||||||
}
|
}
|
||||||
|
|
||||||
var canonicalAlias: String? {
|
|
||||||
room.canonicalAlias()
|
|
||||||
}
|
|
||||||
|
|
||||||
var avatarURL: URL? {
|
|
||||||
roomListItem.avatarUrl().flatMap(URL.init(string:))
|
|
||||||
}
|
|
||||||
|
|
||||||
var avatar: RoomAvatar {
|
|
||||||
if isDirect, avatarURL == nil {
|
|
||||||
let heroes = room.heroes()
|
|
||||||
|
|
||||||
if heroes.count == 1 {
|
|
||||||
return .heroes(heroes.map(UserProfileProxy.init))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return .room(id: id, name: name, avatarURL: avatarURL)
|
|
||||||
}
|
|
||||||
|
|
||||||
var joinedMembersCount: Int {
|
|
||||||
Int(room.joinedMembersCount())
|
|
||||||
}
|
|
||||||
|
|
||||||
var activeMembersCount: Int {
|
|
||||||
Int(room.activeMembersCount())
|
|
||||||
}
|
|
||||||
|
|
||||||
init?(roomListService: RoomListServiceProtocol,
|
init?(roomListService: RoomListServiceProtocol,
|
||||||
roomListItem: RoomListItemProtocol,
|
roomListItem: RoomListItemProtocol,
|
||||||
room: RoomProtocol) async {
|
room: RoomProtocol) async {
|
||||||
@@ -315,25 +307,6 @@ class RoomProxy: RoomProxyProtocol {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func rejectInvitation() async -> Result<Void, RoomProxyError> {
|
|
||||||
do {
|
|
||||||
return try await .success(room.leave())
|
|
||||||
} catch {
|
|
||||||
MXLog.error("Failed rejecting invitiation with error: \(error)")
|
|
||||||
return .failure(.sdkError(error))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func acceptInvitation() async -> Result<Void, RoomProxyError> {
|
|
||||||
do {
|
|
||||||
try await room.join()
|
|
||||||
return .success(())
|
|
||||||
} catch {
|
|
||||||
MXLog.error("Failed accepting invitation with error: \(error)")
|
|
||||||
return .failure(.sdkError(error))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func invite(userID: String) async -> Result<Void, RoomProxyError> {
|
func invite(userID: String) async -> Result<Void, RoomProxyError> {
|
||||||
do {
|
do {
|
||||||
MXLog.info("Inviting user \(userID)")
|
MXLog.info("Inviting user \(userID)")
|
||||||
@@ -26,30 +26,20 @@ enum RoomProxyError: Error {
|
|||||||
case eventNotFound
|
case eventNotFound
|
||||||
}
|
}
|
||||||
|
|
||||||
enum RoomProxyAction {
|
enum RoomProxyType {
|
||||||
case roomInfoUpdate
|
case joined(JoinedRoomProxyProtocol)
|
||||||
|
case invited(InvitedRoomProxyProtocol)
|
||||||
|
case left
|
||||||
}
|
}
|
||||||
|
|
||||||
// sourcery: AutoMockable
|
// sourcery: AutoMockable
|
||||||
protocol RoomProxyProtocol {
|
protocol RoomProxyProtocol {
|
||||||
var id: String { get }
|
var id: String { get }
|
||||||
var isDirect: Bool { get }
|
|
||||||
var isPublic: Bool { get }
|
|
||||||
var isSpace: Bool { get }
|
|
||||||
var isEncrypted: Bool { get }
|
|
||||||
var isFavourite: Bool { get async }
|
|
||||||
var pinnedEventIDs: Set<String> { get async }
|
|
||||||
var membership: Membership { get }
|
|
||||||
var inviter: RoomMemberProxyProtocol? { get async }
|
|
||||||
|
|
||||||
var hasOngoingCall: Bool { get }
|
|
||||||
var activeRoomCallParticipants: [String] { get }
|
|
||||||
|
|
||||||
var canonicalAlias: String? { get }
|
var canonicalAlias: String? { get }
|
||||||
|
|
||||||
var ownUserID: String { get }
|
var ownUserID: String { get }
|
||||||
|
|
||||||
var name: String? { get }
|
var name: String? { get }
|
||||||
|
|
||||||
var topic: String? { get }
|
var topic: String? { get }
|
||||||
|
|
||||||
/// The room's avatar info for use in a ``RoomAvatarImage``.
|
/// The room's avatar info for use in a ``RoomAvatarImage``.
|
||||||
@@ -57,15 +47,41 @@ protocol RoomProxyProtocol {
|
|||||||
/// The room's avatar URL. Use this for editing and favour ``avatar`` for display.
|
/// The room's avatar URL. Use this for editing and favour ``avatar`` for display.
|
||||||
var avatarURL: URL? { get }
|
var avatarURL: URL? { get }
|
||||||
|
|
||||||
var membersPublisher: CurrentValuePublisher<[RoomMemberProxyProtocol], Never> { get }
|
var isPublic: Bool { get }
|
||||||
|
var isDirect: Bool { get }
|
||||||
var typingMembersPublisher: CurrentValuePublisher<[String], Never> { get }
|
var isSpace: Bool { get }
|
||||||
|
|
||||||
var joinedMembersCount: Int { get }
|
var joinedMembersCount: Int { get }
|
||||||
|
|
||||||
var activeMembersCount: Int { get }
|
var activeMembersCount: Int { get }
|
||||||
|
}
|
||||||
|
|
||||||
var actionsPublisher: AnyPublisher<RoomProxyAction, Never> { get }
|
// sourcery: AutoMockable
|
||||||
|
protocol InvitedRoomProxyProtocol: RoomProxyProtocol {
|
||||||
|
var inviter: RoomMemberProxyProtocol? { get async }
|
||||||
|
|
||||||
|
func rejectInvitation() async -> Result<Void, RoomProxyError>
|
||||||
|
func acceptInvitation() async -> Result<Void, RoomProxyError>
|
||||||
|
}
|
||||||
|
|
||||||
|
enum JoinedRoomProxyAction {
|
||||||
|
case roomInfoUpdate
|
||||||
|
}
|
||||||
|
|
||||||
|
// sourcery: AutoMockable
|
||||||
|
protocol JoinedRoomProxyProtocol: RoomProxyProtocol {
|
||||||
|
var isEncrypted: Bool { get }
|
||||||
|
var isFavourite: Bool { get async }
|
||||||
|
var pinnedEventIDs: Set<String> { get async }
|
||||||
|
|
||||||
|
var hasOngoingCall: Bool { get }
|
||||||
|
var activeRoomCallParticipants: [String] { get }
|
||||||
|
|
||||||
|
var membersPublisher: CurrentValuePublisher<[RoomMemberProxyProtocol], Never> { get }
|
||||||
|
|
||||||
|
var typingMembersPublisher: CurrentValuePublisher<[String], Never> { get }
|
||||||
|
|
||||||
|
var actionsPublisher: AnyPublisher<JoinedRoomProxyAction, Never> { get }
|
||||||
|
|
||||||
var timeline: TimelineProxyProtocol { get }
|
var timeline: TimelineProxyProtocol { get }
|
||||||
|
|
||||||
@@ -87,10 +103,6 @@ protocol RoomProxyProtocol {
|
|||||||
|
|
||||||
func getMember(userID: String) async -> Result<RoomMemberProxyProtocol, RoomProxyError>
|
func getMember(userID: String) async -> Result<RoomMemberProxyProtocol, RoomProxyError>
|
||||||
|
|
||||||
func rejectInvitation() async -> Result<Void, RoomProxyError>
|
|
||||||
|
|
||||||
func acceptInvitation() async -> Result<Void, RoomProxyError>
|
|
||||||
|
|
||||||
func invite(userID: String) async -> Result<Void, RoomProxyError>
|
func invite(userID: String) async -> Result<Void, RoomProxyError>
|
||||||
|
|
||||||
func setName(_ name: String) async -> Result<Void, RoomProxyError>
|
func setName(_ name: String) async -> Result<Void, RoomProxyError>
|
||||||
@@ -155,7 +167,7 @@ protocol RoomProxyProtocol {
|
|||||||
func clearDraft() async -> Result<Void, RoomProxyError>
|
func clearDraft() async -> Result<Void, RoomProxyError>
|
||||||
}
|
}
|
||||||
|
|
||||||
extension RoomProxyProtocol {
|
extension JoinedRoomProxyProtocol {
|
||||||
var details: RoomDetails {
|
var details: RoomDetails {
|
||||||
RoomDetails(id: id,
|
RoomDetails(id: id,
|
||||||
name: name,
|
name: name,
|
||||||
|
|||||||
+1
-1
@@ -26,7 +26,7 @@ class MockRoomTimelineController: RoomTimelineControllerProtocol {
|
|||||||
/// An array of timeline items that will be appended in order when ``simulateIncomingItems()`` is called.
|
/// An array of timeline items that will be appended in order when ``simulateIncomingItems()`` is called.
|
||||||
var incomingItems: [RoomTimelineItemProtocol] = []
|
var incomingItems: [RoomTimelineItemProtocol] = []
|
||||||
|
|
||||||
var roomProxy: RoomProxyProtocol?
|
var roomProxy: JoinedRoomProxyProtocol?
|
||||||
var roomID: String { roomProxy?.id ?? "MockRoomIdentifier" }
|
var roomID: String { roomProxy?.id ?? "MockRoomIdentifier" }
|
||||||
|
|
||||||
let callbacks = PassthroughSubject<RoomTimelineControllerCallback, Never>()
|
let callbacks = PassthroughSubject<RoomTimelineControllerCallback, Never>()
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import MatrixRustSDK
|
|||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class RoomTimelineController: RoomTimelineControllerProtocol {
|
class RoomTimelineController: RoomTimelineControllerProtocol {
|
||||||
private let roomProxy: RoomProxyProtocol
|
private let roomProxy: JoinedRoomProxyProtocol
|
||||||
private let liveTimelineProvider: RoomTimelineProviderProtocol
|
private let liveTimelineProvider: RoomTimelineProviderProtocol
|
||||||
private let timelineItemFactory: RoomTimelineItemFactoryProtocol
|
private let timelineItemFactory: RoomTimelineItemFactoryProtocol
|
||||||
private let appSettings: AppSettings
|
private let appSettings: AppSettings
|
||||||
@@ -41,7 +41,7 @@ class RoomTimelineController: RoomTimelineControllerProtocol {
|
|||||||
roomProxy.id
|
roomProxy.id
|
||||||
}
|
}
|
||||||
|
|
||||||
init(roomProxy: RoomProxyProtocol,
|
init(roomProxy: JoinedRoomProxyProtocol,
|
||||||
timelineProxy: TimelineProxyProtocol,
|
timelineProxy: TimelineProxyProtocol,
|
||||||
initialFocussedEventID: String?,
|
initialFocussedEventID: String?,
|
||||||
timelineItemFactory: RoomTimelineItemFactoryProtocol,
|
timelineItemFactory: RoomTimelineItemFactoryProtocol,
|
||||||
|
|||||||
+2
-2
@@ -17,7 +17,7 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
struct RoomTimelineControllerFactory: RoomTimelineControllerFactoryProtocol {
|
struct RoomTimelineControllerFactory: RoomTimelineControllerFactoryProtocol {
|
||||||
func buildRoomTimelineController(roomProxy: RoomProxyProtocol,
|
func buildRoomTimelineController(roomProxy: JoinedRoomProxyProtocol,
|
||||||
initialFocussedEventID: String?,
|
initialFocussedEventID: String?,
|
||||||
timelineItemFactory: RoomTimelineItemFactoryProtocol) -> RoomTimelineControllerProtocol {
|
timelineItemFactory: RoomTimelineItemFactoryProtocol) -> RoomTimelineControllerProtocol {
|
||||||
RoomTimelineController(roomProxy: roomProxy,
|
RoomTimelineController(roomProxy: roomProxy,
|
||||||
@@ -27,7 +27,7 @@ struct RoomTimelineControllerFactory: RoomTimelineControllerFactoryProtocol {
|
|||||||
appSettings: ServiceLocator.shared.settings)
|
appSettings: ServiceLocator.shared.settings)
|
||||||
}
|
}
|
||||||
|
|
||||||
func buildRoomPinnedTimelineController(roomProxy: RoomProxyProtocol,
|
func buildRoomPinnedTimelineController(roomProxy: JoinedRoomProxyProtocol,
|
||||||
timelineItemFactory: RoomTimelineItemFactoryProtocol) async -> RoomTimelineControllerProtocol? {
|
timelineItemFactory: RoomTimelineItemFactoryProtocol) async -> RoomTimelineControllerProtocol? {
|
||||||
guard let pinnedEventsTimeline = await roomProxy.pinnedEventsTimeline else {
|
guard let pinnedEventsTimeline = await roomProxy.pinnedEventsTimeline else {
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
+2
-2
@@ -18,10 +18,10 @@ import Foundation
|
|||||||
|
|
||||||
@MainActor
|
@MainActor
|
||||||
protocol RoomTimelineControllerFactoryProtocol {
|
protocol RoomTimelineControllerFactoryProtocol {
|
||||||
func buildRoomTimelineController(roomProxy: RoomProxyProtocol,
|
func buildRoomTimelineController(roomProxy: JoinedRoomProxyProtocol,
|
||||||
initialFocussedEventID: String?,
|
initialFocussedEventID: String?,
|
||||||
timelineItemFactory: RoomTimelineItemFactoryProtocol) -> RoomTimelineControllerProtocol
|
timelineItemFactory: RoomTimelineItemFactoryProtocol) -> RoomTimelineControllerProtocol
|
||||||
func buildRoomPinnedTimelineController(roomProxy: RoomProxyProtocol,
|
func buildRoomPinnedTimelineController(roomProxy: JoinedRoomProxyProtocol,
|
||||||
timelineItemFactory: RoomTimelineItemFactoryProtocol) async -> RoomTimelineControllerProtocol?
|
timelineItemFactory: RoomTimelineItemFactoryProtocol) async -> RoomTimelineControllerProtocol?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -154,7 +154,7 @@ class VoiceMessageRecorder: VoiceMessageRecorderProtocol {
|
|||||||
return .success(waveformData)
|
return .success(waveformData)
|
||||||
}
|
}
|
||||||
|
|
||||||
func sendVoiceMessage(inRoom roomProxy: RoomProxyProtocol, audioConverter: AudioConverterProtocol) async -> Result<Void, VoiceMessageRecorderError> {
|
func sendVoiceMessage(inRoom roomProxy: JoinedRoomProxyProtocol, audioConverter: AudioConverterProtocol) async -> Result<Void, VoiceMessageRecorderError> {
|
||||||
guard let url = audioRecorder.audioFileURL else {
|
guard let url = audioRecorder.audioFileURL else {
|
||||||
return .failure(VoiceMessageRecorderError.missingRecordingFile)
|
return .failure(VoiceMessageRecorderError.missingRecordingFile)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ protocol VoiceMessageRecorderProtocol {
|
|||||||
func seekPlayback(to progress: Double) async
|
func seekPlayback(to progress: Double) async
|
||||||
func deleteRecording() async
|
func deleteRecording() async
|
||||||
|
|
||||||
func sendVoiceMessage(inRoom roomProxy: RoomProxyProtocol, audioConverter: AudioConverterProtocol) async -> Result<Void, VoiceMessageRecorderError>
|
func sendVoiceMessage(inRoom roomProxy: JoinedRoomProxyProtocol, audioConverter: AudioConverterProtocol) async -> Result<Void, VoiceMessageRecorderError>
|
||||||
}
|
}
|
||||||
|
|
||||||
// sourcery: AutoMockable
|
// sourcery: AutoMockable
|
||||||
|
|||||||
@@ -248,7 +248,7 @@ class MockScreen: Identifiable {
|
|||||||
return navigationStackCoordinator
|
return navigationStackCoordinator
|
||||||
case .roomPlainNoAvatar:
|
case .roomPlainNoAvatar:
|
||||||
let navigationStackCoordinator = NavigationStackCoordinator()
|
let navigationStackCoordinator = NavigationStackCoordinator()
|
||||||
let parameters = RoomScreenCoordinatorParameters(roomProxy: RoomProxyMock(.init(name: "Some room name", avatarURL: nil)),
|
let parameters = RoomScreenCoordinatorParameters(roomProxy: JoinedRoomProxyMock(.init(name: "Some room name", avatarURL: nil)),
|
||||||
timelineController: MockRoomTimelineController(),
|
timelineController: MockRoomTimelineController(),
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||||
@@ -265,7 +265,7 @@ class MockScreen: Identifiable {
|
|||||||
let navigationStackCoordinator = NavigationStackCoordinator()
|
let navigationStackCoordinator = NavigationStackCoordinator()
|
||||||
let timelineController = MockRoomTimelineController()
|
let timelineController = MockRoomTimelineController()
|
||||||
timelineController.timelineItems = RoomTimelineItemFixtures.smallChunk
|
timelineController.timelineItems = RoomTimelineItemFixtures.smallChunk
|
||||||
let parameters = RoomScreenCoordinatorParameters(roomProxy: RoomProxyMock(.init(name: "New room", avatarURL: URL.picturesDirectory)),
|
let parameters = RoomScreenCoordinatorParameters(roomProxy: JoinedRoomProxyMock(.init(name: "New room", avatarURL: URL.picturesDirectory)),
|
||||||
timelineController: timelineController,
|
timelineController: timelineController,
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||||
@@ -282,7 +282,7 @@ class MockScreen: Identifiable {
|
|||||||
let navigationStackCoordinator = NavigationStackCoordinator()
|
let navigationStackCoordinator = NavigationStackCoordinator()
|
||||||
let timelineController = MockRoomTimelineController()
|
let timelineController = MockRoomTimelineController()
|
||||||
timelineController.timelineItems = RoomTimelineItemFixtures.default
|
timelineController.timelineItems = RoomTimelineItemFixtures.default
|
||||||
let parameters = RoomScreenCoordinatorParameters(roomProxy: RoomProxyMock(.init(name: "New room", avatarURL: URL.picturesDirectory)),
|
let parameters = RoomScreenCoordinatorParameters(roomProxy: JoinedRoomProxyMock(.init(name: "New room", avatarURL: URL.picturesDirectory)),
|
||||||
timelineController: timelineController,
|
timelineController: timelineController,
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||||
@@ -299,7 +299,7 @@ class MockScreen: Identifiable {
|
|||||||
let navigationStackCoordinator = NavigationStackCoordinator()
|
let navigationStackCoordinator = NavigationStackCoordinator()
|
||||||
let timelineController = MockRoomTimelineController()
|
let timelineController = MockRoomTimelineController()
|
||||||
timelineController.timelineItems = RoomTimelineItemFixtures.smallChunkWithReadReceipts
|
timelineController.timelineItems = RoomTimelineItemFixtures.smallChunkWithReadReceipts
|
||||||
let parameters = RoomScreenCoordinatorParameters(roomProxy: RoomProxyMock(.init(name: "New room", avatarURL: URL.picturesDirectory)),
|
let parameters = RoomScreenCoordinatorParameters(roomProxy: JoinedRoomProxyMock(.init(name: "New room", avatarURL: URL.picturesDirectory)),
|
||||||
timelineController: timelineController,
|
timelineController: timelineController,
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||||
@@ -319,7 +319,7 @@ class MockScreen: Identifiable {
|
|||||||
timelineController.timelineItems = RoomTimelineItemFixtures.smallChunk
|
timelineController.timelineItems = RoomTimelineItemFixtures.smallChunk
|
||||||
timelineController.backPaginationResponses = [RoomTimelineItemFixtures.singleMessageChunk]
|
timelineController.backPaginationResponses = [RoomTimelineItemFixtures.singleMessageChunk]
|
||||||
timelineController.incomingItems = [RoomTimelineItemFixtures.incomingMessage]
|
timelineController.incomingItems = [RoomTimelineItemFixtures.incomingMessage]
|
||||||
let parameters = RoomScreenCoordinatorParameters(roomProxy: RoomProxyMock(.init(name: "Small timeline", avatarURL: URL.picturesDirectory)),
|
let parameters = RoomScreenCoordinatorParameters(roomProxy: JoinedRoomProxyMock(.init(name: "Small timeline", avatarURL: URL.picturesDirectory)),
|
||||||
timelineController: timelineController,
|
timelineController: timelineController,
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||||
@@ -339,7 +339,7 @@ class MockScreen: Identifiable {
|
|||||||
let timelineController = MockRoomTimelineController(listenForSignals: true)
|
let timelineController = MockRoomTimelineController(listenForSignals: true)
|
||||||
timelineController.timelineItems = RoomTimelineItemFixtures.smallChunk
|
timelineController.timelineItems = RoomTimelineItemFixtures.smallChunk
|
||||||
timelineController.backPaginationResponses = [RoomTimelineItemFixtures.largeChunk]
|
timelineController.backPaginationResponses = [RoomTimelineItemFixtures.largeChunk]
|
||||||
let parameters = RoomScreenCoordinatorParameters(roomProxy: RoomProxyMock(.init(name: "Small timeline, paginating", avatarURL: URL.picturesDirectory)),
|
let parameters = RoomScreenCoordinatorParameters(roomProxy: JoinedRoomProxyMock(.init(name: "Small timeline, paginating", avatarURL: URL.picturesDirectory)),
|
||||||
timelineController: timelineController,
|
timelineController: timelineController,
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||||
@@ -359,7 +359,7 @@ class MockScreen: Identifiable {
|
|||||||
let timelineController = MockRoomTimelineController(listenForSignals: true)
|
let timelineController = MockRoomTimelineController(listenForSignals: true)
|
||||||
timelineController.timelineItems = RoomTimelineItemFixtures.largeChunk
|
timelineController.timelineItems = RoomTimelineItemFixtures.largeChunk
|
||||||
timelineController.backPaginationResponses = [RoomTimelineItemFixtures.largeChunk]
|
timelineController.backPaginationResponses = [RoomTimelineItemFixtures.largeChunk]
|
||||||
let parameters = RoomScreenCoordinatorParameters(roomProxy: RoomProxyMock(.init(name: "Large timeline", avatarURL: URL.picturesDirectory)),
|
let parameters = RoomScreenCoordinatorParameters(roomProxy: JoinedRoomProxyMock(.init(name: "Large timeline", avatarURL: URL.picturesDirectory)),
|
||||||
timelineController: timelineController,
|
timelineController: timelineController,
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||||
@@ -380,7 +380,7 @@ class MockScreen: Identifiable {
|
|||||||
timelineController.timelineItems = RoomTimelineItemFixtures.largeChunk
|
timelineController.timelineItems = RoomTimelineItemFixtures.largeChunk
|
||||||
timelineController.backPaginationResponses = [RoomTimelineItemFixtures.largeChunk]
|
timelineController.backPaginationResponses = [RoomTimelineItemFixtures.largeChunk]
|
||||||
timelineController.incomingItems = [RoomTimelineItemFixtures.incomingMessage]
|
timelineController.incomingItems = [RoomTimelineItemFixtures.incomingMessage]
|
||||||
let parameters = RoomScreenCoordinatorParameters(roomProxy: RoomProxyMock(.init(name: "Large timeline", avatarURL: URL.picturesDirectory)),
|
let parameters = RoomScreenCoordinatorParameters(roomProxy: JoinedRoomProxyMock(.init(name: "Large timeline", avatarURL: URL.picturesDirectory)),
|
||||||
timelineController: timelineController,
|
timelineController: timelineController,
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||||
@@ -400,7 +400,7 @@ class MockScreen: Identifiable {
|
|||||||
let timelineController = MockRoomTimelineController(listenForSignals: true)
|
let timelineController = MockRoomTimelineController(listenForSignals: true)
|
||||||
timelineController.timelineItems = RoomTimelineItemFixtures.largeChunk
|
timelineController.timelineItems = RoomTimelineItemFixtures.largeChunk
|
||||||
timelineController.incomingItems = [RoomTimelineItemFixtures.incomingMessage]
|
timelineController.incomingItems = [RoomTimelineItemFixtures.incomingMessage]
|
||||||
let parameters = RoomScreenCoordinatorParameters(roomProxy: RoomProxyMock(.init(name: "Large timeline", avatarURL: URL.picturesDirectory)),
|
let parameters = RoomScreenCoordinatorParameters(roomProxy: JoinedRoomProxyMock(.init(name: "Large timeline", avatarURL: URL.picturesDirectory)),
|
||||||
timelineController: timelineController,
|
timelineController: timelineController,
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||||
@@ -419,7 +419,7 @@ class MockScreen: Identifiable {
|
|||||||
|
|
||||||
let timelineController = MockRoomTimelineController()
|
let timelineController = MockRoomTimelineController()
|
||||||
timelineController.timelineItems = RoomTimelineItemFixtures.permalinkChunk
|
timelineController.timelineItems = RoomTimelineItemFixtures.permalinkChunk
|
||||||
let parameters = RoomScreenCoordinatorParameters(roomProxy: RoomProxyMock(.init(name: "Timeline highlight", avatarURL: URL.picturesDirectory)),
|
let parameters = RoomScreenCoordinatorParameters(roomProxy: JoinedRoomProxyMock(.init(name: "Timeline highlight", avatarURL: URL.picturesDirectory)),
|
||||||
timelineController: timelineController,
|
timelineController: timelineController,
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||||
@@ -452,7 +452,7 @@ class MockScreen: Identifiable {
|
|||||||
let timelineController = MockRoomTimelineController()
|
let timelineController = MockRoomTimelineController()
|
||||||
timelineController.timelineItems = RoomTimelineItemFixtures.disclosedPolls
|
timelineController.timelineItems = RoomTimelineItemFixtures.disclosedPolls
|
||||||
timelineController.incomingItems = []
|
timelineController.incomingItems = []
|
||||||
let parameters = RoomScreenCoordinatorParameters(roomProxy: RoomProxyMock(.init(name: "Polls timeline", avatarURL: URL.picturesDirectory)),
|
let parameters = RoomScreenCoordinatorParameters(roomProxy: JoinedRoomProxyMock(.init(name: "Polls timeline", avatarURL: URL.picturesDirectory)),
|
||||||
timelineController: timelineController,
|
timelineController: timelineController,
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||||
@@ -472,7 +472,7 @@ class MockScreen: Identifiable {
|
|||||||
let timelineController = MockRoomTimelineController()
|
let timelineController = MockRoomTimelineController()
|
||||||
timelineController.timelineItems = RoomTimelineItemFixtures.undisclosedPolls
|
timelineController.timelineItems = RoomTimelineItemFixtures.undisclosedPolls
|
||||||
timelineController.incomingItems = []
|
timelineController.incomingItems = []
|
||||||
let parameters = RoomScreenCoordinatorParameters(roomProxy: RoomProxyMock(.init(name: "Polls timeline", avatarURL: URL.picturesDirectory)),
|
let parameters = RoomScreenCoordinatorParameters(roomProxy: JoinedRoomProxyMock(.init(name: "Polls timeline", avatarURL: URL.picturesDirectory)),
|
||||||
timelineController: timelineController,
|
timelineController: timelineController,
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||||
@@ -492,7 +492,7 @@ class MockScreen: Identifiable {
|
|||||||
let timelineController = MockRoomTimelineController()
|
let timelineController = MockRoomTimelineController()
|
||||||
timelineController.timelineItems = RoomTimelineItemFixtures.outgoingPolls
|
timelineController.timelineItems = RoomTimelineItemFixtures.outgoingPolls
|
||||||
timelineController.incomingItems = []
|
timelineController.incomingItems = []
|
||||||
let parameters = RoomScreenCoordinatorParameters(roomProxy: RoomProxyMock(.init(name: "Polls timeline", avatarURL: URL.picturesDirectory)),
|
let parameters = RoomScreenCoordinatorParameters(roomProxy: JoinedRoomProxyMock(.init(name: "Polls timeline", avatarURL: URL.picturesDirectory)),
|
||||||
timelineController: timelineController,
|
timelineController: timelineController,
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||||
@@ -546,7 +546,7 @@ class MockScreen: Identifiable {
|
|||||||
let navigationStackCoordinator = NavigationStackCoordinator()
|
let navigationStackCoordinator = NavigationStackCoordinator()
|
||||||
let members: [RoomMemberProxyMock] = [.mockInvitedAlice, .mockBob, .mockCharlie]
|
let members: [RoomMemberProxyMock] = [.mockInvitedAlice, .mockBob, .mockCharlie]
|
||||||
let coordinator = RoomMembersListScreenCoordinator(parameters: .init(mediaProvider: MockMediaProvider(),
|
let coordinator = RoomMembersListScreenCoordinator(parameters: .init(mediaProvider: MockMediaProvider(),
|
||||||
roomProxy: RoomProxyMock(.init(name: "test", members: members)),
|
roomProxy: JoinedRoomProxyMock(.init(name: "test", members: members)),
|
||||||
userIndicatorController: ServiceLocator.shared.userIndicatorController,
|
userIndicatorController: ServiceLocator.shared.userIndicatorController,
|
||||||
analytics: ServiceLocator.shared.analytics))
|
analytics: ServiceLocator.shared.analytics))
|
||||||
navigationStackCoordinator.setRootCoordinator(coordinator)
|
navigationStackCoordinator.setRootCoordinator(coordinator)
|
||||||
@@ -554,7 +554,7 @@ class MockScreen: Identifiable {
|
|||||||
case .roomRolesAndPermissionsFlow:
|
case .roomRolesAndPermissionsFlow:
|
||||||
let navigationStackCoordinator = NavigationStackCoordinator()
|
let navigationStackCoordinator = NavigationStackCoordinator()
|
||||||
navigationStackCoordinator.setRootCoordinator(BlankFormCoordinator())
|
navigationStackCoordinator.setRootCoordinator(BlankFormCoordinator())
|
||||||
let coordinator = RoomRolesAndPermissionsFlowCoordinator(parameters: .init(roomProxy: RoomProxyMock(.init(members: .allMembersAsAdmin)),
|
let coordinator = RoomRolesAndPermissionsFlowCoordinator(parameters: .init(roomProxy: JoinedRoomProxyMock(.init(members: .allMembersAsAdmin)),
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
navigationStackCoordinator: navigationStackCoordinator,
|
navigationStackCoordinator: navigationStackCoordinator,
|
||||||
userIndicatorController: ServiceLocator.shared.userIndicatorController,
|
userIndicatorController: ServiceLocator.shared.userIndicatorController,
|
||||||
@@ -627,9 +627,9 @@ class MockScreen: Identifiable {
|
|||||||
|
|
||||||
let clientProxy = ClientProxyMock(.init(userID: "@mock:client.com", roomSummaryProvider: RoomSummaryProviderMock(.init(state: .loaded(.mockRooms)))))
|
let clientProxy = ClientProxyMock(.init(userID: "@mock:client.com", roomSummaryProvider: RoomSummaryProviderMock(.init(state: .loaded(.mockRooms)))))
|
||||||
|
|
||||||
let roomProxy = RoomProxyMock(.init(id: "whatever", name: "okay", shouldUseAutoUpdatingTimeline: true))
|
let roomProxy = JoinedRoomProxyMock(.init(id: "whatever", name: "okay", shouldUseAutoUpdatingTimeline: true))
|
||||||
|
|
||||||
clientProxy.roomForIdentifierReturnValue = roomProxy
|
clientProxy.roomForIdentifierReturnValue = .joined(roomProxy)
|
||||||
|
|
||||||
ServiceLocator.shared.settings.migratedAccounts[clientProxy.userID] = true
|
ServiceLocator.shared.settings.migratedAccounts[clientProxy.userID] = true
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ final class CompletionSuggestionServiceTests: XCTestCase {
|
|||||||
func testUserSuggestions() async throws {
|
func testUserSuggestions() async throws {
|
||||||
let alice: RoomMemberProxyMock = .mockAlice
|
let alice: RoomMemberProxyMock = .mockAlice
|
||||||
let members: [RoomMemberProxyMock] = [alice, .mockBob, .mockCharlie, .mockMe]
|
let members: [RoomMemberProxyMock] = [alice, .mockBob, .mockCharlie, .mockMe]
|
||||||
let roomProxyMock = RoomProxyMock(.init(name: "test", members: members))
|
let roomProxyMock = JoinedRoomProxyMock(.init(name: "test", members: members))
|
||||||
let service = CompletionSuggestionService(roomProxy: roomProxyMock)
|
let service = CompletionSuggestionService(roomProxy: roomProxyMock)
|
||||||
|
|
||||||
var deferred = deferFulfillment(service.suggestionsPublisher) { suggestions in
|
var deferred = deferFulfillment(service.suggestionsPublisher) { suggestions in
|
||||||
@@ -67,7 +67,7 @@ final class CompletionSuggestionServiceTests: XCTestCase {
|
|||||||
func testUserSuggestionsIncludingAllUsers() async throws {
|
func testUserSuggestionsIncludingAllUsers() async throws {
|
||||||
let alice: RoomMemberProxyMock = .mockAlice
|
let alice: RoomMemberProxyMock = .mockAlice
|
||||||
let members: [RoomMemberProxyMock] = [alice, .mockBob, .mockCharlie, .mockMe]
|
let members: [RoomMemberProxyMock] = [alice, .mockBob, .mockCharlie, .mockMe]
|
||||||
let roomProxyMock = RoomProxyMock(.init(name: "test", members: members, canUserTriggerRoomNotification: true))
|
let roomProxyMock = JoinedRoomProxyMock(.init(name: "test", members: members, canUserTriggerRoomNotification: true))
|
||||||
let service = CompletionSuggestionService(roomProxy: roomProxyMock)
|
let service = CompletionSuggestionService(roomProxy: roomProxyMock)
|
||||||
|
|
||||||
var deferred = deferFulfillment(service.suggestionsPublisher) { suggestions in
|
var deferred = deferFulfillment(service.suggestionsPublisher) { suggestions in
|
||||||
@@ -93,7 +93,7 @@ final class CompletionSuggestionServiceTests: XCTestCase {
|
|||||||
let alice: RoomMemberProxyMock = .mockAlice
|
let alice: RoomMemberProxyMock = .mockAlice
|
||||||
let bob: RoomMemberProxyMock = .mockBob
|
let bob: RoomMemberProxyMock = .mockBob
|
||||||
let members: [RoomMemberProxyMock] = [alice, bob, .mockMe]
|
let members: [RoomMemberProxyMock] = [alice, bob, .mockMe]
|
||||||
let roomProxyMock = RoomProxyMock(.init(name: "test", members: members, canUserTriggerRoomNotification: true))
|
let roomProxyMock = JoinedRoomProxyMock(.init(name: "test", members: members, canUserTriggerRoomNotification: true))
|
||||||
let service = CompletionSuggestionService(roomProxy: roomProxyMock)
|
let service = CompletionSuggestionService(roomProxy: roomProxyMock)
|
||||||
|
|
||||||
var deferred = deferFulfillment(service.suggestionsPublisher) { suggestions in
|
var deferred = deferFulfillment(service.suggestionsPublisher) { suggestions in
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ class HomeScreenViewModelTests: XCTestCase {
|
|||||||
func testLeaveRoomAlert() async throws {
|
func testLeaveRoomAlert() async throws {
|
||||||
let mockRoomId = "1"
|
let mockRoomId = "1"
|
||||||
|
|
||||||
clientProxy.roomForIdentifierClosure = { _ in RoomProxyMock(.init(id: mockRoomId, name: "Some room")) }
|
clientProxy.roomForIdentifierClosure = { _ in .joined(JoinedRoomProxyMock(.init(id: mockRoomId, name: "Some room"))) }
|
||||||
|
|
||||||
let deferred = deferFulfillment(context.$viewState) { value in
|
let deferred = deferFulfillment(context.$viewState) { value in
|
||||||
value.bindings.leaveRoomAlertItem != nil
|
value.bindings.leaveRoomAlertItem != nil
|
||||||
@@ -102,10 +102,10 @@ class HomeScreenViewModelTests: XCTestCase {
|
|||||||
|
|
||||||
func testLeaveRoomError() async throws {
|
func testLeaveRoomError() async throws {
|
||||||
let mockRoomId = "1"
|
let mockRoomId = "1"
|
||||||
let room = RoomProxyMock(.init(id: mockRoomId, name: "Some room"))
|
let room = JoinedRoomProxyMock(.init(id: mockRoomId, name: "Some room"))
|
||||||
room.leaveRoomClosure = { .failure(.sdkError(ClientProxyMockError.generic)) }
|
room.leaveRoomClosure = { .failure(.sdkError(ClientProxyMockError.generic)) }
|
||||||
|
|
||||||
clientProxy.roomForIdentifierClosure = { _ in room }
|
clientProxy.roomForIdentifierClosure = { _ in .joined(room) }
|
||||||
|
|
||||||
let deferred = deferFulfillment(context.$viewState) { value in
|
let deferred = deferFulfillment(context.$viewState) { value in
|
||||||
value.bindings.alertInfo != nil
|
value.bindings.alertInfo != nil
|
||||||
@@ -133,10 +133,10 @@ class HomeScreenViewModelTests: XCTestCase {
|
|||||||
expectation.fulfill()
|
expectation.fulfill()
|
||||||
}
|
}
|
||||||
.store(in: &cancellables)
|
.store(in: &cancellables)
|
||||||
let room = RoomProxyMock(.init(id: mockRoomId, name: "Some room"))
|
let room = JoinedRoomProxyMock(.init(id: mockRoomId, name: "Some room"))
|
||||||
room.leaveRoomClosure = { .success(()) }
|
room.leaveRoomClosure = { .success(()) }
|
||||||
|
|
||||||
clientProxy.roomForIdentifierClosure = { _ in room }
|
clientProxy.roomForIdentifierClosure = { _ in .joined(room) }
|
||||||
|
|
||||||
context.send(viewAction: .confirmLeaveRoom(roomIdentifier: mockRoomId))
|
context.send(viewAction: .confirmLeaveRoom(roomIdentifier: mockRoomId))
|
||||||
await fulfillment(of: [expectation])
|
await fulfillment(of: [expectation])
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ class InviteUsersScreenViewModelTests: XCTestCase {
|
|||||||
|
|
||||||
func testInviteButton() async throws {
|
func testInviteButton() async throws {
|
||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockAlice, .mockBob]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockAlice, .mockBob]
|
||||||
setupWithRoomType(roomType: .room(roomProxy: RoomProxyMock(.init(name: "test", members: mockedMembers))))
|
setupWithRoomType(roomType: .room(roomProxy: JoinedRoomProxyMock(.init(name: "test", members: mockedMembers))))
|
||||||
|
|
||||||
let deferredState = deferFulfillment(viewModel.context.$viewState) { state in
|
let deferredState = deferFulfillment(viewModel.context.$viewState) { state in
|
||||||
state.isUserSelected(.mockAlice)
|
state.isUserSelected(.mockAlice)
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ class MessageForwardingScreenViewModelTests: XCTestCase {
|
|||||||
cancellables.removeAll()
|
cancellables.removeAll()
|
||||||
|
|
||||||
let clientProxy = ClientProxyMock(.init())
|
let clientProxy = ClientProxyMock(.init())
|
||||||
clientProxy.roomForIdentifierClosure = { RoomProxyMock(.init(id: $0)) }
|
clientProxy.roomForIdentifierClosure = { .joined(JoinedRoomProxyMock(.init(id: $0))) }
|
||||||
|
|
||||||
viewModel = MessageForwardingScreenViewModel(forwardingItem: forwardingItem,
|
viewModel = MessageForwardingScreenViewModel(forwardingItem: forwardingItem,
|
||||||
clientProxy: clientProxy,
|
clientProxy: clientProxy,
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import XCTest
|
|||||||
class PillContextTests: XCTestCase {
|
class PillContextTests: XCTestCase {
|
||||||
func testUser() async throws {
|
func testUser() async throws {
|
||||||
let id = "@test:matrix.org"
|
let id = "@test:matrix.org"
|
||||||
let proxyMock = RoomProxyMock(.init(name: "Test"))
|
let proxyMock = JoinedRoomProxyMock(.init(name: "Test"))
|
||||||
let subject = CurrentValueSubject<[RoomMemberProxyProtocol], Never>([])
|
let subject = CurrentValueSubject<[RoomMemberProxyProtocol], Never>([])
|
||||||
proxyMock.membersPublisher = subject.asCurrentValuePublisher()
|
proxyMock.membersPublisher = subject.asCurrentValuePublisher()
|
||||||
let mock = TimelineViewModel(roomProxy: proxyMock,
|
let mock = TimelineViewModel(roomProxy: proxyMock,
|
||||||
@@ -51,7 +51,7 @@ class PillContextTests: XCTestCase {
|
|||||||
|
|
||||||
func testOwnUser() async throws {
|
func testOwnUser() async throws {
|
||||||
let id = "@test:matrix.org"
|
let id = "@test:matrix.org"
|
||||||
let proxyMock = RoomProxyMock(.init(name: "Test", ownUserID: id))
|
let proxyMock = JoinedRoomProxyMock(.init(name: "Test", ownUserID: id))
|
||||||
let subject = CurrentValueSubject<[RoomMemberProxyProtocol], Never>([])
|
let subject = CurrentValueSubject<[RoomMemberProxyProtocol], Never>([])
|
||||||
proxyMock.membersPublisher = subject.asCurrentValuePublisher()
|
proxyMock.membersPublisher = subject.asCurrentValuePublisher()
|
||||||
let mock = TimelineViewModel(roomProxy: proxyMock,
|
let mock = TimelineViewModel(roomProxy: proxyMock,
|
||||||
@@ -72,7 +72,7 @@ class PillContextTests: XCTestCase {
|
|||||||
let avatarURL = URL(string: "https://matrix.jpg")
|
let avatarURL = URL(string: "https://matrix.jpg")
|
||||||
let id = "test_room"
|
let id = "test_room"
|
||||||
let displayName = "Test"
|
let displayName = "Test"
|
||||||
let proxyMock = RoomProxyMock(.init(id: id, name: displayName, avatarURL: avatarURL))
|
let proxyMock = JoinedRoomProxyMock(.init(id: id, name: displayName, avatarURL: avatarURL))
|
||||||
let mockController = MockRoomTimelineController()
|
let mockController = MockRoomTimelineController()
|
||||||
mockController.roomProxy = proxyMock
|
mockController.roomProxy = proxyMock
|
||||||
let mock = TimelineViewModel(roomProxy: proxyMock,
|
let mock = TimelineViewModel(roomProxy: proxyMock,
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ class ReportContentScreenViewModelTests: XCTestCase {
|
|||||||
|
|
||||||
func testReportContent() async throws {
|
func testReportContent() async throws {
|
||||||
// Given the report content view for some content.
|
// Given the report content view for some content.
|
||||||
let roomProxy = RoomProxyMock(.init(name: "test"))
|
let roomProxy = JoinedRoomProxyMock(.init(name: "test"))
|
||||||
roomProxy.reportContentReasonReturnValue = .success(())
|
roomProxy.reportContentReasonReturnValue = .success(())
|
||||||
let clientProxy = ClientProxyMock(.init())
|
let clientProxy = ClientProxyMock(.init())
|
||||||
let viewModel = ReportContentScreenViewModel(eventID: eventID,
|
let viewModel = ReportContentScreenViewModel(eventID: eventID,
|
||||||
@@ -54,7 +54,7 @@ class ReportContentScreenViewModelTests: XCTestCase {
|
|||||||
|
|
||||||
func testReportIgnoringSender() async throws {
|
func testReportIgnoringSender() async throws {
|
||||||
// Given the report content view for some content.
|
// Given the report content view for some content.
|
||||||
let roomProxy = RoomProxyMock(.init(name: "test"))
|
let roomProxy = JoinedRoomProxyMock(.init(name: "test"))
|
||||||
roomProxy.reportContentReasonReturnValue = .success(())
|
roomProxy.reportContentReasonReturnValue = .success(())
|
||||||
let clientProxy = ClientProxyMock(.init())
|
let clientProxy = ClientProxyMock(.init())
|
||||||
let viewModel = ReportContentScreenViewModel(eventID: eventID,
|
let viewModel = ReportContentScreenViewModel(eventID: eventID,
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import XCTest
|
|||||||
|
|
||||||
@MainActor
|
@MainActor
|
||||||
class RoomChangePermissionsScreenViewModelTests: XCTestCase {
|
class RoomChangePermissionsScreenViewModelTests: XCTestCase {
|
||||||
var roomProxy: RoomProxyMock!
|
var roomProxy: JoinedRoomProxyMock!
|
||||||
var viewModel: RoomChangePermissionsScreenViewModelProtocol!
|
var viewModel: RoomChangePermissionsScreenViewModelProtocol!
|
||||||
|
|
||||||
var context: RoomChangePermissionsScreenViewModelType.Context {
|
var context: RoomChangePermissionsScreenViewModelType.Context {
|
||||||
@@ -28,7 +28,7 @@ class RoomChangePermissionsScreenViewModelTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override func setUp() {
|
override func setUp() {
|
||||||
roomProxy = RoomProxyMock(.init())
|
roomProxy = JoinedRoomProxyMock(.init())
|
||||||
viewModel = RoomChangePermissionsScreenViewModel(currentPermissions: .init(powerLevels: .mock),
|
viewModel = RoomChangePermissionsScreenViewModel(currentPermissions: .init(powerLevels: .mock),
|
||||||
group: .roomDetails,
|
group: .roomDetails,
|
||||||
roomProxy: roomProxy,
|
roomProxy: roomProxy,
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ import XCTest
|
|||||||
@MainActor
|
@MainActor
|
||||||
class RoomChangeRolesScreenViewModelTests: XCTestCase {
|
class RoomChangeRolesScreenViewModelTests: XCTestCase {
|
||||||
var viewModel: RoomChangeRolesScreenViewModelProtocol!
|
var viewModel: RoomChangeRolesScreenViewModelProtocol!
|
||||||
var roomProxy: RoomProxyMock!
|
var roomProxy: JoinedRoomProxyMock!
|
||||||
|
|
||||||
var context: RoomChangeRolesScreenViewModelType.Context {
|
var context: RoomChangeRolesScreenViewModelType.Context {
|
||||||
viewModel.context
|
viewModel.context
|
||||||
@@ -202,7 +202,7 @@ class RoomChangeRolesScreenViewModelTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func setupViewModel(mode: RoomMemberDetails.Role) {
|
private func setupViewModel(mode: RoomMemberDetails.Role) {
|
||||||
roomProxy = RoomProxyMock(.init(members: .allMembersAsAdmin))
|
roomProxy = JoinedRoomProxyMock(.init(members: .allMembersAsAdmin))
|
||||||
viewModel = RoomChangeRolesScreenViewModel(mode: mode,
|
viewModel = RoomChangeRolesScreenViewModel(mode: mode,
|
||||||
roomProxy: roomProxy,
|
roomProxy: roomProxy,
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
|
|||||||
@@ -117,9 +117,9 @@ class RoomDetailsEditScreenViewModelTests: XCTestCase {
|
|||||||
|
|
||||||
// MARK: - Private
|
// MARK: - Private
|
||||||
|
|
||||||
private func setupViewModel(roomProxyConfiguration: RoomProxyMockConfiguration) {
|
private func setupViewModel(roomProxyConfiguration: JoinedRoomProxyMockConfiguration) {
|
||||||
userIndicatorController = UserIndicatorControllerMock.default
|
userIndicatorController = UserIndicatorControllerMock.default
|
||||||
viewModel = .init(roomProxy: RoomProxyMock(roomProxyConfiguration),
|
viewModel = .init(roomProxy: JoinedRoomProxyMock(roomProxyConfiguration),
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
userIndicatorController: userIndicatorController)
|
userIndicatorController: userIndicatorController)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,14 +24,14 @@ import XCTest
|
|||||||
@MainActor
|
@MainActor
|
||||||
class RoomDetailsScreenViewModelTests: XCTestCase {
|
class RoomDetailsScreenViewModelTests: XCTestCase {
|
||||||
var viewModel: RoomDetailsScreenViewModel!
|
var viewModel: RoomDetailsScreenViewModel!
|
||||||
var roomProxyMock: RoomProxyMock!
|
var roomProxyMock: JoinedRoomProxyMock!
|
||||||
var notificationSettingsProxyMock: NotificationSettingsProxyMock!
|
var notificationSettingsProxyMock: NotificationSettingsProxyMock!
|
||||||
var context: RoomDetailsScreenViewModelType.Context { viewModel.context }
|
var context: RoomDetailsScreenViewModelType.Context { viewModel.context }
|
||||||
var cancellables = Set<AnyCancellable>()
|
var cancellables = Set<AnyCancellable>()
|
||||||
|
|
||||||
override func setUp() {
|
override func setUp() {
|
||||||
cancellables.removeAll()
|
cancellables.removeAll()
|
||||||
roomProxyMock = RoomProxyMock(.init(name: "Test"))
|
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test"))
|
||||||
notificationSettingsProxyMock = NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration())
|
notificationSettingsProxyMock = NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration())
|
||||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||||
clientProxy: ClientProxyMock(.init()),
|
clientProxy: ClientProxyMock(.init()),
|
||||||
@@ -48,7 +48,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
|
|
||||||
func testLeaveRoomTappedWhenPublic() async throws {
|
func testLeaveRoomTappedWhenPublic() async throws {
|
||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockBob, .mockAlice]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockBob, .mockAlice]
|
||||||
roomProxyMock = RoomProxyMock(.init(name: "Test", isPublic: true, members: mockedMembers))
|
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isPublic: true, members: mockedMembers))
|
||||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||||
clientProxy: ClientProxyMock(.init()),
|
clientProxy: ClientProxyMock(.init()),
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
@@ -71,7 +71,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
|
|
||||||
func testLeaveRoomTappedWhenRoomNotPublic() async throws {
|
func testLeaveRoomTappedWhenRoomNotPublic() async throws {
|
||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockBob, .mockAlice]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockBob, .mockAlice]
|
||||||
roomProxyMock = RoomProxyMock(.init(name: "Test", isPublic: false, members: mockedMembers))
|
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isPublic: false, members: mockedMembers))
|
||||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||||
clientProxy: ClientProxyMock(.init()),
|
clientProxy: ClientProxyMock(.init()),
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
@@ -95,7 +95,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
|
|
||||||
func testLeaveRoomTappedWithLessThanTwoMembers() async {
|
func testLeaveRoomTappedWithLessThanTwoMembers() async {
|
||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockAlice]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockAlice]
|
||||||
roomProxyMock = RoomProxyMock(.init(name: "Test", isPublic: false, members: mockedMembers))
|
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isPublic: false, members: mockedMembers))
|
||||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||||
clientProxy: ClientProxyMock(.init()),
|
clientProxy: ClientProxyMock(.init()),
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
@@ -149,7 +149,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
func testInitialDMDetailsState() async throws {
|
func testInitialDMDetailsState() async throws {
|
||||||
let recipient = RoomMemberProxyMock.mockDan
|
let recipient = RoomMemberProxyMock.mockDan
|
||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
|
||||||
roomProxyMock = RoomProxyMock(.init(name: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
|
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
|
||||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||||
clientProxy: ClientProxyMock(.init()),
|
clientProxy: ClientProxyMock(.init()),
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
@@ -173,7 +173,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
let recipient = RoomMemberProxyMock.mockDan
|
let recipient = RoomMemberProxyMock.mockDan
|
||||||
|
|
||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
|
||||||
roomProxyMock = RoomProxyMock(.init(name: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
|
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
|
||||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||||
clientProxy: ClientProxyMock(.init()),
|
clientProxy: ClientProxyMock(.init()),
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
@@ -208,7 +208,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
|
||||||
let clientProxy = ClientProxyMock(.init())
|
let clientProxy = ClientProxyMock(.init())
|
||||||
clientProxy.ignoreUserReturnValue = .failure(.sdkError(ClientProxyMockError.generic))
|
clientProxy.ignoreUserReturnValue = .failure(.sdkError(ClientProxyMockError.generic))
|
||||||
roomProxyMock = RoomProxyMock(.init(name: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
|
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
|
||||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||||
clientProxy: clientProxy,
|
clientProxy: clientProxy,
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
@@ -242,7 +242,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
func testUnignoreSuccess() async throws {
|
func testUnignoreSuccess() async throws {
|
||||||
let recipient = RoomMemberProxyMock.mockIgnored
|
let recipient = RoomMemberProxyMock.mockIgnored
|
||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
|
||||||
roomProxyMock = RoomProxyMock(.init(name: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
|
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
|
||||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||||
clientProxy: ClientProxyMock(.init()),
|
clientProxy: ClientProxyMock(.init()),
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
@@ -277,7 +277,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
|
||||||
let clientProxy = ClientProxyMock(.init())
|
let clientProxy = ClientProxyMock(.init())
|
||||||
clientProxy.unignoreUserReturnValue = .failure(.sdkError(ClientProxyMockError.generic))
|
clientProxy.unignoreUserReturnValue = .failure(.sdkError(ClientProxyMockError.generic))
|
||||||
roomProxyMock = RoomProxyMock(.init(name: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
|
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
|
||||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||||
clientProxy: clientProxy,
|
clientProxy: clientProxy,
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
@@ -310,10 +310,10 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
|
|
||||||
func testCannotInvitePeople() async {
|
func testCannotInvitePeople() async {
|
||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockAlice]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockAlice]
|
||||||
roomProxyMock = RoomProxyMock(.init(name: "Test",
|
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test",
|
||||||
isPublic: true,
|
isPublic: true,
|
||||||
members: mockedMembers,
|
members: mockedMembers,
|
||||||
canUserInvite: false))
|
canUserInvite: false))
|
||||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||||
clientProxy: ClientProxyMock(.init()),
|
clientProxy: ClientProxyMock(.init()),
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
@@ -331,7 +331,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
|
|
||||||
func testInvitePeople() async {
|
func testInvitePeople() async {
|
||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockBob, .mockAlice]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockBob, .mockAlice]
|
||||||
roomProxyMock = RoomProxyMock(.init(name: "Test", isPublic: true, members: mockedMembers))
|
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isPublic: true, members: mockedMembers))
|
||||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||||
clientProxy: ClientProxyMock(.init()),
|
clientProxy: ClientProxyMock(.init()),
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
@@ -365,7 +365,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
|
|
||||||
func testCanEditAvatar() async {
|
func testCanEditAvatar() async {
|
||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockBob, .mockAlice]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockBob, .mockAlice]
|
||||||
roomProxyMock = RoomProxyMock(.init(name: "Test", isDirect: false, isPublic: false, members: mockedMembers))
|
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: false, isPublic: false, members: mockedMembers))
|
||||||
roomProxyMock.canUserUserIDSendStateEventClosure = { _, event in
|
roomProxyMock.canUserUserIDSendStateEventClosure = { _, event in
|
||||||
.success(event == .roomAvatar)
|
.success(event == .roomAvatar)
|
||||||
}
|
}
|
||||||
@@ -389,7 +389,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
|
|
||||||
func testCanEditName() async {
|
func testCanEditName() async {
|
||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockBob, .mockAlice]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockBob, .mockAlice]
|
||||||
roomProxyMock = RoomProxyMock(.init(name: "Test", isDirect: false, isPublic: false, members: mockedMembers))
|
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: false, isPublic: false, members: mockedMembers))
|
||||||
roomProxyMock.canUserUserIDSendStateEventClosure = { _, event in
|
roomProxyMock.canUserUserIDSendStateEventClosure = { _, event in
|
||||||
.success(event == .roomName)
|
.success(event == .roomName)
|
||||||
}
|
}
|
||||||
@@ -413,7 +413,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
|
|
||||||
func testCanEditTopic() async {
|
func testCanEditTopic() async {
|
||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockBob, .mockAlice]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockBob, .mockAlice]
|
||||||
roomProxyMock = RoomProxyMock(.init(name: "Test", isDirect: false, isPublic: false, members: mockedMembers))
|
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: false, isPublic: false, members: mockedMembers))
|
||||||
roomProxyMock.canUserUserIDSendStateEventClosure = { _, event in
|
roomProxyMock.canUserUserIDSendStateEventClosure = { _, event in
|
||||||
.success(event == .roomTopic)
|
.success(event == .roomTopic)
|
||||||
}
|
}
|
||||||
@@ -437,7 +437,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
|
|
||||||
func testCannotEditRoom() async {
|
func testCannotEditRoom() async {
|
||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockBob, .mockAlice]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockBob, .mockAlice]
|
||||||
roomProxyMock = RoomProxyMock(.init(name: "Test", isDirect: false, isPublic: false, members: mockedMembers))
|
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: false, isPublic: false, members: mockedMembers))
|
||||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||||
clientProxy: ClientProxyMock(.init()),
|
clientProxy: ClientProxyMock(.init()),
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
@@ -458,7 +458,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
|
|
||||||
func testCannotEditDirectRoom() async {
|
func testCannotEditDirectRoom() async {
|
||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMeAdmin, .mockBob, .mockAlice]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockMeAdmin, .mockBob, .mockAlice]
|
||||||
roomProxyMock = RoomProxyMock(.init(name: "Test", isDirect: true, isPublic: false, members: mockedMembers))
|
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: true, isPublic: false, members: mockedMembers))
|
||||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||||
clientProxy: ClientProxyMock(.init()),
|
clientProxy: ClientProxyMock(.init()),
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
|
|||||||
@@ -171,7 +171,7 @@ class RoomFlowCoordinatorTests: XCTestCase {
|
|||||||
|
|
||||||
// "Join" the room
|
// "Join" the room
|
||||||
clientProxy.roomForIdentifierClosure = { _ in
|
clientProxy.roomForIdentifierClosure = { _ in
|
||||||
RoomProxyMock(.init())
|
.joined(JoinedRoomProxyMock(.init()))
|
||||||
}
|
}
|
||||||
|
|
||||||
try await process(route: .room(roomID: "InvitedRoomID", via: []))
|
try await process(route: .room(roomID: "InvitedRoomID", via: []))
|
||||||
@@ -201,7 +201,7 @@ class RoomFlowCoordinatorTests: XCTestCase {
|
|||||||
|
|
||||||
// "Join" the room
|
// "Join" the room
|
||||||
clientProxy.roomForIdentifierClosure = { _ in
|
clientProxy.roomForIdentifierClosure = { _ in
|
||||||
RoomProxyMock(.init())
|
.joined(JoinedRoomProxyMock(.init()))
|
||||||
}
|
}
|
||||||
|
|
||||||
try await process(route: .room(roomID: "InvitedRoomID", via: []))
|
try await process(route: .room(roomID: "InvitedRoomID", via: []))
|
||||||
|
|||||||
@@ -21,12 +21,12 @@ import XCTest
|
|||||||
@MainActor
|
@MainActor
|
||||||
class RoomMemberDetailsViewModelTests: XCTestCase {
|
class RoomMemberDetailsViewModelTests: XCTestCase {
|
||||||
var viewModel: RoomMemberDetailsScreenViewModelProtocol!
|
var viewModel: RoomMemberDetailsScreenViewModelProtocol!
|
||||||
var roomProxyMock: RoomProxyMock!
|
var roomProxyMock: JoinedRoomProxyMock!
|
||||||
var roomMemberProxyMock: RoomMemberProxyMock!
|
var roomMemberProxyMock: RoomMemberProxyMock!
|
||||||
var context: RoomMemberDetailsScreenViewModelType.Context { viewModel.context }
|
var context: RoomMemberDetailsScreenViewModelType.Context { viewModel.context }
|
||||||
|
|
||||||
override func setUp() async throws {
|
override func setUp() async throws {
|
||||||
roomProxyMock = RoomProxyMock(.init(name: ""))
|
roomProxyMock = JoinedRoomProxyMock(.init(name: ""))
|
||||||
|
|
||||||
roomProxyMock.getMemberUserIDClosure = { _ in
|
roomProxyMock.getMemberUserIDClosure = { _ in
|
||||||
.success(self.roomMemberProxyMock)
|
.success(self.roomMemberProxyMock)
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ import XCTest
|
|||||||
@MainActor
|
@MainActor
|
||||||
class RoomMembersListScreenViewModelTests: XCTestCase {
|
class RoomMembersListScreenViewModelTests: XCTestCase {
|
||||||
var viewModel: RoomMembersListScreenViewModel!
|
var viewModel: RoomMembersListScreenViewModel!
|
||||||
var roomProxy: RoomProxyMock!
|
var roomProxy: JoinedRoomProxyMock!
|
||||||
|
|
||||||
var context: RoomMembersListScreenViewModel.Context {
|
var context: RoomMembersListScreenViewModel.Context {
|
||||||
viewModel.context
|
viewModel.context
|
||||||
@@ -286,7 +286,7 @@ class RoomMembersListScreenViewModelTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func setup(with members: [RoomMemberProxyMock]) {
|
private func setup(with members: [RoomMemberProxyMock]) {
|
||||||
roomProxy = RoomProxyMock(.init(name: "test", members: members))
|
roomProxy = JoinedRoomProxyMock(.init(name: "test", members: members))
|
||||||
viewModel = .init(roomProxy: roomProxy,
|
viewModel = .init(roomProxy: roomProxy,
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
userIndicatorController: ServiceLocator.shared.userIndicatorController,
|
userIndicatorController: ServiceLocator.shared.userIndicatorController,
|
||||||
|
|||||||
@@ -22,18 +22,18 @@ import XCTest
|
|||||||
|
|
||||||
@MainActor
|
@MainActor
|
||||||
class RoomNotificationSettingsScreenViewModelTests: XCTestCase {
|
class RoomNotificationSettingsScreenViewModelTests: XCTestCase {
|
||||||
var roomProxyMock: RoomProxyMock!
|
var roomProxyMock: JoinedRoomProxyMock!
|
||||||
var notificationSettingsProxyMock: NotificationSettingsProxyMock!
|
var notificationSettingsProxyMock: NotificationSettingsProxyMock!
|
||||||
var cancellables = Set<AnyCancellable>()
|
var cancellables = Set<AnyCancellable>()
|
||||||
|
|
||||||
override func setUpWithError() throws {
|
override func setUpWithError() throws {
|
||||||
cancellables.removeAll()
|
cancellables.removeAll()
|
||||||
roomProxyMock = RoomProxyMock(.init(name: "Test"))
|
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test"))
|
||||||
notificationSettingsProxyMock = NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration())
|
notificationSettingsProxyMock = NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration())
|
||||||
}
|
}
|
||||||
|
|
||||||
func testInitialStateDefaultModeEncryptedRoom() async throws {
|
func testInitialStateDefaultModeEncryptedRoom() async throws {
|
||||||
let roomProxyMock = RoomProxyMock(.init(name: "Test", isEncrypted: true))
|
let roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isEncrypted: true))
|
||||||
let notificationSettingsProxyMock = NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration())
|
let notificationSettingsProxyMock = NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration())
|
||||||
|
|
||||||
notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: true))
|
notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: true))
|
||||||
@@ -55,7 +55,7 @@ class RoomNotificationSettingsScreenViewModelTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testInitialStateDefaultModeEncryptedRoomWithCanPushEncrypted() async throws {
|
func testInitialStateDefaultModeEncryptedRoomWithCanPushEncrypted() async throws {
|
||||||
let roomProxyMock = RoomProxyMock(.init(name: "Test", isEncrypted: true))
|
let roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isEncrypted: true))
|
||||||
let notificationSettingsProxyMock = NotificationSettingsProxyMock(with: .init(canPushEncryptedEvents: true))
|
let notificationSettingsProxyMock = NotificationSettingsProxyMock(with: .init(canPushEncryptedEvents: true))
|
||||||
|
|
||||||
notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: true))
|
notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: true))
|
||||||
@@ -77,7 +77,7 @@ class RoomNotificationSettingsScreenViewModelTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testInitialStateDefaultModeUnencryptedRoom() async throws {
|
func testInitialStateDefaultModeUnencryptedRoom() async throws {
|
||||||
let roomProxyMock = RoomProxyMock(.init(name: "Test", isEncrypted: false))
|
let roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isEncrypted: false))
|
||||||
let notificationSettingsProxyMock = NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration())
|
let notificationSettingsProxyMock = NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration())
|
||||||
|
|
||||||
notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: true))
|
notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: true))
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ import XCTest
|
|||||||
@MainActor
|
@MainActor
|
||||||
class RoomRolesAndPermissionsScreenViewModelTests: XCTestCase {
|
class RoomRolesAndPermissionsScreenViewModelTests: XCTestCase {
|
||||||
var viewModel: RoomRolesAndPermissionsScreenViewModelProtocol!
|
var viewModel: RoomRolesAndPermissionsScreenViewModelProtocol!
|
||||||
var roomProxy: RoomProxyMock!
|
var roomProxy: JoinedRoomProxyMock!
|
||||||
|
|
||||||
var context: RoomRolesAndPermissionsScreenViewModelType.Context {
|
var context: RoomRolesAndPermissionsScreenViewModelType.Context {
|
||||||
viewModel.context
|
viewModel.context
|
||||||
@@ -83,7 +83,7 @@ class RoomRolesAndPermissionsScreenViewModelTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func setupViewModel(members: [RoomMemberProxyMock]) {
|
private func setupViewModel(members: [RoomMemberProxyMock]) {
|
||||||
roomProxy = RoomProxyMock(.init(members: members))
|
roomProxy = JoinedRoomProxyMock(.init(members: members))
|
||||||
viewModel = RoomRolesAndPermissionsScreenViewModel(roomProxy: roomProxy,
|
viewModel = RoomRolesAndPermissionsScreenViewModel(roomProxy: roomProxy,
|
||||||
userIndicatorController: UserIndicatorControllerMock(),
|
userIndicatorController: UserIndicatorControllerMock(),
|
||||||
analytics: ServiceLocator.shared.analytics)
|
analytics: ServiceLocator.shared.analytics)
|
||||||
|
|||||||
@@ -34,8 +34,8 @@ class RoomScreenViewModelTests: XCTestCase {
|
|||||||
func testPinnedEventsBanner() async throws {
|
func testPinnedEventsBanner() async throws {
|
||||||
ServiceLocator.shared.settings.pinningEnabled = true
|
ServiceLocator.shared.settings.pinningEnabled = true
|
||||||
let timelineSubject = PassthroughSubject<TimelineProxyProtocol, Never>()
|
let timelineSubject = PassthroughSubject<TimelineProxyProtocol, Never>()
|
||||||
let updateSubject = PassthroughSubject<RoomProxyAction, Never>()
|
let updateSubject = PassthroughSubject<JoinedRoomProxyAction, Never>()
|
||||||
let roomProxyMock = RoomProxyMock(.init())
|
let roomProxyMock = JoinedRoomProxyMock(.init())
|
||||||
// setup a way to inject the mock of the pinned events timeline
|
// setup a way to inject the mock of the pinned events timeline
|
||||||
roomProxyMock.pinnedEventsTimelineClosure = {
|
roomProxyMock.pinnedEventsTimelineClosure = {
|
||||||
await timelineSubject.values.first()
|
await timelineSubject.values.first()
|
||||||
@@ -105,8 +105,8 @@ class RoomScreenViewModelTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testRoomInfoUpdate() async throws {
|
func testRoomInfoUpdate() async throws {
|
||||||
let updateSubject = PassthroughSubject<RoomProxyAction, Never>()
|
let updateSubject = PassthroughSubject<JoinedRoomProxyAction, Never>()
|
||||||
let roomProxyMock = RoomProxyMock(.init(id: "TestID", name: "StartingName", avatarURL: nil, hasOngoingCall: false))
|
let roomProxyMock = JoinedRoomProxyMock(.init(id: "TestID", name: "StartingName", avatarURL: nil, hasOngoingCall: false))
|
||||||
// setup the room proxy actions publisher
|
// setup the room proxy actions publisher
|
||||||
roomProxyMock.canUserJoinCallUserIDReturnValue = .success(false)
|
roomProxyMock.canUserJoinCallUserIDReturnValue = .success(false)
|
||||||
roomProxyMock.underlyingActionsPublisher = updateSubject.eraseToAnyPublisher()
|
roomProxyMock.underlyingActionsPublisher = updateSubject.eraseToAnyPublisher()
|
||||||
|
|||||||
@@ -328,10 +328,10 @@ class TimelineViewModelTests: XCTestCase {
|
|||||||
// swiftlint:enable force_unwrapping
|
// swiftlint:enable force_unwrapping
|
||||||
// swiftlint:disable:next large_tuple
|
// swiftlint:disable:next large_tuple
|
||||||
private func readReceiptsConfiguration(with items: [RoomTimelineItemProtocol]) -> (TimelineViewModel,
|
private func readReceiptsConfiguration(with items: [RoomTimelineItemProtocol]) -> (TimelineViewModel,
|
||||||
RoomProxyMock,
|
JoinedRoomProxyMock,
|
||||||
TimelineProxyMock,
|
TimelineProxyMock,
|
||||||
MockRoomTimelineController) {
|
MockRoomTimelineController) {
|
||||||
let roomProxy = RoomProxyMock(.init(name: ""))
|
let roomProxy = JoinedRoomProxyMock(.init(name: ""))
|
||||||
|
|
||||||
let timelineProxy = TimelineProxyMock()
|
let timelineProxy = TimelineProxyMock()
|
||||||
|
|
||||||
@@ -367,7 +367,7 @@ class TimelineViewModelTests: XCTestCase {
|
|||||||
// When showing them in a timeline.
|
// When showing them in a timeline.
|
||||||
let timelineController = MockRoomTimelineController()
|
let timelineController = MockRoomTimelineController()
|
||||||
timelineController.timelineItems = [message]
|
timelineController.timelineItems = [message]
|
||||||
let viewModel = TimelineViewModel(roomProxy: RoomProxyMock(.init(name: "", members: [RoomMemberProxyMock.mockAlice, RoomMemberProxyMock.mockCharlie])),
|
let viewModel = TimelineViewModel(roomProxy: JoinedRoomProxyMock(.init(name: "", members: [RoomMemberProxyMock.mockAlice, RoomMemberProxyMock.mockCharlie])),
|
||||||
timelineController: timelineController,
|
timelineController: timelineController,
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
mediaPlayerProvider: MediaPlayerProviderMock(),
|
mediaPlayerProvider: MediaPlayerProviderMock(),
|
||||||
@@ -388,9 +388,9 @@ class TimelineViewModelTests: XCTestCase {
|
|||||||
// MARK: - Pins
|
// MARK: - Pins
|
||||||
|
|
||||||
func testPinnedEvents() async throws {
|
func testPinnedEvents() async throws {
|
||||||
let roomProxyMock = RoomProxyMock(.init(name: "",
|
let roomProxyMock = JoinedRoomProxyMock(.init(name: "",
|
||||||
pinnedEventIDs: .init(["test1"])))
|
pinnedEventIDs: .init(["test1"])))
|
||||||
let actionsSubject = PassthroughSubject<RoomProxyAction, Never>()
|
let actionsSubject = PassthroughSubject<JoinedRoomProxyAction, Never>()
|
||||||
roomProxyMock.underlyingActionsPublisher = actionsSubject.eraseToAnyPublisher()
|
roomProxyMock.underlyingActionsPublisher = actionsSubject.eraseToAnyPublisher()
|
||||||
let viewModel = TimelineViewModel(roomProxy: roomProxyMock,
|
let viewModel = TimelineViewModel(roomProxy: roomProxyMock,
|
||||||
timelineController: MockRoomTimelineController(),
|
timelineController: MockRoomTimelineController(),
|
||||||
@@ -417,8 +417,8 @@ class TimelineViewModelTests: XCTestCase {
|
|||||||
|
|
||||||
func testCanUserPinEvents() async throws {
|
func testCanUserPinEvents() async throws {
|
||||||
ServiceLocator.shared.settings.pinningEnabled = true
|
ServiceLocator.shared.settings.pinningEnabled = true
|
||||||
let roomProxyMock = RoomProxyMock(.init(name: "", canUserPin: false))
|
let roomProxyMock = JoinedRoomProxyMock(.init(name: "", canUserPin: false))
|
||||||
let actionsSubject = PassthroughSubject<RoomProxyAction, Never>()
|
let actionsSubject = PassthroughSubject<JoinedRoomProxyAction, Never>()
|
||||||
roomProxyMock.underlyingActionsPublisher = actionsSubject.eraseToAnyPublisher()
|
roomProxyMock.underlyingActionsPublisher = actionsSubject.eraseToAnyPublisher()
|
||||||
let viewModel = TimelineViewModel(roomProxy: roomProxyMock,
|
let viewModel = TimelineViewModel(roomProxy: roomProxyMock,
|
||||||
timelineController: MockRoomTimelineController(),
|
timelineController: MockRoomTimelineController(),
|
||||||
@@ -445,10 +445,10 @@ class TimelineViewModelTests: XCTestCase {
|
|||||||
|
|
||||||
// MARK: - Helpers
|
// MARK: - Helpers
|
||||||
|
|
||||||
private func makeViewModel(roomProxy: RoomProxyProtocol? = nil,
|
private func makeViewModel(roomProxy: JoinedRoomProxyProtocol? = nil,
|
||||||
focussedEventID: String? = nil,
|
focussedEventID: String? = nil,
|
||||||
timelineController: RoomTimelineControllerProtocol) -> TimelineViewModel {
|
timelineController: RoomTimelineControllerProtocol) -> TimelineViewModel {
|
||||||
TimelineViewModel(roomProxy: roomProxy ?? RoomProxyMock(.init(name: "")),
|
TimelineViewModel(roomProxy: roomProxy ?? JoinedRoomProxyMock(.init(name: "")),
|
||||||
focussedEventID: focussedEventID,
|
focussedEventID: focussedEventID,
|
||||||
timelineController: timelineController,
|
timelineController: timelineController,
|
||||||
mediaProvider: MockMediaProvider(),
|
mediaProvider: MockMediaProvider(),
|
||||||
|
|||||||
@@ -204,7 +204,7 @@ class VoiceMessageRecorderTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testSendVoiceMessage_NoRecordingFile() async throws {
|
func testSendVoiceMessage_NoRecordingFile() async throws {
|
||||||
let roomProxy = RoomProxyMock()
|
let roomProxy = JoinedRoomProxyMock()
|
||||||
|
|
||||||
// If there is no recording file, an error is expected
|
// If there is no recording file, an error is expected
|
||||||
audioRecorder.audioFileURL = nil
|
audioRecorder.audioFileURL = nil
|
||||||
@@ -219,7 +219,7 @@ class VoiceMessageRecorderTests: XCTestCase {
|
|||||||
// If the converter returns an error
|
// If the converter returns an error
|
||||||
audioConverter.convertToOpusOggSourceURLDestinationURLThrowableError = AudioConverterError.conversionFailed(nil)
|
audioConverter.convertToOpusOggSourceURLDestinationURLThrowableError = AudioConverterError.conversionFailed(nil)
|
||||||
|
|
||||||
let roomProxy = RoomProxyMock()
|
let roomProxy = JoinedRoomProxyMock()
|
||||||
guard case .failure(.failedSendingVoiceMessage) = await voiceMessageRecorder.sendVoiceMessage(inRoom: roomProxy, audioConverter: audioConverter) else {
|
guard case .failure(.failedSendingVoiceMessage) = await voiceMessageRecorder.sendVoiceMessage(inRoom: roomProxy, audioConverter: audioConverter) else {
|
||||||
XCTFail("An error is expected")
|
XCTFail("An error is expected")
|
||||||
return
|
return
|
||||||
@@ -237,7 +237,7 @@ class VoiceMessageRecorderTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let timelineProxy = TimelineProxyMock()
|
let timelineProxy = TimelineProxyMock()
|
||||||
let roomProxy = RoomProxyMock()
|
let roomProxy = JoinedRoomProxyMock()
|
||||||
roomProxy.timeline = timelineProxy
|
roomProxy.timeline = timelineProxy
|
||||||
timelineProxy.sendVoiceMessageUrlAudioInfoWaveformProgressSubjectRequestHandleReturnValue = .failure(.sdkError(SDKError.generic))
|
timelineProxy.sendVoiceMessageUrlAudioInfoWaveformProgressSubjectRequestHandleReturnValue = .failure(.sdkError(SDKError.generic))
|
||||||
guard case .failure(.failedSendingVoiceMessage) = await voiceMessageRecorder.sendVoiceMessage(inRoom: roomProxy, audioConverter: audioConverter) else {
|
guard case .failure(.failedSendingVoiceMessage) = await voiceMessageRecorder.sendVoiceMessage(inRoom: roomProxy, audioConverter: audioConverter) else {
|
||||||
@@ -258,7 +258,7 @@ class VoiceMessageRecorderTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let timelineProxy = TimelineProxyMock()
|
let timelineProxy = TimelineProxyMock()
|
||||||
let roomProxy = RoomProxyMock()
|
let roomProxy = JoinedRoomProxyMock()
|
||||||
roomProxy.timeline = timelineProxy
|
roomProxy.timeline = timelineProxy
|
||||||
timelineProxy.sendVoiceMessageUrlAudioInfoWaveformProgressSubjectRequestHandleReturnValue = .failure(.sdkError(SDKError.generic))
|
timelineProxy.sendVoiceMessageUrlAudioInfoWaveformProgressSubjectRequestHandleReturnValue = .failure(.sdkError(SDKError.generic))
|
||||||
guard case .failure(.failedSendingVoiceMessage) = await voiceMessageRecorder.sendVoiceMessage(inRoom: roomProxy, audioConverter: audioConverter) else {
|
guard case .failure(.failedSendingVoiceMessage) = await voiceMessageRecorder.sendVoiceMessage(inRoom: roomProxy, audioConverter: audioConverter) else {
|
||||||
@@ -281,7 +281,7 @@ class VoiceMessageRecorderTests: XCTestCase {
|
|||||||
|
|
||||||
// If the media upload fails
|
// If the media upload fails
|
||||||
let timelineProxy = TimelineProxyMock()
|
let timelineProxy = TimelineProxyMock()
|
||||||
let roomProxy = RoomProxyMock()
|
let roomProxy = JoinedRoomProxyMock()
|
||||||
roomProxy.timeline = timelineProxy
|
roomProxy.timeline = timelineProxy
|
||||||
timelineProxy.sendVoiceMessageUrlAudioInfoWaveformProgressSubjectRequestHandleReturnValue = .failure(.sdkError(SDKError.generic))
|
timelineProxy.sendVoiceMessageUrlAudioInfoWaveformProgressSubjectRequestHandleReturnValue = .failure(.sdkError(SDKError.generic))
|
||||||
guard case .failure(.failedSendingVoiceMessage) = await voiceMessageRecorder.sendVoiceMessage(inRoom: roomProxy, audioConverter: audioConverter) else {
|
guard case .failure(.failedSendingVoiceMessage) = await voiceMessageRecorder.sendVoiceMessage(inRoom: roomProxy, audioConverter: audioConverter) else {
|
||||||
@@ -297,7 +297,7 @@ class VoiceMessageRecorderTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let timelineProxy = TimelineProxyMock()
|
let timelineProxy = TimelineProxyMock()
|
||||||
let roomProxy = RoomProxyMock()
|
let roomProxy = JoinedRoomProxyMock()
|
||||||
roomProxy.timeline = timelineProxy
|
roomProxy.timeline = timelineProxy
|
||||||
audioRecorder.currentTime = 42
|
audioRecorder.currentTime = 42
|
||||||
audioRecorder.audioFileURL = imageFileURL
|
audioRecorder.audioFileURL = imageFileURL
|
||||||
|
|||||||
Reference in New Issue
Block a user