diff --git a/ElementX.xcodeproj/project.pbxproj b/ElementX.xcodeproj/project.pbxproj index f93039b6c..c0423e990 100644 --- a/ElementX.xcodeproj/project.pbxproj +++ b/ElementX.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 63; + objectVersion = 77; objects = { /* Begin PBXAggregateTarget section */ @@ -835,7 +835,6 @@ 90733645AE76FB33DAD28C2B /* URLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE40D4A5DD857AC16EED945A /* URLSession.swift */; }; 90DF83A6A347F7EE7EDE89EE /* AttributedStringBuilderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF25E364AE85090A70AE4644 /* AttributedStringBuilderTests.swift */; }; 90EB25D13AE6EEF034BDE9D2 /* Assets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71D52BAA5BADB06E5E8C295D /* Assets.swift */; }; - 913BCABB99796F82E3D8D93D /* SpaceRoomInfoMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5530D3541C8832D858EB755A /* SpaceRoomInfoMock.swift */; }; 914BDF61447C723F104BCE33 /* SessionDirectories.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43C2067FF58B4996323EB40C /* SessionDirectories.swift */; }; 915B4CDAF220D9AEB4047D45 /* PollInteractionHandlerProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 259E5B05BDE6E20C26CF11B4 /* PollInteractionHandlerProtocol.swift */; }; 91ABC91758A6E4A5FAA2E9C4 /* ReadReceipt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 314F1C79850BE46E8ABEAFCB /* ReadReceipt.swift */; }; @@ -1401,7 +1400,6 @@ F4996C82A4B3A5FF0C8EDD03 /* RoomListFilterModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = E06AAD6D9D3F5833E7A5A2F9 /* RoomListFilterModels.swift */; }; F4C005F006FC3657B9F0A31D /* BugReportHook.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25586C0ADB814FEE9897DCAA /* BugReportHook.swift */; }; F4D5A2A8304ED61621BF02D4 /* test_audio.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 66B96842BF5F8ACA1AC84C55 /* test_audio.mp3 */; }; - F4F29FF972C0C8B38757B2DD /* SpaceServiceRoomProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5416FE342A1E6A1B6D028999 /* SpaceServiceRoomProtocol.swift */; }; F519DE17A3A0F760307B2E6D /* InviteUsersScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02D155E09BF961BBA8F85263 /* InviteUsersScreenViewModel.swift */; }; F54E2D6CAD96E1AC15BC526F /* MessageForwardingScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8E60332509665C00179ACF6 /* MessageForwardingScreenViewModel.swift */; }; F5D2270B5021D521C0D22E11 /* FlowCoordinatorProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B9FCA1CFD07B8CF9BD21266 /* FlowCoordinatorProtocol.swift */; }; @@ -1580,7 +1578,7 @@ 044E501B8331B339874D1B96 /* CompoundIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompoundIcon.swift; sourceTree = ""; }; 045253F9967A535EE5B16691 /* Label.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Label.swift; sourceTree = ""; }; 046C0D3F53B0B5EF0A1F5BEA /* RoomSummaryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomSummaryTests.swift; sourceTree = ""; }; - 048A21188AB19349D026BECD /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; + 048A21188AB19349D026BECD /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; 04BB8DDE245ED86C489BA983 /* AccessibilityIdentifiers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessibilityIdentifiers.swift; sourceTree = ""; }; 04DF593C3F7AF4B2FBAEB05D /* FileManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileManager.swift; sourceTree = ""; }; 0516C69708D5CBDE1A8E77EC /* RoomDirectorySearchProxyProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomDirectorySearchProxyProtocol.swift; sourceTree = ""; }; @@ -1664,7 +1662,7 @@ 128501375217576AF0FE3E92 /* RoomAttachmentPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomAttachmentPicker.swift; sourceTree = ""; }; 12B09A94C519227264A41208 /* RoomMembershipDetailsProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMembershipDetailsProxy.swift; sourceTree = ""; }; 12FD5280AF55AB7F50F8E47D /* preview_avatar_room.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = preview_avatar_room.jpg; sourceTree = ""; }; - 1304D9191300873EADA52D6E /* IntegrationTests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = IntegrationTests.xctestplan; sourceTree = ""; }; + 1304D9191300873EADA52D6E /* IntegrationTests.xctestplan */ = {isa = PBXFileReference; path = IntegrationTests.xctestplan; sourceTree = ""; }; 130ED565A078F7E0B59D9D25 /* UNTextInputNotificationResponse+Creator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UNTextInputNotificationResponse+Creator.swift"; sourceTree = ""; }; 136F80A613B55BDD071DCEA5 /* JoinRoomScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinRoomScreenModels.swift; sourceTree = ""; }; 13802897C7AFA360EA74C0B0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = en; path = en.lproj/Localizable.stringsdict; sourceTree = ""; }; @@ -1685,7 +1683,7 @@ 16D09C79746BDCD9173EB3A7 /* RoomDetailsEditScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomDetailsEditScreenModels.swift; sourceTree = ""; }; 16D353E10A64172D863769BF /* TombstonedAvatarImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TombstonedAvatarImage.swift; sourceTree = ""; }; 1715E3D7F53C0748AA50C91C /* PostHogAnalyticsClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostHogAnalyticsClient.swift; sourceTree = ""; }; - 174E4AEF3DED300AA81046EC /* compound-ios */ = {isa = PBXFileReference; lastKnownFileType = folder; path = "compound-ios"; sourceTree = SOURCE_ROOT; }; + 174E4AEF3DED300AA81046EC /* compound-ios */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "compound-ios"; path = "compound-ios"; sourceTree = SOURCE_ROOT; }; 17A8AA0DFA06012A9DAB951E /* TimelineProxyMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineProxyMock.swift; sourceTree = ""; }; 17BAE25A0E9E9F2F1BBA8930 /* DeactivateAccountScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeactivateAccountScreenViewModel.swift; sourceTree = ""; }; 181CF280BC8E3F335AFCB4B8 /* RemotePreferenceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemotePreferenceTests.swift; sourceTree = ""; }; @@ -1776,7 +1774,7 @@ 25E7E9B7FEAB6169D960C206 /* QRCodeLoginScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCodeLoginScreenViewModelTests.swift; sourceTree = ""; }; 25F8664F1FB95AF3C4202478 /* PollFormScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollFormScreenCoordinator.swift; sourceTree = ""; }; 260004737C573A56FA01E86E /* Encodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Encodable.swift; sourceTree = ""; }; - 267BB1D5B08A9511F894CB57 /* PreviewTests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = PreviewTests.xctestplan; sourceTree = ""; }; + 267BB1D5B08A9511F894CB57 /* PreviewTests.xctestplan */ = {isa = PBXFileReference; path = PreviewTests.xctestplan; sourceTree = ""; }; 26B0A96B8FE4849227945067 /* VoiceMessageRecorder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VoiceMessageRecorder.swift; sourceTree = ""; }; 26EAAB54C6CE91D64B69A9F8 /* AppLockServiceProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockServiceProtocol.swift; sourceTree = ""; }; 2711E5996016ABD6EAAEB58A /* LogLevel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogLevel.swift; sourceTree = ""; }; @@ -1859,7 +1857,7 @@ 358528B29FA72ACFD0D9644B /* SpacesScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpacesScreenCoordinator.swift; sourceTree = ""; }; 35A057BA9BE0F079784CD061 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 35AFCF4C05DEED04E3DB1A16 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; - 36DA824791172B9821EACBED /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; + 36DA824791172B9821EACBED /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; 36FD673E24FBFCFDF398716A /* RoomMemberProxyMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMemberProxyMock.swift; sourceTree = ""; }; 3747C96188856006F784BF49 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ko; path = ko.lproj/Localizable.stringsdict; sourceTree = ""; }; 37A63A59BFDDC494B1C20119 /* CallScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallScreenViewModel.swift; sourceTree = ""; }; @@ -1978,7 +1976,7 @@ 4A2B5274C1D3D2999D643786 /* EncryptionResetPasswordScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptionResetPasswordScreenViewModelProtocol.swift; sourceTree = ""; }; 4A5B4CD611DE7E94F5BA87B2 /* AppLockTimerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockTimerTests.swift; sourceTree = ""; }; 4AB29A2D95D3469B5F016655 /* SecureBackupControllerMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureBackupControllerMock.swift; sourceTree = ""; }; - 4B1F71AC585827E6C416C15A /* AppIcon.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; path = AppIcon.icon; sourceTree = ""; }; + 4B1F71AC585827E6C416C15A /* AppIcon.icon */ = {isa = PBXFileReference; path = AppIcon.icon; sourceTree = ""; }; 4B2B564CA6570E1487A7C7CC /* SpaceRoomListProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceRoomListProxy.swift; sourceTree = ""; }; 4B2D4EEBE8C098BBADD10939 /* SecureBackupKeyBackupScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureBackupKeyBackupScreenCoordinator.swift; sourceTree = ""; }; 4B41FABA2B0AEF4389986495 /* LoginMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginMode.swift; sourceTree = ""; }; @@ -2021,14 +2019,12 @@ 536E72DCBEEC4A1FE66CFDCE /* target.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = target.yml; sourceTree = ""; }; 53F41CEAAE2BB4E74CDC2278 /* TimelineMediaPreviewViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineMediaPreviewViewModel.swift; sourceTree = ""; }; 53FD6D3D38F556CEAA280C58 /* test_animated_image.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = test_animated_image.gif; sourceTree = ""; }; - 5416FE342A1E6A1B6D028999 /* SpaceServiceRoomProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceServiceRoomProtocol.swift; sourceTree = ""; }; 5445FCE0CE15E634FDC1A2E2 /* AnalyticsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsService.swift; sourceTree = ""; }; 5484457C81B325660901B161 /* AppLockSetupSettingsScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockSetupSettingsScreen.swift; sourceTree = ""; }; 54A5E6F398C269AD52C9AE21 /* EncryptionResetPasswordScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptionResetPasswordScreenModels.swift; sourceTree = ""; }; 54A7923F0115CF17ABC8047F /* hr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hr; path = hr.lproj/SAS.strings; sourceTree = ""; }; 54AD70D6E03D2031AE1B5A52 /* TimelineReactionsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineReactionsView.swift; sourceTree = ""; }; 54C4E7B46099462F12000C91 /* DeveloperOptionsScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeveloperOptionsScreenViewModelProtocol.swift; sourceTree = ""; }; - 5530D3541C8832D858EB755A /* SpaceRoomInfoMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceRoomInfoMock.swift; sourceTree = ""; }; 5557DDA438841AF5DC003D0B /* SpaceListScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceListScreenViewModelTests.swift; sourceTree = ""; }; 55AEEF8142DF1B59DB40FB93 /* TimelineItemSender.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineItemSender.swift; sourceTree = ""; }; 5644919DB2022397D9D5825A /* MockSoftLogoutScreenState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockSoftLogoutScreenState.swift; sourceTree = ""; }; @@ -2327,7 +2323,7 @@ 8D55702474F279D910D2D162 /* RoomStateEventStringBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomStateEventStringBuilder.swift; sourceTree = ""; }; 8D8169443E5AC5FF71BFB3DB /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = ""; }; 8DA1E8F287680C8ED25EDBAC /* NetworkMonitorMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkMonitorMock.swift; sourceTree = ""; }; - 8E088F2A1B9EC529D3221931 /* UITests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = UITests.xctestplan; sourceTree = ""; }; + 8E088F2A1B9EC529D3221931 /* UITests.xctestplan */ = {isa = PBXFileReference; path = UITests.xctestplan; sourceTree = ""; }; 8E1584F8BCF407BB94F48F04 /* EncryptionResetPasswordScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptionResetPasswordScreen.swift; sourceTree = ""; }; 8EAF4A49F3ACD8BB8B0D2371 /* ClientSDKMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClientSDKMock.swift; sourceTree = ""; }; 8F062DD2CCD95DC33528A16F /* KnockRequestProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KnockRequestProxy.swift; sourceTree = ""; }; @@ -2478,7 +2474,7 @@ AAD8234D0E9C9B12BF9F240B /* LocationAnnotation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationAnnotation.swift; sourceTree = ""; }; AB07F03461023BC39C730922 /* PhishingDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhishingDetector.swift; sourceTree = ""; }; AB26D5444A4A7E095222DE8B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.stringsdict"; sourceTree = ""; }; - AB389C38BD41EB3E47092CFB /* AccessibilityTests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = AccessibilityTests.xctestplan; sourceTree = ""; }; + AB389C38BD41EB3E47092CFB /* AccessibilityTests.xctestplan */ = {isa = PBXFileReference; path = AccessibilityTests.xctestplan; sourceTree = ""; }; ABA4CF2F5B4F68D02E412004 /* ServerConfirmationScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerConfirmationScreenViewModelProtocol.swift; sourceTree = ""; }; AC0275CEE9CA078B34028BDF /* AppLockScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockScreenViewModelTests.swift; sourceTree = ""; }; AC1DA29A5A041CC0BACA7CB0 /* MockImageCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockImageCache.swift; sourceTree = ""; }; @@ -2546,7 +2542,7 @@ B53AC78E49A297AC1D72A7CF /* AppMediator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppMediator.swift; sourceTree = ""; }; B590BD4507D4F0A377FDE01A /* LoadableAvatarImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadableAvatarImage.swift; sourceTree = ""; }; B5D829FD8958376614504B18 /* TargetConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TargetConfiguration.swift; sourceTree = ""; }; - B61C339A2FDDBD067FF6635C /* ConfettiScene.scn */ = {isa = PBXFileReference; lastKnownFileType = file.bplist; path = ConfettiScene.scn; sourceTree = ""; }; + B61C339A2FDDBD067FF6635C /* ConfettiScene.scn */ = {isa = PBXFileReference; path = ConfettiScene.scn; sourceTree = ""; }; B6404166CBF5CC88673FF9E2 /* RoomDetails.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomDetails.swift; sourceTree = ""; }; B65DDCF8E41759890355ACBC /* AuthenticationStartScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationStartScreenViewModelProtocol.swift; sourceTree = ""; }; B682FE2C44C5E163E7023B05 /* CopyTextButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CopyTextButton.swift; sourceTree = ""; }; @@ -2578,7 +2574,7 @@ BA40B98B098B6F0371B750B3 /* TemplateScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TemplateScreenModels.swift; sourceTree = ""; }; BA919F521E9F0EE3638AFC85 /* BugReportScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BugReportScreen.swift; sourceTree = ""; }; BB284643AF7AB131E307DCE0 /* AudioSessionProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioSessionProtocol.swift; sourceTree = ""; }; - BB576F4118C35E6B5124FA22 /* test_apple_image.heic */ = {isa = PBXFileReference; lastKnownFileType = file; path = test_apple_image.heic; sourceTree = ""; }; + BB576F4118C35E6B5124FA22 /* test_apple_image.heic */ = {isa = PBXFileReference; path = test_apple_image.heic; sourceTree = ""; }; BB5B00A014307CE37B2812CD /* TimelineViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineViewModelProtocol.swift; sourceTree = ""; }; BB6ED50FE104992419310EEB /* NotificationHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationHandler.swift; sourceTree = ""; }; BB8BC4C791D0E88CFCF4E5DF /* ServerSelectionScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerSelectionScreenCoordinator.swift; sourceTree = ""; }; @@ -2684,7 +2680,7 @@ CDB3227C7A74B734924942E9 /* RoomSummaryProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomSummaryProvider.swift; sourceTree = ""; }; CDE3F3911FF7CC639BDE5844 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; CEE20623EB4A9B88FB29F2BA /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/SAS.strings; sourceTree = ""; }; - CEE41494C837AA403A06A5D9 /* UnitTests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = UnitTests.xctestplan; sourceTree = ""; }; + CEE41494C837AA403A06A5D9 /* UnitTests.xctestplan */ = {isa = PBXFileReference; path = UnitTests.xctestplan; sourceTree = ""; }; CF19027E7FFA5E63D148873A /* CreateRoomScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateRoomScreenViewModel.swift; sourceTree = ""; }; CF847A34FC4C8C937CD39E08 /* LabsScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabsScreenViewModelProtocol.swift; sourceTree = ""; }; CFFA5E881D281810AB428EA3 /* RoomPowerLevelsProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomPowerLevelsProxy.swift; sourceTree = ""; }; @@ -2753,7 +2749,7 @@ DC0AEA686E425F86F6BA0404 /* UNNotification+Creator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UNNotification+Creator.swift"; sourceTree = ""; }; DC10CCC8D68B863E20660DBC /* MessageForwardingScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageForwardingScreenViewModelProtocol.swift; sourceTree = ""; }; DC528B3764E3CF7FCFEF40E7 /* PollInteractionHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollInteractionHandler.swift; sourceTree = ""; }; - DCA2D836BD10303F37FAAEED /* test_voice_message.m4a */ = {isa = PBXFileReference; lastKnownFileType = file; path = test_voice_message.m4a; sourceTree = ""; }; + DCA2D836BD10303F37FAAEED /* test_voice_message.m4a */ = {isa = PBXFileReference; path = test_voice_message.m4a; sourceTree = ""; }; DCAC01A97A43BE07B9E94E43 /* ShareExtensionModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareExtensionModels.swift; sourceTree = ""; }; DCDAB580109C09A6AA97AF7E /* PollFormScreenTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollFormScreenTests.swift; sourceTree = ""; }; DCF239C619971FDE48132550 /* SecureBackupLogoutConfirmationScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureBackupLogoutConfirmationScreenModels.swift; sourceTree = ""; }; @@ -2799,7 +2795,7 @@ E5272BC4A60B6AD7553BACA1 /* BlurHashDecode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlurHashDecode.swift; sourceTree = ""; }; E53BFB7E4F329621C844E8C3 /* AnalyticsPromptScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsPromptScreen.swift; sourceTree = ""; }; E55B5EA766E89FF1F87C3ACB /* RoomNotificationSettingsProxyProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomNotificationSettingsProxyProtocol.swift; sourceTree = ""; }; - E5E7D4EE7CA295E5039FDA21 /* portrait_test_video.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = portrait_test_video.mp4; sourceTree = ""; }; + E5E7D4EE7CA295E5039FDA21 /* portrait_test_video.mp4 */ = {isa = PBXFileReference; path = portrait_test_video.mp4; sourceTree = ""; }; E5E94DCFEE803E5ABAE8ACCE /* KeychainControllerProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainControllerProtocol.swift; sourceTree = ""; }; E5F2B6443D1ED8602F328539 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ru; path = ru.lproj/Localizable.stringsdict; sourceTree = ""; }; E5FDFAA04174CC99FB66391C /* EditRoomAddressScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditRoomAddressScreenViewModel.swift; sourceTree = ""; }; @@ -2847,7 +2843,7 @@ ED0CBEAB5F796BEFBAF7BB6A /* VideoRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoRoomTimelineView.swift; sourceTree = ""; }; ED1D792EB82506A19A72C8DE /* RoomTimelineItemProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomTimelineItemProtocol.swift; sourceTree = ""; }; ED33988DA4FD4FC666800106 /* SessionVerificationScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionVerificationScreenViewModel.swift; sourceTree = ""; }; - ED482057AE39D5C6D9C5F3D8 /* message.caf */ = {isa = PBXFileReference; lastKnownFileType = file; path = message.caf; sourceTree = ""; }; + ED482057AE39D5C6D9C5F3D8 /* message.caf */ = {isa = PBXFileReference; path = message.caf; sourceTree = ""; }; ED49073BB1C1FC649DAC2CCD /* LocationRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationRoomTimelineView.swift; sourceTree = ""; }; ED60E4D2CD678E1EBF16F77A /* BlockedUsersScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockedUsersScreen.swift; sourceTree = ""; }; EDDE826EAB1BAB80C1104980 /* SpaceFlowCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceFlowCoordinator.swift; sourceTree = ""; }; @@ -3674,7 +3670,6 @@ FC83F47D2173B7538AA72E0E /* RoomSummaryProviderMock.swift */, 4AB29A2D95D3469B5F016655 /* SecureBackupControllerMock.swift */, 248649EBA5BC33DB93698734 /* SessionVerificationControllerProxyMock.swift */, - 5530D3541C8832D858EB755A /* SpaceRoomInfoMock.swift */, 7DB2A5FF1E68BA580A20D405 /* SpaceRoomListProxyMock.swift */, EF36FC3DE25B20B7FA91F1FD /* SpaceServiceProxyMock.swift */, B0F5CC38803B8382D2C63222 /* TimelineControllerFactoryMock.swift */, @@ -5774,7 +5769,6 @@ 226A56746AD99ABDA97189E1 /* SpaceServiceProxy.swift */, C57DB49B8426AA721BF85D83 /* SpaceServiceProxyProtocol.swift */, CCAA1B97A17A750AC706B112 /* SpaceServiceRoom.swift */, - 5416FE342A1E6A1B6D028999 /* SpaceServiceRoomProtocol.swift */, ); path = Spaces; sourceTree = ""; @@ -7237,6 +7231,7 @@ EE40B0E16A55BD23ECBFFD22 /* XCRemoteSwiftPackageReference "matrix-rich-text-editor-swift" */, C89CF7729E028671C5DC461E /* XCLocalSwiftPackageReference "compound-ios" */, ); + preferredProjectObjectVersion = 77; projectDirPath = ""; projectRoot = ""; targets = ( @@ -8638,7 +8633,6 @@ E9B4742B3D6E103327466513 /* SpaceHeaderView.swift in Sources */, 36DCA11EA7320A45A4CC8D07 /* SpaceRemoveChildrenConfirmationView.swift in Sources */, 9B84F55288AB98783C11CC49 /* SpaceRoomCell.swift in Sources */, - 913BCABB99796F82E3D8D93D /* SpaceRoomInfoMock.swift in Sources */, 0DAB08C117E0391F3ADB2031 /* SpaceRoomListProxy.swift in Sources */, 9FBF0078657CA4F2A9747E98 /* SpaceRoomListProxyMock.swift in Sources */, 2EAA1B35D9CA24F090F48792 /* SpaceRoomListProxyProtocol.swift in Sources */, @@ -8651,7 +8645,6 @@ A2091F4B1332D9BF273B09D5 /* SpaceServiceProxyMock.swift in Sources */, DB5200B87C4CE9DF0024AC4E /* SpaceServiceProxyProtocol.swift in Sources */, 612196AF7826846A50C07FA6 /* SpaceServiceRoom.swift in Sources */, - F4F29FF972C0C8B38757B2DD /* SpaceServiceRoomProtocol.swift in Sources */, D0E257557DAC8A34C7B52A9F /* SpaceSettingsFlowCoordinator.swift in Sources */, 383063A7924F06D54BA9B24C /* SpaceSettingsScreen.swift in Sources */, 0EC0AF8287D6E698969FC25B /* SpacesAnnouncementSheetView.swift in Sources */, @@ -9150,7 +9143,9 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - OTHER_SWIFT_FLAGS = "-DRELEASE"; + OTHER_SWIFT_FLAGS = ( + "-DRELEASE", + ); PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.accessibility.tests"; PRODUCT_NAME = AccessibilityTests; SDKROOT = iphoneos; @@ -9169,7 +9164,9 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - OTHER_SWIFT_FLAGS = "-DDEBUG"; + OTHER_SWIFT_FLAGS = ( + "-DDEBUG", + ); PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.accessibility.tests"; PRODUCT_NAME = AccessibilityTests; SDKROOT = iphoneos; @@ -9191,7 +9188,9 @@ "@executable_path/../../Frameworks", ); MARKETING_VERSION = "$(MARKETING_VERSION)"; - OTHER_SWIFT_FLAGS = "-DIS_NSE"; + OTHER_SWIFT_FLAGS = ( + "-DIS_NSE", + ); PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.nse"; PRODUCT_DISPLAY_NAME = "$(APP_DISPLAY_NAME)"; PRODUCT_NAME = NSE; @@ -9258,7 +9257,9 @@ "$(inherited)", "-ObjC", ); - OTHER_SWIFT_FLAGS = "-DIS_MAIN_APP"; + OTHER_SWIFT_FLAGS = ( + "-DIS_MAIN_APP", + ); PILLS_UT_TYPE_IDENTIFIER = "$(BASE_BUNDLE_IDENTIFIER).pills"; PRODUCT_BUNDLE_IDENTIFIER = "$(BASE_BUNDLE_IDENTIFIER)"; PRODUCT_NAME = "$(APP_NAME)"; @@ -9288,7 +9289,9 @@ "$(inherited)", "-ObjC", ); - OTHER_SWIFT_FLAGS = "-DIS_MAIN_APP"; + OTHER_SWIFT_FLAGS = ( + "-DIS_MAIN_APP", + ); PILLS_UT_TYPE_IDENTIFIER = "$(BASE_BUNDLE_IDENTIFIER).pills"; PRODUCT_BUNDLE_IDENTIFIER = "$(BASE_BUNDLE_IDENTIFIER)"; PRODUCT_NAME = "$(APP_NAME)"; @@ -9513,7 +9516,9 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - OTHER_SWIFT_FLAGS = "-DDEBUG"; + OTHER_SWIFT_FLAGS = ( + "-DDEBUG", + ); PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.ui.tests"; PRODUCT_NAME = UITests; SDKROOT = iphoneos; @@ -9532,7 +9537,9 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - OTHER_SWIFT_FLAGS = "-DRELEASE"; + OTHER_SWIFT_FLAGS = ( + "-DRELEASE", + ); PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.ui.tests"; PRODUCT_NAME = UITests; SDKROOT = iphoneos; @@ -9554,7 +9561,9 @@ "@executable_path/../../Frameworks", ); MARKETING_VERSION = "$(MARKETING_VERSION)"; - OTHER_SWIFT_FLAGS = "-DIS_NSE"; + OTHER_SWIFT_FLAGS = ( + "-DIS_NSE", + ); PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.nse"; PRODUCT_DISPLAY_NAME = "$(APP_DISPLAY_NAME)"; PRODUCT_NAME = NSE; diff --git a/ElementX/Sources/FlowCoordinators/SpaceFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/SpaceFlowCoordinator.swift index e53659bc3..bd88a4836 100644 --- a/ElementX/Sources/FlowCoordinators/SpaceFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/SpaceFlowCoordinator.swift @@ -18,7 +18,7 @@ enum SpaceFlowCoordinatorAction { enum SpaceFlowCoordinatorEntryPoint { case space(SpaceRoomListProxyProtocol) - case joinSpace(SpaceServiceRoomProtocol) + case joinSpace(SpaceServiceRoom) var spaceID: String { switch self { @@ -301,7 +301,7 @@ class SpaceFlowCoordinator: FlowCoordinatorProtocol { guard event == .startCreateChildRoomFlow, case .space = fromState else { return nil } return .createChildRoomFlow } handler: { [weak self] context in - guard let space = context.userInfo as? SpaceServiceRoomProtocol else { fatalError("The space is missing") } + guard let space = context.userInfo as? SpaceServiceRoom else { fatalError("The space is missing") } self?.startCreateChildFlow(space: space) } @@ -561,7 +561,7 @@ class SpaceFlowCoordinator: FlowCoordinatorProtocol { flowCoordinator.start() } - private func startCreateChildFlow(space: SpaceServiceRoomProtocol) { + private func startCreateChildFlow(space: SpaceServiceRoom) { let stackCoordinator = NavigationStackCoordinator() let flowCoordinator = StartChatFlowCoordinator(entryPoint: .createRoomInSpace(space), userDiscoveryService: UserDiscoveryService(clientProxy: flowParameters.userSession.clientProxy), diff --git a/ElementX/Sources/FlowCoordinators/StartChatFlowCoordinator.swift b/ElementX/Sources/FlowCoordinators/StartChatFlowCoordinator.swift index 30ae62827..bde01566b 100644 --- a/ElementX/Sources/FlowCoordinators/StartChatFlowCoordinator.swift +++ b/ElementX/Sources/FlowCoordinators/StartChatFlowCoordinator.swift @@ -25,7 +25,7 @@ enum StartChatFlowCoordinatorAction { enum StartChatFlowCoordinatorEntryPoint { case startChat case createSpace - case createRoomInSpace(SpaceServiceRoomProtocol) + case createRoomInSpace(SpaceServiceRoom) } class StartChatFlowCoordinator: FlowCoordinatorProtocol { @@ -141,7 +141,7 @@ class StartChatFlowCoordinator: FlowCoordinatorProtocol { } stateMachine.addRoutes(event: .createRoom(isSpace: false), transitions: [.initial => .createRoom]) { [weak self] context in guard context.fromState == .initial else { return } // Required check because the event is used in another route. - guard let space = context.userInfo as? SpaceServiceRoomProtocol else { + guard let space = context.userInfo as? SpaceServiceRoom else { fatalError("This transition only supports creating a room in a pre-selected space.") } self?.presentCreateRoomScreen(isSpace: false, spaceSelectionMode: .preSelected(space), isRoot: true) diff --git a/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift b/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift index 25406e8a0..55b0643cc 100644 --- a/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift +++ b/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift @@ -16721,16 +16721,16 @@ class SpaceRoomListProxyMock: SpaceRoomListProxyProtocol, @unchecked Sendable { set(value) { underlyingId = value } } var underlyingId: String! - var spaceServiceRoomPublisher: CurrentValuePublisher { + var spaceServiceRoomPublisher: CurrentValuePublisher { get { return underlyingSpaceServiceRoomPublisher } set(value) { underlyingSpaceServiceRoomPublisher = value } } - var underlyingSpaceServiceRoomPublisher: CurrentValuePublisher! - var spaceRoomsPublisher: CurrentValuePublisher<[SpaceServiceRoomProtocol], Never> { + var underlyingSpaceServiceRoomPublisher: CurrentValuePublisher! + var spaceRoomsPublisher: CurrentValuePublisher<[SpaceServiceRoom], Never> { get { return underlyingSpaceRoomsPublisher } set(value) { underlyingSpaceRoomsPublisher = value } } - var underlyingSpaceRoomsPublisher: CurrentValuePublisher<[SpaceServiceRoomProtocol], Never>! + var underlyingSpaceRoomsPublisher: CurrentValuePublisher<[SpaceServiceRoom], Never>! var paginationStatePublisher: CurrentValuePublisher { get { return underlyingPaginationStatePublisher } set(value) { underlyingPaginationStatePublisher = value } @@ -16809,11 +16809,11 @@ class SpaceRoomListProxyMock: SpaceRoomListProxyProtocol, @unchecked Sendable { } } class SpaceServiceProxyMock: SpaceServiceProxyProtocol, @unchecked Sendable { - var topLevelSpacesPublisher: CurrentValuePublisher<[SpaceServiceRoomProtocol], Never> { + var topLevelSpacesPublisher: CurrentValuePublisher<[SpaceServiceRoom], Never> { get { return underlyingTopLevelSpacesPublisher } set(value) { underlyingTopLevelSpacesPublisher = value } } - var underlyingTopLevelSpacesPublisher: CurrentValuePublisher<[SpaceServiceRoomProtocol], Never>! + var underlyingTopLevelSpacesPublisher: CurrentValuePublisher<[SpaceServiceRoom], Never>! var spaceFilterPublisher: CurrentValuePublisher<[SpaceServiceFilter], Never> { get { return underlyingSpaceFilterPublisher } set(value) { underlyingSpaceFilterPublisher = value } @@ -16922,13 +16922,13 @@ class SpaceServiceProxyMock: SpaceServiceProxyProtocol, @unchecked Sendable { var spaceForIdentifierSpaceIDReceivedSpaceID: String? var spaceForIdentifierSpaceIDReceivedInvocations: [String] = [] - var spaceForIdentifierSpaceIDUnderlyingReturnValue: Result! - var spaceForIdentifierSpaceIDReturnValue: Result! { + var spaceForIdentifierSpaceIDUnderlyingReturnValue: Result! + var spaceForIdentifierSpaceIDReturnValue: Result! { get { if Thread.isMainThread { return spaceForIdentifierSpaceIDUnderlyingReturnValue } else { - var returnValue: Result? = nil + var returnValue: Result? = nil DispatchQueue.main.sync { returnValue = spaceForIdentifierSpaceIDUnderlyingReturnValue } @@ -16946,9 +16946,9 @@ class SpaceServiceProxyMock: SpaceServiceProxyProtocol, @unchecked Sendable { } } } - var spaceForIdentifierSpaceIDClosure: ((String) async -> Result)? + var spaceForIdentifierSpaceIDClosure: ((String) async -> Result)? - func spaceForIdentifier(spaceID: String) async -> Result { + func spaceForIdentifier(spaceID: String) async -> Result { spaceForIdentifierSpaceIDCallsCount += 1 spaceForIdentifierSpaceIDReceivedSpaceID = spaceID DispatchQueue.main.async { @@ -17062,13 +17062,13 @@ class SpaceServiceProxyMock: SpaceServiceProxyProtocol, @unchecked Sendable { var joinedParentsChildIDReceivedChildID: String? var joinedParentsChildIDReceivedInvocations: [String] = [] - var joinedParentsChildIDUnderlyingReturnValue: Result<[SpaceServiceRoomProtocol], SpaceServiceProxyError>! - var joinedParentsChildIDReturnValue: Result<[SpaceServiceRoomProtocol], SpaceServiceProxyError>! { + var joinedParentsChildIDUnderlyingReturnValue: Result<[SpaceServiceRoom], SpaceServiceProxyError>! + var joinedParentsChildIDReturnValue: Result<[SpaceServiceRoom], SpaceServiceProxyError>! { get { if Thread.isMainThread { return joinedParentsChildIDUnderlyingReturnValue } else { - var returnValue: Result<[SpaceServiceRoomProtocol], SpaceServiceProxyError>? = nil + var returnValue: Result<[SpaceServiceRoom], SpaceServiceProxyError>? = nil DispatchQueue.main.sync { returnValue = joinedParentsChildIDUnderlyingReturnValue } @@ -17086,9 +17086,9 @@ class SpaceServiceProxyMock: SpaceServiceProxyProtocol, @unchecked Sendable { } } } - var joinedParentsChildIDClosure: ((String) async -> Result<[SpaceServiceRoomProtocol], SpaceServiceProxyError>)? + var joinedParentsChildIDClosure: ((String) async -> Result<[SpaceServiceRoom], SpaceServiceProxyError>)? - func joinedParents(childID: String) async -> Result<[SpaceServiceRoomProtocol], SpaceServiceProxyError> { + func joinedParents(childID: String) async -> Result<[SpaceServiceRoom], SpaceServiceProxyError> { joinedParentsChildIDCallsCount += 1 joinedParentsChildIDReceivedChildID = childID DispatchQueue.main.async { @@ -17130,13 +17130,13 @@ class SpaceServiceProxyMock: SpaceServiceProxyProtocol, @unchecked Sendable { return editableSpacesCallsCount > 0 } - var editableSpacesUnderlyingReturnValue: [SpaceServiceRoomProtocol]! - var editableSpacesReturnValue: [SpaceServiceRoomProtocol]! { + var editableSpacesUnderlyingReturnValue: [SpaceServiceRoom]! + var editableSpacesReturnValue: [SpaceServiceRoom]! { get { if Thread.isMainThread { return editableSpacesUnderlyingReturnValue } else { - var returnValue: [SpaceServiceRoomProtocol]? = nil + var returnValue: [SpaceServiceRoom]? = nil DispatchQueue.main.sync { returnValue = editableSpacesUnderlyingReturnValue } @@ -17154,9 +17154,9 @@ class SpaceServiceProxyMock: SpaceServiceProxyProtocol, @unchecked Sendable { } } } - var editableSpacesClosure: (() async -> [SpaceServiceRoomProtocol])? + var editableSpacesClosure: (() async -> [SpaceServiceRoom])? - func editableSpaces() async -> [SpaceServiceRoomProtocol] { + func editableSpaces() async -> [SpaceServiceRoom] { editableSpacesCallsCount += 1 if let editableSpacesClosure = editableSpacesClosure { return await editableSpacesClosure() @@ -17305,49 +17305,6 @@ class SpaceServiceProxyMock: SpaceServiceProxyProtocol, @unchecked Sendable { } } } -class SpaceServiceRoomMock: SpaceServiceRoomProtocol, @unchecked Sendable { - var id: String { - get { return underlyingId } - set(value) { underlyingId = value } - } - var underlyingId: String! - var name: String { - get { return underlyingName } - set(value) { underlyingName = value } - } - var underlyingName: String! - var rawName: String? - var avatarURL: URL? - var isSpace: Bool { - get { return underlyingIsSpace } - set(value) { underlyingIsSpace = value } - } - var underlyingIsSpace: Bool! - var isDirect: Bool? - var childrenCount: Int { - get { return underlyingChildrenCount } - set(value) { underlyingChildrenCount = value } - } - var underlyingChildrenCount: Int! - var joinedMembersCount: Int { - get { return underlyingJoinedMembersCount } - set(value) { underlyingJoinedMembersCount = value } - } - var underlyingJoinedMembersCount: Int! - var heroes: [UserProfileProxy] = [] - var topic: String? - var canonicalAlias: String? - var joinRule: JoinRule? - var worldReadable: Bool? - var guestCanJoin: Bool { - get { return underlyingGuestCanJoin } - set(value) { underlyingGuestCanJoin = value } - } - var underlyingGuestCanJoin: Bool! - var state: Membership? - var via: [String] = [] - -} class StaticRoomSummaryProviderMock: StaticRoomSummaryProviderProtocol, @unchecked Sendable { var statePublisher: CurrentValuePublisher { get { return underlyingStatePublisher } diff --git a/ElementX/Sources/Mocks/RoomPreviewProxyMock.swift b/ElementX/Sources/Mocks/RoomPreviewProxyMock.swift index c385196a9..77b85fc27 100644 --- a/ElementX/Sources/Mocks/RoomPreviewProxyMock.swift +++ b/ElementX/Sources/Mocks/RoomPreviewProxyMock.swift @@ -98,7 +98,7 @@ extension RoomPreviewProxyMock { underlyingOwnMembershipDetails = roomMembershipDetails } - convenience init(spaceServiceRoom: SpaceServiceRoomProtocol) { + convenience init(spaceServiceRoom: SpaceServiceRoom) { self.init(Configuration(roomID: spaceServiceRoom.id, canonicalAlias: spaceServiceRoom.canonicalAlias ?? "", name: spaceServiceRoom.name, diff --git a/ElementX/Sources/Mocks/SDK/LeaveSpaceHandleSDKMock.swift b/ElementX/Sources/Mocks/SDK/LeaveSpaceHandleSDKMock.swift index e91eae8fb..9e4c32d52 100644 --- a/ElementX/Sources/Mocks/SDK/LeaveSpaceHandleSDKMock.swift +++ b/ElementX/Sources/Mocks/SDK/LeaveSpaceHandleSDKMock.swift @@ -23,11 +23,11 @@ extension LeaveSpaceHandleSDKMock { } extension [LeaveSpaceRoom] { - static func mockRoomsWithSpace(spaceServiceRoom: SpaceServiceRoomProtocol, isLastOwner: Bool) -> [LeaveSpaceRoom] { + static func mockRoomsWithSpace(spaceServiceRoom: SpaceServiceRoom, isLastOwner: Bool) -> [LeaveSpaceRoom] { mockRooms + mockSingleSpace(spaceServiceRoom: spaceServiceRoom, isLastOwner: isLastOwner) } - static func mockSingleSpace(spaceServiceRoom: SpaceServiceRoomProtocol, isLastOwner: Bool) -> [LeaveSpaceRoom] { + static func mockSingleSpace(spaceServiceRoom: SpaceServiceRoom, isLastOwner: Bool) -> [LeaveSpaceRoom] { [LeaveSpaceRoom(spaceRoom: SpaceRoom(id: spaceServiceRoom.id, name: spaceServiceRoom.name, avatarURL: spaceServiceRoom.avatarURL, diff --git a/ElementX/Sources/Mocks/SpaceRoomInfoMock.swift b/ElementX/Sources/Mocks/SpaceRoomInfoMock.swift deleted file mode 100644 index 71914e44f..000000000 --- a/ElementX/Sources/Mocks/SpaceRoomInfoMock.swift +++ /dev/null @@ -1,208 +0,0 @@ -// -// Copyright 2025 Element Creations Ltd. -// Copyright 2025 New Vector Ltd. -// -// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial. -// Please see LICENSE files in the repository root for full details. -// - -import Foundation -import MatrixRustSDK - -extension SpaceServiceRoomMock { - struct Configuration { - var id: String = UUID().uuidString - var name: String? - var rawName: String? - var avatarURL: URL? - - var isSpace: Bool - var isDirect: Bool? - var childrenCount = 0 - - var joinedMembersCount = 0 - var heroes: [UserProfileProxy] = [] - var topic: String? - var canonicalAlias: String? - - var joinRule: JoinRule? - var worldReadable: Bool? - var guestCanJoin = true - var state: Membership? - } - - convenience init(_ configuration: Configuration) { - self.init() - - id = configuration.id - name = configuration.name ?? configuration.id - rawName = configuration.rawName - avatarURL = configuration.avatarURL - isSpace = configuration.isSpace - isDirect = configuration.isDirect - childrenCount = configuration.childrenCount - joinedMembersCount = configuration.joinedMembersCount - heroes = configuration.heroes - topic = configuration.topic - canonicalAlias = configuration.canonicalAlias - joinRule = configuration.joinRule - worldReadable = configuration.worldReadable - guestCanJoin = configuration.guestCanJoin - state = configuration.state - } -} - -extension [SpaceServiceRoomProtocol] { - static var mockJoinedSpaces: [SpaceServiceRoomMock] { - [ - SpaceServiceRoomMock(.init(id: "space1", - name: "The Foundation", - isSpace: true, - childrenCount: 1, - joinedMembersCount: 500, - canonicalAlias: "#the-foundation:matrix.org", - state: .joined)), - SpaceServiceRoomMock(.init(id: "space2", - name: "The Second Foundation", - isSpace: true, - childrenCount: 1, - joinedMembersCount: 100, - state: .joined)), - SpaceServiceRoomMock(.init(id: "space3", - name: "The Galactic Empire", - isSpace: true, - childrenCount: 25000, - joinedMembersCount: 1_000_000_000, - canonicalAlias: "#the-galactic-empire:matrix.org", - state: .joined)), - SpaceServiceRoomMock(.init(id: "space4", - name: "The Korellians", - isSpace: true, - childrenCount: 27, - joinedMembersCount: 2_000_000, - state: .joined)), - SpaceServiceRoomMock(.init(id: "space5", - name: "The Luminists", - isSpace: true, - childrenCount: 1, - joinedMembersCount: 100_000, - state: .joined)), - SpaceServiceRoomMock(.init(id: "space6", - name: "The Anacreons", - isSpace: true, - childrenCount: 25, - joinedMembersCount: 400_000, - state: .joined)), - SpaceServiceRoomMock(.init(id: "space7", - name: "The Thespians", - isSpace: true, - childrenCount: 15, - joinedMembersCount: 300_000, - state: .joined)) - ] - } - - static var mockJoinedSpaces2: [SpaceServiceRoomMock] { - [ - SpaceServiceRoomMock(.init(id: "space1", - name: "The Foundation", - avatarURL: .mockMXCAvatar, - isSpace: true, - childrenCount: 1, - joinedMembersCount: 500, - canonicalAlias: "#the-foundation:matrix.org", - joinRule: .private, - state: .joined)), - SpaceServiceRoomMock(.init(id: "space2", - name: "The Second Foundation", - isSpace: true, - childrenCount: 1, - joinedMembersCount: 100, - state: .joined)), - SpaceServiceRoomMock(.init(id: "space3", - name: "The Galactic Empire", - isSpace: true, - childrenCount: 25000, - joinedMembersCount: 1_000_000_000, - canonicalAlias: "#the-galactic-empire:matrix.org", - state: .joined)) - ] - } - - static var mockSpaceList: [SpaceServiceRoomProtocol] { - makeSpaceRooms(isSpace: true) + makeSpaceRooms(isSpace: false) - } - - static var mockSingleRoom: [SpaceServiceRoomProtocol] { - [SpaceServiceRoomMock(.init(id: "!spaceroom:matrix.org", - name: "Management", - isSpace: false, - joinedMembersCount: 12, - topic: "This is where everything gets organised 📋.", - state: .joined))] - } - - private static func makeSpaceRooms(isSpace: Bool) -> [SpaceServiceRoomMock] { - let typeName = isSpace ? "Space" : "Room" - - return [ - SpaceServiceRoomMock(.init(id: "!\(typeName.lowercased())1:matrix.org", - name: "Company \(typeName)", - isSpace: isSpace)), - SpaceServiceRoomMock(.init(id: "!\(typeName.lowercased())2:matrix.org", - name: "Public \(typeName)", - avatarURL: .mockMXCAvatar, - isSpace: isSpace, - joinedMembersCount: 78, - topic: "Discussion on specific topic goes here.", - joinRule: .public)), - SpaceServiceRoomMock(.init(id: "!\(typeName.lowercased())3:matrix.org", - name: "Joined \(typeName)", - isSpace: isSpace, - joinedMembersCount: 123, - topic: "Discussion on specific topic goes here.", - joinRule: .restricted(rules: []), - state: .joined)) - ] - } -} - -extension SpaceServiceRoomMock { - convenience init(mode: JoinRoomScreenMode) { - var state: Membership? - var joinRule: JoinRule? - - switch mode { - case .joinable: - joinRule = .public - case .restricted: - joinRule = .restricted(rules: []) - case .inviteRequired: - joinRule = .private - case .invited: - state = .invited - joinRule = .private - case .knockable: - joinRule = .knock - case .knocked: - state = .knocked - joinRule = .knock - case .banned: - state = .banned - case .loading, .unknown, .forbidden: - break - } - - self.init(.init(id: "1", - name: "The Three-Body Problem", - avatarURL: .mockMXCAvatar, - isSpace: true, - childrenCount: 100, - joinedMembersCount: 123, - heroes: [.mockAlice, .mockBob, .mockCharlie], - topic: "“Science and technology were the only keys to opening the door to the future, and people approached science with the faith and sincerity of elementary school students.”", - canonicalAlias: "#3-body-problem:matrix.org", - joinRule: joinRule, - state: state)) - } -} diff --git a/ElementX/Sources/Mocks/SpaceRoomListProxyMock.swift b/ElementX/Sources/Mocks/SpaceRoomListProxyMock.swift index 7174cf2be..337d00523 100644 --- a/ElementX/Sources/Mocks/SpaceRoomListProxyMock.swift +++ b/ElementX/Sources/Mocks/SpaceRoomListProxyMock.swift @@ -12,15 +12,15 @@ import MatrixRustSDK extension SpaceRoomListProxyMock { class Configuration { - var spaceServiceRoom: SpaceServiceRoomProtocol - var initialSpaceRooms: [SpaceServiceRoomProtocol] + var spaceServiceRoom: SpaceServiceRoom + var initialSpaceRooms: [SpaceServiceRoom] var paginationStateSubject: CurrentValueSubject - var paginationResponses: [[SpaceServiceRoomProtocol]] + var paginationResponses: [[SpaceServiceRoom]] - init(spaceServiceRoom: SpaceServiceRoomProtocol, - initialSpaceRooms: [SpaceServiceRoomProtocol] = [], + init(spaceServiceRoom: SpaceServiceRoom, + initialSpaceRooms: [SpaceServiceRoom] = [], paginationStateSubject: CurrentValueSubject = .init(.idle(endReached: true)), - paginationResponses: [[SpaceServiceRoomProtocol]] = []) { + paginationResponses: [[SpaceServiceRoom]] = []) { self.spaceServiceRoom = spaceServiceRoom self.initialSpaceRooms = initialSpaceRooms self.paginationStateSubject = paginationStateSubject @@ -31,7 +31,7 @@ extension SpaceRoomListProxyMock { convenience init(_ configuration: Configuration) { self.init() - let spaceRoomsSubject: CurrentValueSubject<[SpaceServiceRoomProtocol], Never> = .init(configuration.initialSpaceRooms) + let spaceRoomsSubject: CurrentValueSubject<[SpaceServiceRoom], Never> = .init(configuration.initialSpaceRooms) id = configuration.spaceServiceRoom.id spaceServiceRoomPublisher = .init(configuration.spaceServiceRoom) diff --git a/ElementX/Sources/Mocks/SpaceServiceProxyMock.swift b/ElementX/Sources/Mocks/SpaceServiceProxyMock.swift index a728d15c5..5849a8ae0 100644 --- a/ElementX/Sources/Mocks/SpaceServiceProxyMock.swift +++ b/ElementX/Sources/Mocks/SpaceServiceProxyMock.swift @@ -17,10 +17,10 @@ enum SpaceServiceProxyMockError: Error { extension SpaceServiceProxyMock { struct Configuration { - var topLevelSpaces: [SpaceServiceRoomProtocol] = [] + var topLevelSpaces: [SpaceServiceRoom] = [] var spaceFilters: [SpaceServiceFilter] = [] - var joinedParentSpaces: [SpaceServiceRoomProtocol] = [] - var editableSpaces: [SpaceServiceRoomProtocol] = [] + var joinedParentSpaces: [SpaceServiceRoom] = [] + var editableSpaces: [SpaceServiceRoom] = [] var spaceRoomLists: [String: SpaceRoomListProxyMock] = [:] var leaveSpaceRooms: [LeaveSpaceRoom] = [] } @@ -55,16 +55,16 @@ extension SpaceServiceProxyMock { extension SpaceServiceProxyMock.Configuration { static var populated: SpaceServiceProxyMock.Configuration { - let spaceFilters = [SpaceServiceRoomProtocol].mockJoinedSpaces.reduce(into: [SpaceServiceFilter]()) { partialResult, spaceRoom in + let spaceFilters = [SpaceServiceRoom].mockJoinedSpaces.reduce(into: [SpaceServiceFilter]()) { partialResult, spaceRoom in partialResult.append(SpaceServiceFilter(room: spaceRoom, level: 0, descendants: .init())) partialResult.append(SpaceServiceFilter(room: spaceRoom, level: 1, descendants: .init())) } - let spaceRoomLists = [SpaceServiceRoomProtocol].mockJoinedSpaces.map { + let spaceRoomLists = [SpaceServiceRoom].mockJoinedSpaces.map { ($0.id, SpaceRoomListProxyMock(.init(spaceServiceRoom: $0, initialSpaceRooms: .mockSpaceList))) } - let subSpaceRoomLists = [SpaceServiceRoomProtocol].mockSpaceList.map { + let subSpaceRoomLists = [SpaceServiceRoom].mockSpaceList.map { ($0.id, SpaceRoomListProxyMock(.init(spaceServiceRoom: $0, initialSpaceRooms: .mockSingleRoom))) } diff --git a/ElementX/Sources/Screens/ChatsSpaceFiltersScreen/View/ChatsSpaceFilterCell.swift b/ElementX/Sources/Screens/ChatsSpaceFiltersScreen/View/ChatsSpaceFilterCell.swift index 2aea1efe6..250fb87f4 100644 --- a/ElementX/Sources/Screens/ChatsSpaceFiltersScreen/View/ChatsSpaceFilterCell.swift +++ b/ElementX/Sources/Screens/ChatsSpaceFiltersScreen/View/ChatsSpaceFilterCell.swift @@ -89,7 +89,7 @@ struct ChatsSpaceFilterCell: View { struct ChatsSpaceFilterCell_Previews: PreviewProvider, TestablePreview { static let mediaProvider = MediaProviderMock(configuration: .init()) - static let spaces = [SpaceServiceRoomProtocol].mockJoinedSpaces2 + static let spaces = [SpaceServiceRoom].mockJoinedSpaces2 static var previews: some View { VStack(spacing: 0) { diff --git a/ElementX/Sources/Screens/CreateRoomScreen/CreateRoomScreenModels.swift b/ElementX/Sources/Screens/CreateRoomScreen/CreateRoomScreenModels.swift index 4a5ec3de2..08539c4be 100644 --- a/ElementX/Sources/Screens/CreateRoomScreen/CreateRoomScreenModels.swift +++ b/ElementX/Sources/Screens/CreateRoomScreen/CreateRoomScreenModels.swift @@ -31,7 +31,7 @@ struct CreateRoomScreenViewState: BindableState { let isKnockingFeatureEnabled: Bool let canSelectSpace: Bool var aliasLocalPart: String - var editableSpaces: [SpaceServiceRoomProtocol] = [] + var editableSpaces: [SpaceServiceRoom] = [] var bindings: CreateRoomScreenViewStateBindings var avatarMediaInfo: MediaInfo? { didSet { @@ -99,7 +99,7 @@ struct CreateRoomScreenViewState: BindableState { struct CreateRoomScreenViewStateBindings { var roomTopic: String var selectedAccessType: CreateRoomScreenAccessType - var selectedSpace: SpaceServiceRoomProtocol? + var selectedSpace: SpaceServiceRoom? var showAttachmentConfirmationDialog = false var showSpaceSelectionSheet = false @@ -144,5 +144,5 @@ enum CreateRoomScreenAccessType { enum CreateRoomScreenSpaceSelectionMode { case editableSpacesList - case preSelected(SpaceServiceRoomProtocol) + case preSelected(SpaceServiceRoom) } diff --git a/ElementX/Sources/Screens/CreateRoomScreen/CreateRoomScreenViewModel.swift b/ElementX/Sources/Screens/CreateRoomScreen/CreateRoomScreenViewModel.swift index 120f97d80..880fcc4e1 100644 --- a/ElementX/Sources/Screens/CreateRoomScreen/CreateRoomScreenViewModel.swift +++ b/ElementX/Sources/Screens/CreateRoomScreen/CreateRoomScreenViewModel.swift @@ -39,7 +39,7 @@ class CreateRoomScreenViewModel: CreateRoomScreenViewModelType, CreateRoomScreen self.analytics = analytics self.userIndicatorController = userIndicatorController - var selectedSpace: SpaceServiceRoomProtocol? + var selectedSpace: SpaceServiceRoom? var canSelectSpace = false switch spaceSelectionMode { case .editableSpacesList: diff --git a/ElementX/Sources/Screens/CreateRoomScreen/View/CreateRoomScreen.swift b/ElementX/Sources/Screens/CreateRoomScreen/View/CreateRoomScreen.swift index b77db1c8e..357ccdb70 100644 --- a/ElementX/Sources/Screens/CreateRoomScreen/View/CreateRoomScreen.swift +++ b/ElementX/Sources/Screens/CreateRoomScreen/View/CreateRoomScreen.swift @@ -378,21 +378,21 @@ struct CreateRoom_Previews: PreviewProvider, TestablePreview { return viewModel }() - static let selectedSpaceViewModel = makeViewModel(selectionMode: .preSelected(SpaceServiceRoomMock(.init(name: "Awesome Space", - isSpace: true, - joinRule: .private)))) + static let selectedSpaceViewModel = makeViewModel(selectionMode: .preSelected(SpaceServiceRoom.mock(name: "Awesome Space", + isSpace: true, + joinRule: .private))) static let selectedSpaceWithListViewModel = { let viewModel = makeViewModel() - viewModel.context.selectedSpace = [SpaceServiceRoomProtocol].mockJoinedSpaces2.first + viewModel.context.selectedSpace = [SpaceServiceRoom].mockJoinedSpaces2.first return viewModel }() static let selectedSpaceWithAskToJoinViewModel = { let viewModel = makeViewModel(isKnockingEnabled: true, - selectionMode: .preSelected(SpaceServiceRoomMock(.init(name: "Awesome Space", - isSpace: true, - joinRule: .private)))) + selectionMode: .preSelected(SpaceServiceRoom.mock(name: "Awesome Space", + isSpace: true, + joinRule: .private))) viewModel.context.selectedAccessType = .askToJoinWithSpaceMembers return viewModel }() @@ -469,7 +469,7 @@ struct CreateRoom_Previews: PreviewProvider, TestablePreview { let clientProxy = ClientProxyMock(.init(userIDServerName: "example.org", userID: "@userid:example.com")) clientProxy.isAliasAvailableReturnValue = .success(isAliasAvailable) - let spaces = [SpaceServiceRoomProtocol].mockJoinedSpaces2 + let spaces = [SpaceServiceRoom].mockJoinedSpaces2 clientProxy.spaceService = SpaceServiceProxyMock(.init(editableSpaces: spaces)) let userSession = UserSessionMock(.init(clientProxy: clientProxy)) diff --git a/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenCoordinator.swift b/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenCoordinator.swift index 5140dacb1..af6015ec4 100644 --- a/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenCoordinator.swift +++ b/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenCoordinator.swift @@ -18,7 +18,7 @@ struct JoinRoomScreenCoordinatorParameters { enum JoinRoomScreenSource { case generic(roomID: String, via: [String]) - case space(SpaceServiceRoomProtocol) + case space(SpaceServiceRoom) func roomIDAndVia() -> (roomID: String, via: [String]) { switch self { diff --git a/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenViewModel.swift b/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenViewModel.swift index 8e08f7e47..2fd9ca0d5 100644 --- a/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenViewModel.swift +++ b/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenViewModel.swift @@ -200,7 +200,7 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo spaceVisibility: nil) } - private func updateSpaceRoomDetails(spaceServiceRoom: SpaceServiceRoomProtocol, inviter: RoomInviterDetails?) async { + private func updateSpaceRoomDetails(spaceServiceRoom: SpaceServiceRoom, inviter: RoomInviterDetails?) async { state.roomDetails = JoinRoomScreenRoomDetails(name: spaceServiceRoom.name, topic: spaceServiceRoom.topic, canonicalAlias: spaceServiceRoom.canonicalAlias, diff --git a/ElementX/Sources/Screens/JoinRoomScreen/View/JoinRoomScreen.swift b/ElementX/Sources/Screens/JoinRoomScreen/View/JoinRoomScreen.swift index c6108d4f6..a16c3fea8 100644 --- a/ElementX/Sources/Screens/JoinRoomScreen/View/JoinRoomScreen.swift +++ b/ElementX/Sources/Screens/JoinRoomScreen/View/JoinRoomScreen.swift @@ -447,7 +447,7 @@ struct JoinRoomScreenPreviewWrapper: Identifiable { } let source: JoinRoomScreenSource = if isSpace { - .space(SpaceServiceRoomMock(mode: mode)) + .space(SpaceServiceRoom.mock(joinRoomScreenMode: mode)) } else { .generic(roomID: "1", via: []) } diff --git a/ElementX/Sources/Screens/ManageAuthorizedSpacesScreen/ManageAuthorizedSpacesScreenModels.swift b/ElementX/Sources/Screens/ManageAuthorizedSpacesScreen/ManageAuthorizedSpacesScreenModels.swift index 0b9c2ab3f..dc012c9c8 100644 --- a/ElementX/Sources/Screens/ManageAuthorizedSpacesScreen/ManageAuthorizedSpacesScreenModels.swift +++ b/ElementX/Sources/Screens/ManageAuthorizedSpacesScreen/ManageAuthorizedSpacesScreenModels.swift @@ -37,7 +37,7 @@ enum ManageAuthorizedSpacesScreenViewAction { } struct AuthorizedSpacesSelection { - let joinedSpaces: [SpaceServiceRoomProtocol] + let joinedSpaces: [SpaceServiceRoom] let unknownSpacesIDs: [String] let initialSelectedIDs: Set let selectedIDs: PassthroughSubject, Never> = .init() diff --git a/ElementX/Sources/Screens/ManageAuthorizedSpacesScreen/View/ManageAuthorizedSpacesScreen.swift b/ElementX/Sources/Screens/ManageAuthorizedSpacesScreen/View/ManageAuthorizedSpacesScreen.swift index 7f3d10b0a..968bd2e93 100644 --- a/ElementX/Sources/Screens/ManageAuthorizedSpacesScreen/View/ManageAuthorizedSpacesScreen.swift +++ b/ElementX/Sources/Screens/ManageAuthorizedSpacesScreen/View/ManageAuthorizedSpacesScreen.swift @@ -77,7 +77,7 @@ struct ManageAuthorizedSpacesScreen: View { } } - private func avatar(space: SpaceServiceRoomProtocol) -> some View { + private func avatar(space: SpaceServiceRoom) -> some View { RoomAvatarImage(avatar: space.avatar, avatarSize: .room(on: .authorizedSpaces), mediaProvider: context.mediaProvider) diff --git a/ElementX/Sources/Screens/SecurityAndPrivacyScreen/SecurityAndPrivacyScreenModels.swift b/ElementX/Sources/Screens/SecurityAndPrivacyScreen/SecurityAndPrivacyScreenModels.swift index e591b2162..1c23321af 100644 --- a/ElementX/Sources/Screens/SecurityAndPrivacyScreen/SecurityAndPrivacyScreenModels.swift +++ b/ElementX/Sources/Screens/SecurityAndPrivacyScreen/SecurityAndPrivacyScreenModels.swift @@ -32,7 +32,7 @@ struct SecurityAndPrivacyScreenViewState: BindableState { var canEditHistoryVisibility = false /// The union of joined parent spaces and the joined spaces in the current access type - var selectableJoinedSpaces: [SpaceServiceRoomProtocol] = [] + var selectableJoinedSpaces: [SpaceServiceRoom] = [] /// The count of the intersection between the set of joined parent spaces and the set of spaces in the current access type var selectableSpacesCount: Int { @@ -118,7 +118,7 @@ struct SecurityAndPrivacyScreenViewState: BindableState { enum SpaceSelection { /// There is only one available parent space for selection and is joined by the user - case singleJoined(SpaceServiceRoomProtocol) + case singleJoined(SpaceServiceRoom) /// There is only one available space for selection and is unknown to the user case singleUnknown(id: String) /// Multiple spaces are available for selection diff --git a/ElementX/Sources/Screens/SecurityAndPrivacyScreen/SecurityAndPrivacyScreenViewModel.swift b/ElementX/Sources/Screens/SecurityAndPrivacyScreen/SecurityAndPrivacyScreenViewModel.swift index c7f1599df..37afdd932 100644 --- a/ElementX/Sources/Screens/SecurityAndPrivacyScreen/SecurityAndPrivacyScreenViewModel.swift +++ b/ElementX/Sources/Screens/SecurityAndPrivacyScreen/SecurityAndPrivacyScreenViewModel.swift @@ -305,7 +305,7 @@ class SecurityAndPrivacyScreenViewModel: SecurityAndPrivacyScreenViewModelType, } private func setupSelectableJoinedSpaces() async { - var joinedParentSpaces: [SpaceServiceRoomProtocol] = [] + var joinedParentSpaces: [SpaceServiceRoom] = [] switch await clientProxy.spaceService.joinedParents(childID: roomProxy.id) { case .success(let value): joinedParentSpaces = value @@ -313,7 +313,7 @@ class SecurityAndPrivacyScreenViewModel: SecurityAndPrivacyScreenViewModelType, break } - var nonParentJoinedSpaces: [SpaceServiceRoomProtocol] = [] + var nonParentJoinedSpaces: [SpaceServiceRoom] = [] for spaceID in state.currentSettings.accessType.spaceIDs where !joinedParentSpaces.contains(where: { $0.id == spaceID }) { if case let .success(.some(space)) = await clientProxy.spaceService.spaceForIdentifier(spaceID: spaceID) { nonParentJoinedSpaces.append(space) diff --git a/ElementX/Sources/Screens/SecurityAndPrivacyScreen/View/SecurityAndPrivacyScreen.swift b/ElementX/Sources/Screens/SecurityAndPrivacyScreen/View/SecurityAndPrivacyScreen.swift index 94119f01d..0f1a57710 100644 --- a/ElementX/Sources/Screens/SecurityAndPrivacyScreen/View/SecurityAndPrivacyScreen.swift +++ b/ElementX/Sources/Screens/SecurityAndPrivacyScreen/View/SecurityAndPrivacyScreen.swift @@ -269,7 +269,7 @@ struct SecurityAndPrivacyScreen_Previews: PreviewProvider, TestablePreview { AppSettings.resetAllSettings() let appSettings = AppSettings() appSettings.spaceSettingsEnabled = true - let space = [SpaceServiceRoomProtocol].mockSingleRoom[0] + let space = [SpaceServiceRoom].mockSingleRoom[0] return SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(isEncrypted: false, canonicalAlias: "#room:matrix.org", @@ -286,7 +286,7 @@ struct SecurityAndPrivacyScreen_Previews: PreviewProvider, TestablePreview { AppSettings.resetAllSettings() let appSettings = AppSettings() appSettings.spaceSettingsEnabled = true - let spaces = [SpaceServiceRoomProtocol].mockJoinedSpaces + let spaces = [SpaceServiceRoom].mockJoinedSpaces return SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(isEncrypted: false, canonicalAlias: "#room:matrix.org", @@ -319,7 +319,7 @@ struct SecurityAndPrivacyScreen_Previews: PreviewProvider, TestablePreview { let appSettings = AppSettings() appSettings.spaceSettingsEnabled = true appSettings.knockingEnabled = true - let space = [SpaceServiceRoomProtocol].mockSingleRoom[0] + let space = [SpaceServiceRoom].mockSingleRoom[0] return SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(isEncrypted: false, canonicalAlias: "#room:matrix.org", @@ -337,7 +337,7 @@ struct SecurityAndPrivacyScreen_Previews: PreviewProvider, TestablePreview { let appSettings = AppSettings() appSettings.spaceSettingsEnabled = true appSettings.knockingEnabled = true - let spaces = [SpaceServiceRoomProtocol].mockJoinedSpaces + let spaces = [SpaceServiceRoom].mockJoinedSpaces return SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(isEncrypted: false, canonicalAlias: "#room:matrix.org", diff --git a/ElementX/Sources/Screens/Spaces/Common/SpaceHeaderView.swift b/ElementX/Sources/Screens/Spaces/Common/SpaceHeaderView.swift index 32a5e239b..20dc8a942 100644 --- a/ElementX/Sources/Screens/Spaces/Common/SpaceHeaderView.swift +++ b/ElementX/Sources/Screens/Spaces/Common/SpaceHeaderView.swift @@ -10,7 +10,7 @@ import Compound import SwiftUI struct SpaceHeaderView: View { - let spaceServiceRoom: SpaceServiceRoomProtocol + let spaceServiceRoom: SpaceServiceRoom let mediaProvider: MediaProviderProtocol? @State private var isPresentingTopic = false @@ -112,36 +112,36 @@ struct SpaceHeaderView_Previews: PreviewProvider, TestablePreview { } } - static func makeSpaceRooms() -> [SpaceServiceRoomMock] { + static func makeSpaceRooms() -> [SpaceServiceRoom] { [ - SpaceServiceRoomMock(.init(id: "!space1:matrix.org", - name: "Company Space", - isSpace: true, - childrenCount: 10, - joinedMembersCount: 50)), - SpaceServiceRoomMock(.init(id: "!space2:matrix.org", - name: "Community Space", - avatarURL: .mockMXCAvatar, - isSpace: true, - childrenCount: 20, - joinedMembersCount: 78, - topic: "Description of the space goes right here.", - canonicalAlias: "#space:matrix.org", - joinRule: .public)), - SpaceServiceRoomMock(.init(id: "!space3:matrix.org", - name: "Subspace", - isSpace: true, - childrenCount: 30, - joinedMembersCount: 123, - heroes: [.mockDan, .mockBob, .mockCharlie, .mockVerbose], - topic: ["Description of the space goes right here.", - "Lorem ipsum dolor sit amet consectetur.", - "Leo viverra morbi habitant in.", - "Sem amet enim habitant nibh augue mauris.", - "Interdum mauris ultrices tincidunt proin morbi erat aenean risus nibh.", - "Diam amet sit fermentum vulputate faucibus."].joined(separator: " "), - canonicalAlias: "#subspace:matrix.org", - joinRule: .knockRestricted(rules: [.roomMembership(roomId: "")]))) + SpaceServiceRoom.mock(id: "!space1:matrix.org", + name: "Company Space", + isSpace: true, + childrenCount: 10, + joinedMembersCount: 50), + SpaceServiceRoom.mock(id: "!space2:matrix.org", + name: "Community Space", + avatarURL: .mockMXCAvatar, + isSpace: true, + childrenCount: 20, + joinedMembersCount: 78, + topic: "Description of the space goes right here.", + canonicalAlias: "#space:matrix.org", + joinRule: .public), + SpaceServiceRoom.mock(id: "!space3:matrix.org", + name: "Subspace", + isSpace: true, + childrenCount: 30, + joinedMembersCount: 123, + heroes: [.mockDan, .mockBob, .mockCharlie, .mockVerbose], + topic: ["Description of the space goes right here.", + "Lorem ipsum dolor sit amet consectetur.", + "Leo viverra morbi habitant in.", + "Sem amet enim habitant nibh augue mauris.", + "Interdum mauris ultrices tincidunt proin morbi erat aenean risus nibh.", + "Diam amet sit fermentum vulputate faucibus."].joined(separator: " "), + canonicalAlias: "#subspace:matrix.org", + joinRule: .knockRestricted(rules: [.roomMembership(roomId: "")])) ] } } diff --git a/ElementX/Sources/Screens/Spaces/Common/SpaceRoomCell.swift b/ElementX/Sources/Screens/Spaces/Common/SpaceRoomCell.swift index b6e101290..eba106bd0 100644 --- a/ElementX/Sources/Screens/Spaces/Common/SpaceRoomCell.swift +++ b/ElementX/Sources/Screens/Spaces/Common/SpaceRoomCell.swift @@ -14,12 +14,12 @@ struct SpaceRoomCell: View { @Environment(\.dynamicTypeSize) private var dynamicTypeSize @Environment(\.editMode) private var editMode - let spaceServiceRoom: SpaceServiceRoomProtocol + let spaceServiceRoom: SpaceServiceRoom let isSelected: Bool var isJoining = false let mediaProvider: MediaProviderProtocol! - enum Action { case select(SpaceServiceRoomProtocol), join(SpaceServiceRoomProtocol) } + enum Action { case select(SpaceServiceRoom), join(SpaceServiceRoom) } let action: (Action) -> Void private let verticalInsets = 12.0 @@ -179,7 +179,7 @@ struct SpaceRoomCellButtonStyle: ButtonStyle { struct SpaceRoomCell_Previews: PreviewProvider, TestablePreview { static let mediaProvider = MediaProviderMock(configuration: .init()) - static let spaces = [SpaceServiceRoomProtocol].mockSpaceList + static let spaces = [SpaceServiceRoom].mockSpaceList static var previews: some View { ScrollView { @@ -190,21 +190,21 @@ struct SpaceRoomCell_Previews: PreviewProvider, TestablePreview { mediaProvider: mediaProvider) { _ in } } - SpaceRoomCell(spaceServiceRoom: SpaceServiceRoomMock(.init(id: "Space being joined", isSpace: true)), + SpaceRoomCell(spaceServiceRoom: SpaceServiceRoom.mock(id: "Space being joined", isSpace: true), isSelected: false, isJoining: true, mediaProvider: mediaProvider) { _ in } - SpaceRoomCell(spaceServiceRoom: SpaceServiceRoomMock(.init(id: "Room being joined", isSpace: false)), + SpaceRoomCell(spaceServiceRoom: SpaceServiceRoom.mock(id: "Room being joined", isSpace: false), isSelected: false, isJoining: true, mediaProvider: mediaProvider) { _ in } - SpaceRoomCell(spaceServiceRoom: SpaceServiceRoomMock(.init(id: "Selected", isSpace: false, state: .joined)), + SpaceRoomCell(spaceServiceRoom: SpaceServiceRoom.mock(id: "Selected", isSpace: false, state: .joined), isSelected: true, isJoining: false, mediaProvider: mediaProvider) { _ in } .environment(\.editMode, .constant(.active)) - SpaceRoomCell(spaceServiceRoom: SpaceServiceRoomMock(.init(id: "Unselected", isSpace: false, state: .joined)), + SpaceRoomCell(spaceServiceRoom: SpaceServiceRoom.mock(id: "Unselected", isSpace: false, state: .joined), isSelected: false, isJoining: false, mediaProvider: mediaProvider) { _ in } diff --git a/ElementX/Sources/Screens/Spaces/LeaveSpace/View/LeaveSpaceRoomDetailsCell.swift b/ElementX/Sources/Screens/Spaces/LeaveSpace/View/LeaveSpaceRoomDetailsCell.swift index 4bee8ce58..43744b61d 100644 --- a/ElementX/Sources/Screens/Spaces/LeaveSpace/View/LeaveSpaceRoomDetailsCell.swift +++ b/ElementX/Sources/Screens/Spaces/LeaveSpace/View/LeaveSpaceRoomDetailsCell.swift @@ -91,45 +91,45 @@ struct LeaveSpaceRoomDetailsCell: View { struct LeaveSpaceRoomDetailsCell_Previews: PreviewProvider, TestablePreview { static var previews: some View { VStack(spacing: 0) { - LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoomMock(.init(id: "1", - name: "Space", - isSpace: true)), + LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoom.mock(id: "1", + name: "Space", + isSpace: true), isLastOwner: false, areCreatorsPrivileged: false, isSelected: true), mediaProvider: MediaProviderMock(configuration: .init())) { } - LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoomMock(.init(id: "2", - name: "My Space", - isSpace: true)), + LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoom.mock(id: "2", + name: "My Space", + isSpace: true), isLastOwner: true, areCreatorsPrivileged: false, isSelected: false), mediaProvider: MediaProviderMock(configuration: .init())) { } - LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoomMock(.init(id: "2", - name: "My Space", - isSpace: true)), + LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoom.mock(id: "2", + name: "My Space", + isSpace: true), isLastOwner: true, areCreatorsPrivileged: false, isSelected: false), hideSelection: true, mediaProvider: MediaProviderMock(configuration: .init())) { } - LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoomMock(.init(id: "3", - name: "Room", - isSpace: false)), + LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoom.mock(id: "3", + name: "Room", + isSpace: false), isLastOwner: false, areCreatorsPrivileged: false, isSelected: true), mediaProvider: MediaProviderMock(configuration: .init())) { } - LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoomMock(.init(id: "4", - name: "My Room", - isSpace: false)), + LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoom.mock(id: "4", + name: "My Room", + isSpace: false), isLastOwner: true, areCreatorsPrivileged: false, isSelected: false), mediaProvider: MediaProviderMock(configuration: .init())) { } - LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoomMock(.init(id: "4", - name: "My Room", - isSpace: false)), + LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoom.mock(id: "4", + name: "My Room", + isSpace: false), isLastOwner: true, areCreatorsPrivileged: false, isSelected: false), diff --git a/ElementX/Sources/Screens/Spaces/LeaveSpace/View/LeaveSpaceView.swift b/ElementX/Sources/Screens/Spaces/LeaveSpace/View/LeaveSpaceView.swift index b89048a45..5f2ba93e4 100644 --- a/ElementX/Sources/Screens/Spaces/LeaveSpace/View/LeaveSpaceView.swift +++ b/ElementX/Sources/Screens/Spaces/LeaveSpace/View/LeaveSpaceView.swift @@ -136,14 +136,14 @@ struct LeaveSpaceView_Previews: PreviewProvider, TestablePreview { .previewDisplayName("Last Space Admin") } - static let spaceServiceRoom = SpaceServiceRoomMock(.init(id: "!eng-space:matrix.org", - name: "Engineering Team", - isSpace: true, - childrenCount: 30, - joinedMembersCount: 76, - heroes: [.mockDan, .mockBob, .mockCharlie, .mockVerbose], - topic: "Description of the space goes right here. Lorem ipsum dolor sit amet consectetur. Leo viverra morbi habitant in.", - joinRule: .knockRestricted(rules: [.roomMembership(roomId: "")]))) + static let spaceServiceRoom = SpaceServiceRoom.mock(id: "!eng-space:matrix.org", + name: "Engineering Team", + isSpace: true, + childrenCount: 30, + joinedMembersCount: 76, + heroes: [.mockDan, .mockBob, .mockCharlie, .mockVerbose], + topic: "Description of the space goes right here. Lorem ipsum dolor sit amet consectetur. Leo viverra morbi habitant in.", + joinRule: .knockRestricted(rules: [.roomMembership(roomId: "")])) static func makeViewModel(mode: LeaveSpaceHandleProxy.Mode) -> LeaveSpaceViewModel { let rooms: [LeaveSpaceRoom] = switch mode { diff --git a/ElementX/Sources/Screens/Spaces/SpaceAddRoomsScreen/View/SpaceAddRoomsScreen.swift b/ElementX/Sources/Screens/Spaces/SpaceAddRoomsScreen/View/SpaceAddRoomsScreen.swift index 5d08b373c..6daa9415f 100644 --- a/ElementX/Sources/Screens/Spaces/SpaceAddRoomsScreen/View/SpaceAddRoomsScreen.swift +++ b/ElementX/Sources/Screens/Spaces/SpaceAddRoomsScreen/View/SpaceAddRoomsScreen.swift @@ -184,7 +184,7 @@ struct SpaceAddRoomsScreen_Previews: PreviewProvider, TestablePreview { } static func makeViewModel(searchQuery: String? = nil, hasSelection: Bool = false) -> SpaceAddRoomsScreenViewModel { - let spaceRoomListProxy = SpaceRoomListProxyMock(.init(spaceServiceRoom: SpaceServiceRoomMock(.init(isSpace: true)))) + let spaceRoomListProxy = SpaceRoomListProxyMock(.init(spaceServiceRoom: SpaceServiceRoom.mock(isSpace: true))) let clientProxy = ClientProxyMock(.init()) clientProxy.recentlyVisitedRoomsFilterReturnValue = .mockRooms diff --git a/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenCoordinator.swift b/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenCoordinator.swift index f72e41bbf..eb84e0089 100644 --- a/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenCoordinator.swift +++ b/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenCoordinator.swift @@ -22,14 +22,14 @@ struct SpaceScreenCoordinatorParameters { enum SpaceScreenCoordinatorAction { case selectSpace(SpaceRoomListProxyProtocol) - case selectUnjoinedSpace(SpaceServiceRoomProtocol) + case selectUnjoinedSpace(SpaceServiceRoom) case selectRoom(roomID: String) case leftSpace case displayMembers(roomProxy: JoinedRoomProxyProtocol) case displaySpaceSettings(roomProxy: JoinedRoomProxyProtocol) case displayRolesAndPermissions(roomProxy: JoinedRoomProxyProtocol) case addExistingChildren - case displayCreateChildRoomFlow(space: SpaceServiceRoomProtocol) + case displayCreateChildRoomFlow(space: SpaceServiceRoom) } final class SpaceScreenCoordinator: CoordinatorProtocol { diff --git a/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenModels.swift b/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenModels.swift index fc79f9dae..c1f381c73 100644 --- a/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenModels.swift +++ b/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenModels.swift @@ -10,24 +10,24 @@ import SwiftUI enum SpaceScreenViewModelAction { case selectSpace(SpaceRoomListProxyProtocol) - case selectUnjoinedSpace(SpaceServiceRoomProtocol) + case selectUnjoinedSpace(SpaceServiceRoom) case selectRoom(roomID: String) case leftSpace case presentRolesAndPermissions(roomProxy: JoinedRoomProxyProtocol) case displayMembers(roomProxy: JoinedRoomProxyProtocol) case displaySpaceSettings(roomProxy: JoinedRoomProxyProtocol) case addExistingChildren - case displayCreateChildRoomFlow(space: SpaceServiceRoomProtocol) + case displayCreateChildRoomFlow(space: SpaceServiceRoom) } struct SpaceScreenViewState: BindableState { - var space: SpaceServiceRoomProtocol + var space: SpaceServiceRoom var permalink: URL? var roomProxy: JoinedRoomProxyProtocol? var paginationState: PaginationState = .idle - var rooms: [SpaceServiceRoomProtocol] + var rooms: [SpaceServiceRoom] var selectedSpaceRoomID: String? var joiningRoomIDs: Set = [] @@ -47,7 +47,7 @@ struct SpaceScreenViewState: BindableState { rooms.isEmpty && paginationState == .endReached && canEditChildren } - var visibleRooms: [SpaceServiceRoomProtocol] { + var visibleRooms: [SpaceServiceRoom] { if editMode == .inactive { rooms } else { diff --git a/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenViewModel.swift b/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenViewModel.swift index 71e340c22..afc4591c4 100644 --- a/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenViewModel.swift +++ b/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenViewModel.swift @@ -182,7 +182,7 @@ class SpaceScreenViewModel: SpaceScreenViewModelType, SpaceScreenViewModelProtoc } } - private func join(_ spaceServiceRoom: SpaceServiceRoomProtocol) async { + private func join(_ spaceServiceRoom: SpaceServiceRoom) async { state.joiningRoomIDs.insert(spaceServiceRoom.id) defer { state.joiningRoomIDs.remove(spaceServiceRoom.id) } @@ -194,7 +194,7 @@ class SpaceScreenViewModel: SpaceScreenViewModelType, SpaceScreenViewModelProtoc // We don't want to show the space room after joining it this way 🤷‍♂️ } - private func selectSpace(_ spaceServiceRoom: SpaceServiceRoomProtocol) async { + private func selectSpace(_ spaceServiceRoom: SpaceServiceRoom) async { switch await spaceServiceProxy.spaceRoomList(spaceID: spaceServiceRoom.id) { case .success(let spaceRoomListProxy): actionsSubject.send(.selectSpace(spaceRoomListProxy)) diff --git a/ElementX/Sources/Screens/Spaces/SpaceScreen/View/SpaceScreen.swift b/ElementX/Sources/Screens/Spaces/SpaceScreen/View/SpaceScreen.swift index 731a90cc5..a0a40834a 100644 --- a/ElementX/Sources/Screens/Spaces/SpaceScreen/View/SpaceScreen.swift +++ b/ElementX/Sources/Screens/Spaces/SpaceScreen/View/SpaceScreen.swift @@ -210,15 +210,15 @@ struct SpaceScreen_Previews: PreviewProvider, TestablePreview { appSettings.spaceSettingsEnabled = true appSettings.createSpaceEnabled = true - let spaceServiceRoom = SpaceServiceRoomMock(.init(id: "!eng-space:matrix.org", - name: "Engineering Team", - isSpace: true, - childrenCount: 30, - joinedMembersCount: 76, - heroes: [.mockDan, .mockBob, .mockCharlie, .mockVerbose], - topic: "Description of the space goes right here. Lorem ipsum dolor sit amet consectetur. Leo viverra morbi habitant in.", - canonicalAlias: "#engineering-team:element.io", - joinRule: .knockRestricted(rules: [.roomMembership(roomId: "")]))) + let spaceServiceRoom = SpaceServiceRoom.mock(id: "!eng-space:matrix.org", + name: "Engineering Team", + isSpace: true, + childrenCount: 30, + joinedMembersCount: 76, + heroes: [.mockDan, .mockBob, .mockCharlie, .mockVerbose], + topic: "Description of the space goes right here. Lorem ipsum dolor sit amet consectetur. Leo viverra morbi habitant in.", + canonicalAlias: "#engineering-team:element.io", + joinRule: .knockRestricted(rules: [.roomMembership(roomId: "")])) let spaceRoomListProxy = SpaceRoomListProxyMock(.init(spaceServiceRoom: spaceServiceRoom, initialSpaceRooms: isNewSpace ? [] : .mockSpaceList)) diff --git a/ElementX/Sources/Screens/Spaces/SpacesScreen/SpacesScreenModels.swift b/ElementX/Sources/Screens/Spaces/SpacesScreen/SpacesScreenModels.swift index fb154b4a8..053a33071 100644 --- a/ElementX/Sources/Screens/Spaces/SpacesScreen/SpacesScreenModels.swift +++ b/ElementX/Sources/Screens/Spaces/SpacesScreen/SpacesScreenModels.swift @@ -19,7 +19,7 @@ struct SpacesScreenViewState: BindableState { var userDisplayName: String? var userAvatarURL: URL? - var topLevelSpaces: [SpaceServiceRoomProtocol] + var topLevelSpaces: [SpaceServiceRoom] var selectedSpaceID: String? var isCreateSpaceEnabled: Bool diff --git a/ElementX/Sources/Screens/Spaces/SpacesScreen/SpacesScreenViewModel.swift b/ElementX/Sources/Screens/Spaces/SpacesScreen/SpacesScreenViewModel.swift index 9c3a7eb77..cde1dc26a 100644 --- a/ElementX/Sources/Screens/Spaces/SpacesScreen/SpacesScreenViewModel.swift +++ b/ElementX/Sources/Screens/Spaces/SpacesScreen/SpacesScreenViewModel.swift @@ -85,7 +85,7 @@ class SpacesScreenViewModel: SpacesScreenViewModelType, SpacesScreenViewModelPro // MARK: - Private - private func selectSpace(_ spaceServiceRoom: SpaceServiceRoomProtocol) async { + private func selectSpace(_ spaceServiceRoom: SpaceServiceRoom) async { switch await spaceServiceProxy.spaceRoomList(spaceID: spaceServiceRoom.id) { case .success(let spaceRoomListProxy): actionsSubject.send(.selectSpace(spaceRoomListProxy)) diff --git a/ElementX/Sources/Services/Spaces/LeaveSpaceHandleProxy.swift b/ElementX/Sources/Services/Spaces/LeaveSpaceHandleProxy.swift index 596019765..11734165e 100644 --- a/ElementX/Sources/Services/Spaces/LeaveSpaceHandleProxy.swift +++ b/ElementX/Sources/Services/Spaces/LeaveSpaceHandleProxy.swift @@ -87,12 +87,12 @@ final class LeaveSpaceHandleProxy { } @Observable class LeaveSpaceRoomDetails { - let spaceServiceRoom: SpaceServiceRoomProtocol + let spaceServiceRoom: SpaceServiceRoom let canLeave: Bool let areCreatorsPrivileged: Bool var isSelected: Bool - init(spaceServiceRoom: SpaceServiceRoomProtocol, isLastOwner: Bool, areCreatorsPrivileged: Bool, isSelected: Bool) { + init(spaceServiceRoom: SpaceServiceRoom, isLastOwner: Bool, areCreatorsPrivileged: Bool, isSelected: Bool) { self.spaceServiceRoom = spaceServiceRoom canLeave = !isLastOwner || spaceServiceRoom.joinedMembersCount == 1 self.isSelected = isSelected diff --git a/ElementX/Sources/Services/Spaces/SpaceRoomListProxy.swift b/ElementX/Sources/Services/Spaces/SpaceRoomListProxy.swift index d0b4cb781..d7a33d684 100644 --- a/ElementX/Sources/Services/Spaces/SpaceRoomListProxy.swift +++ b/ElementX/Sources/Services/Spaces/SpaceRoomListProxy.swift @@ -15,14 +15,14 @@ class SpaceRoomListProxy: SpaceRoomListProxyProtocol { private let spaceRoomList: SpaceRoomListProtocol private var spaceServiceRoomHandle: TaskHandle? - private let spaceServiceRoomSubject: CurrentValueSubject - var spaceServiceRoomPublisher: CurrentValuePublisher { + private let spaceServiceRoomSubject: CurrentValueSubject + var spaceServiceRoomPublisher: CurrentValuePublisher { spaceServiceRoomSubject.asCurrentValuePublisher() } private var spaceRoomsHandle: TaskHandle? - private let spaceRoomsSubject = CurrentValueSubject<[SpaceServiceRoomProtocol], Never>([]) - var spaceRoomsPublisher: CurrentValuePublisher<[SpaceServiceRoomProtocol], Never> { + private let spaceRoomsSubject = CurrentValueSubject<[SpaceServiceRoom], Never>([]) + var spaceRoomsPublisher: CurrentValuePublisher<[SpaceServiceRoom], Never> { spaceRoomsSubject.asCurrentValuePublisher() } diff --git a/ElementX/Sources/Services/Spaces/SpaceRoomListProxyProtocol.swift b/ElementX/Sources/Services/Spaces/SpaceRoomListProxyProtocol.swift index 52362d5ff..bad02b771 100644 --- a/ElementX/Sources/Services/Spaces/SpaceRoomListProxyProtocol.swift +++ b/ElementX/Sources/Services/Spaces/SpaceRoomListProxyProtocol.swift @@ -17,8 +17,8 @@ enum SpaceRoomListProxyError: Error { protocol SpaceRoomListProxyProtocol { var id: String { get } - var spaceServiceRoomPublisher: CurrentValuePublisher { get } - var spaceRoomsPublisher: CurrentValuePublisher<[SpaceServiceRoomProtocol], Never> { get } + var spaceServiceRoomPublisher: CurrentValuePublisher { get } + var spaceRoomsPublisher: CurrentValuePublisher<[SpaceServiceRoom], Never> { get } var paginationStatePublisher: CurrentValuePublisher { get } func paginate() async diff --git a/ElementX/Sources/Services/Spaces/SpaceServiceProxy.swift b/ElementX/Sources/Services/Spaces/SpaceServiceProxy.swift index 0fde5b02f..9a5e1fb28 100644 --- a/ElementX/Sources/Services/Spaces/SpaceServiceProxy.swift +++ b/ElementX/Sources/Services/Spaces/SpaceServiceProxy.swift @@ -14,8 +14,8 @@ class SpaceServiceProxy: SpaceServiceProxyProtocol { private let spaceService: SpaceServiceProtocol private var topLevelSpacesHandle: TaskHandle? - private let spacesSubject = CurrentValueSubject<[SpaceServiceRoomProtocol], Never>([]) - var topLevelSpacesPublisher: CurrentValuePublisher<[SpaceServiceRoomProtocol], Never> { + private let spacesSubject = CurrentValueSubject<[SpaceServiceRoom], Never>([]) + var topLevelSpacesPublisher: CurrentValuePublisher<[SpaceServiceRoom], Never> { spacesSubject.asCurrentValuePublisher() } @@ -50,7 +50,7 @@ class SpaceServiceProxy: SpaceServiceProxyProtocol { } } - func spaceForIdentifier(spaceID: String) async -> Result { + func spaceForIdentifier(spaceID: String) async -> Result { do { return try await .success(spaceService.getSpaceRoom(roomId: spaceID).map(SpaceServiceRoom.init)) } catch { @@ -68,7 +68,7 @@ class SpaceServiceProxy: SpaceServiceProxyProtocol { } } - func joinedParents(childID: String) async -> Result<[SpaceServiceRoomProtocol], SpaceServiceProxyError> { + func joinedParents(childID: String) async -> Result<[SpaceServiceRoom], SpaceServiceProxyError> { do { return try await .success(spaceService.joinedParentsOfChild(childId: childID).map(SpaceServiceRoom.init)) } catch { @@ -77,7 +77,7 @@ class SpaceServiceProxy: SpaceServiceProxyProtocol { } } - func editableSpaces() async -> [SpaceServiceRoomProtocol] { + func editableSpaces() async -> [SpaceServiceRoom] { await spaceService.editableSpaces().map(SpaceServiceRoom.init) } diff --git a/ElementX/Sources/Services/Spaces/SpaceServiceProxyProtocol.swift b/ElementX/Sources/Services/Spaces/SpaceServiceProxyProtocol.swift index fb99d2256..490a350b5 100644 --- a/ElementX/Sources/Services/Spaces/SpaceServiceProxyProtocol.swift +++ b/ElementX/Sources/Services/Spaces/SpaceServiceProxyProtocol.swift @@ -15,11 +15,11 @@ enum SpaceServiceProxyError: Error { } struct SpaceServiceFilter: Identifiable, Equatable { - let room: SpaceServiceRoomProtocol + let room: SpaceServiceRoom let level: UInt let descendants: Set - init(room: SpaceServiceRoomProtocol, level: UInt, descendants: Set) { + init(room: SpaceServiceRoom, level: UInt, descendants: Set) { self.room = room self.level = level self.descendants = descendants @@ -43,17 +43,17 @@ struct SpaceServiceFilter: Identifiable, Equatable { // sourcery: AutoMockable protocol SpaceServiceProxyProtocol { - var topLevelSpacesPublisher: CurrentValuePublisher<[SpaceServiceRoomProtocol], Never> { get } + var topLevelSpacesPublisher: CurrentValuePublisher<[SpaceServiceRoom], Never> { get } var spaceFilterPublisher: CurrentValuePublisher<[SpaceServiceFilter], Never> { get } func spaceRoomList(spaceID: String) async -> Result /// Returns a joined space given its identifier - func spaceForIdentifier(spaceID: String) async -> Result + func spaceForIdentifier(spaceID: String) async -> Result func leaveSpace(spaceID: String) async -> Result /// Returns all the parent spaces of a child that user has joined. - func joinedParents(childID: String) async -> Result<[SpaceServiceRoomProtocol], SpaceServiceProxyError> + func joinedParents(childID: String) async -> Result<[SpaceServiceRoom], SpaceServiceProxyError> /// Returns all the joined spaces that can be edited by the user - func editableSpaces() async -> [SpaceServiceRoomProtocol] + func editableSpaces() async -> [SpaceServiceRoom] /// Adds a room (or space) as a child of another space. func addChild(_ childID: String, to spaceID: String) async -> Result diff --git a/ElementX/Sources/Services/Spaces/SpaceServiceRoom.swift b/ElementX/Sources/Services/Spaces/SpaceServiceRoom.swift index 2a9a55ba4..26d89893e 100644 --- a/ElementX/Sources/Services/Spaces/SpaceServiceRoom.swift +++ b/ElementX/Sources/Services/Spaces/SpaceServiceRoom.swift @@ -9,7 +9,14 @@ import Foundation import MatrixRustSDK -struct SpaceServiceRoom: SpaceServiceRoomProtocol { +enum SpaceServiceRoomVisibility: Equatable { + case `public` + case `private` + case restricted + // We can add the external case in here eventually. +} + +struct SpaceServiceRoom { var id: String var name: String var rawName: String? @@ -30,6 +37,31 @@ struct SpaceServiceRoom: SpaceServiceRoomProtocol { var state: Membership? var via: [String] + var avatar: RoomAvatar { + if isSpace { + .space(id: id, name: name, avatarURL: avatarURL) + } else if isDirect == true, avatarURL == nil, heroes.count == 1 { + .heroes(heroes) + } else { + .room(id: id, name: name, avatarURL: avatarURL) + } + } + + var visibility: SpaceServiceRoomVisibility? { + switch joinRule { + case .public: + .public + case .restricted, .knockRestricted: + .restricted + case .invite, .knock, .private, .custom: + .private + case .none: + .none + } + } +} + +extension SpaceServiceRoom { init(spaceRoom: SpaceRoom) { id = spaceRoom.roomId name = spaceRoom.displayName @@ -51,4 +83,193 @@ struct SpaceServiceRoom: SpaceServiceRoomProtocol { state = spaceRoom.state via = spaceRoom.via } + + // MARK: - Mocks + + static func mock(id: String = UUID().uuidString, + name: String? = nil, + rawName: String? = nil, + avatarURL: URL? = nil, + isSpace: Bool, + isDirect: Bool? = nil, + childrenCount: Int = 0, + joinedMembersCount: Int = 0, + heroes: [UserProfileProxy] = [], + topic: String? = nil, + canonicalAlias: String? = nil, + joinRule: JoinRule? = nil, + worldReadable: Bool? = nil, + guestCanJoin: Bool = true, + state: Membership? = nil, + via: [String] = []) -> Self { + SpaceServiceRoom(id: id, + name: name ?? id, + rawName: rawName, + avatarURL: avatarURL, + isSpace: isSpace, + isDirect: isDirect, + childrenCount: childrenCount, + joinedMembersCount: joinedMembersCount, + heroes: heroes, + topic: topic, + canonicalAlias: canonicalAlias, + joinRule: joinRule, + worldReadable: worldReadable, + guestCanJoin: guestCanJoin, + state: state, + via: via) + } + + static func mock(joinRoomScreenMode: JoinRoomScreenMode) -> Self { + var state: Membership? + var joinRule: JoinRule? + + switch joinRoomScreenMode { + case .joinable: + joinRule = .public + case .restricted: + joinRule = .restricted(rules: []) + case .inviteRequired: + joinRule = .private + case .invited: + state = .invited + joinRule = .private + case .knockable: + joinRule = .knock + case .knocked: + state = .knocked + joinRule = .knock + case .banned: + state = .banned + case .loading, .unknown, .forbidden: + break + } + + return SpaceServiceRoom.mock(id: "1", + name: "The Three-Body Problem", + avatarURL: .mockMXCAvatar, + isSpace: true, + childrenCount: 100, + joinedMembersCount: 123, + heroes: [.mockAlice, .mockBob, .mockCharlie], + topic: "“Science and technology were the only keys to opening the door to the future, and people approached science with the faith and sincerity of elementary school students.”", + canonicalAlias: "#3-body-problem:matrix.org", + joinRule: joinRule, + state: state) + } +} + +extension [SpaceServiceRoom] { + static var mockJoinedSpaces: [SpaceServiceRoom] { + [ + SpaceServiceRoom.mock(id: "space1", + name: "The Foundation", + isSpace: true, + childrenCount: 1, + joinedMembersCount: 500, + canonicalAlias: "#the-foundation:matrix.org", + state: .joined), + SpaceServiceRoom.mock(id: "space2", + name: "The Second Foundation", + isSpace: true, + childrenCount: 1, + joinedMembersCount: 100, + state: .joined), + SpaceServiceRoom.mock(id: "space3", + name: "The Galactic Empire", + isSpace: true, + childrenCount: 25000, + joinedMembersCount: 1_000_000_000, + canonicalAlias: "#the-galactic-empire:matrix.org", + state: .joined), + SpaceServiceRoom.mock(id: "space4", + name: "The Korellians", + isSpace: true, + childrenCount: 27, + joinedMembersCount: 2_000_000, + state: .joined), + SpaceServiceRoom.mock(id: "space5", + name: "The Luminists", + isSpace: true, + childrenCount: 1, + joinedMembersCount: 100_000, + state: .joined), + SpaceServiceRoom.mock(id: "space6", + name: "The Anacreons", + isSpace: true, + childrenCount: 25, + joinedMembersCount: 400_000, + state: .joined), + SpaceServiceRoom.mock(id: "space7", + name: "The Thespians", + isSpace: true, + childrenCount: 15, + joinedMembersCount: 300_000, + state: .joined) + ] + } + + static var mockJoinedSpaces2: [SpaceServiceRoom] { + [ + SpaceServiceRoom.mock(id: "space1", + name: "The Foundation", + avatarURL: .mockMXCAvatar, + isSpace: true, + childrenCount: 1, + joinedMembersCount: 500, + canonicalAlias: "#the-foundation:matrix.org", + joinRule: .private, + state: .joined), + SpaceServiceRoom.mock(id: "space2", + name: "The Second Foundation", + isSpace: true, + childrenCount: 1, + joinedMembersCount: 100, + state: .joined), + SpaceServiceRoom.mock(id: "space3", + name: "The Galactic Empire", + isSpace: true, + childrenCount: 25000, + joinedMembersCount: 1_000_000_000, + canonicalAlias: "#the-galactic-empire:matrix.org", + state: .joined) + ] + } + + static var mockSpaceList: [SpaceServiceRoom] { + makeSpaceRooms(isSpace: true) + makeSpaceRooms(isSpace: false) + } + + static var mockSingleRoom: [SpaceServiceRoom] { + [SpaceServiceRoom.mock(id: "!spaceroom:matrix.org", + name: "Management", + isSpace: false, + joinedMembersCount: 12, + topic: "This is where everything gets organised 📋.", + state: .joined)] + } + + private static func makeSpaceRooms(isSpace: Bool) -> [SpaceServiceRoom] { + let typeName = isSpace ? "Space" : "Room" + + return [ + SpaceServiceRoom.mock(id: "!\(typeName.lowercased())1:matrix.org", + name: "Company \(typeName)", + isSpace: isSpace), + SpaceServiceRoom.mock(id: "!\(typeName.lowercased())2:matrix.org", + name: "Public \(typeName)", + avatarURL: .mockMXCAvatar, + isSpace: isSpace, + joinedMembersCount: 78, + topic: "Discussion on specific topic goes here.", + joinRule: .public), + SpaceServiceRoom.mock(id: "!\(typeName.lowercased())3:matrix.org", + name: "Joined \(typeName)", + isSpace: isSpace, + joinedMembersCount: 123, + topic: "Discussion on specific topic goes here.", + joinRule: .restricted(rules: []), + state: .joined) + ] + } } diff --git a/ElementX/Sources/Services/Spaces/SpaceServiceRoomProtocol.swift b/ElementX/Sources/Services/Spaces/SpaceServiceRoomProtocol.swift deleted file mode 100644 index 4e611add1..000000000 --- a/ElementX/Sources/Services/Spaces/SpaceServiceRoomProtocol.swift +++ /dev/null @@ -1,65 +0,0 @@ -// -// Copyright 2025 Element Creations Ltd. -// Copyright 2025 New Vector Ltd. -// -// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial. -// Please see LICENSE files in the repository root for full details. -// - -import Foundation -import MatrixRustSDK - -enum SpaceServiceRoomVisibility: Equatable { - case `public` - case `private` - case restricted - // We can add the external case in here eventually. -} - -// sourcery: AutoMockable -protocol SpaceServiceRoomProtocol { - var id: String { get } - var name: String { get } - var rawName: String? { get } - var avatarURL: URL? { get } - - var isSpace: Bool { get } - var isDirect: Bool? { get } - var childrenCount: Int { get } - - var joinedMembersCount: Int { get } - var heroes: [UserProfileProxy] { get } - var topic: String? { get } - var canonicalAlias: String? { get } - - var joinRule: JoinRule? { get } - var worldReadable: Bool? { get } - var guestCanJoin: Bool { get } - var state: Membership? { get } - var via: [String] { get } -} - -extension SpaceServiceRoomProtocol { - var avatar: RoomAvatar { - if isSpace { - .space(id: id, name: name, avatarURL: avatarURL) - } else if isDirect == true, avatarURL == nil, heroes.count == 1 { - .heroes(heroes) - } else { - .room(id: id, name: name, avatarURL: avatarURL) - } - } - - var visibility: SpaceServiceRoomVisibility? { - switch joinRule { - case .public: - .public - case .restricted, .knockRestricted: - .restricted - case .invite, .knock, .private, .custom: - .private - case .none: - .none - } - } -} diff --git a/ElementX/Sources/UITests/UITestsAppCoordinator.swift b/ElementX/Sources/UITests/UITestsAppCoordinator.swift index 3d1a6b941..5090cb097 100644 --- a/ElementX/Sources/UITests/UITestsAppCoordinator.swift +++ b/ElementX/Sources/UITests/UITestsAppCoordinator.swift @@ -598,7 +598,7 @@ class MockScreen: Identifiable { deviceID: "MOCKCLIENT", roomSummaryProvider: RoomSummaryProviderMock(.init(state: .loaded(roomSummaries))), spaceServiceConfiguration: .init(topLevelSpaces: .mockSpaceList.filter(\.isSpace) + .mockSingleRoom), - roomPreviews: [SpaceServiceRoomProtocol].mockSpaceList.map(RoomPreviewProxyMock.init), + roomPreviews: [SpaceServiceRoom].mockSpaceList.map(RoomPreviewProxyMock.init), defaultRoomMembers: .allMembersAsAdmin)) clientProxy.recentlyVisitedRoomsFilterReturnValue = .mockRooms diff --git a/UnitTests/Sources/CreateRoomViewModelTests.swift b/UnitTests/Sources/CreateRoomViewModelTests.swift index ce6ee12b0..15556e3a6 100644 --- a/UnitTests/Sources/CreateRoomViewModelTests.swift +++ b/UnitTests/Sources/CreateRoomViewModelTests.swift @@ -223,7 +223,7 @@ class CreateRoomScreenViewModelTests: XCTestCase { } func testCreateRoomInASelectedSpaceFromTheList() async throws { - let spaces = [SpaceServiceRoomProtocol].mockJoinedSpaces2 + let spaces = [SpaceServiceRoom].mockJoinedSpaces2 setup() context.send(viewAction: .updateRoomName("A")) @@ -272,7 +272,7 @@ class CreateRoomScreenViewModelTests: XCTestCase { } func testCreateRoomInAnAlreadySelectedSpace() async throws { - let space = SpaceServiceRoomMock(.init(isSpace: true, joinRule: .private)) + let space = SpaceServiceRoom.mock(isSpace: true, joinRule: .private) setup(spacesSelectionMode: .preSelected(space)) context.send(viewAction: .updateRoomName("A")) @@ -307,7 +307,7 @@ class CreateRoomScreenViewModelTests: XCTestCase { } func testCreateRoomInAnPublicSpaceAvailableTypes() async throws { - let space = SpaceServiceRoomMock(.init(isSpace: true, joinRule: .public)) + let space = SpaceServiceRoom.mock(isSpace: true, joinRule: .public) setup(spacesSelectionMode: .preSelected(space)) // Given a form with a blank topic. diff --git a/UnitTests/Sources/HomeScreenViewModelTests.swift b/UnitTests/Sources/HomeScreenViewModelTests.swift index 7e1ee254d..c598dd2e1 100644 --- a/UnitTests/Sources/HomeScreenViewModelTests.swift +++ b/UnitTests/Sources/HomeScreenViewModelTests.swift @@ -311,7 +311,7 @@ class HomeScreenViewModelTests: XCTestCase { XCTAssertEqual(invitedRoomIDs.count, 2) let deferred = deferFulfillment(viewModel.actions) { - $0 == .presentSpace(SpaceRoomListProxyMock(.init(spaceServiceRoom: SpaceServiceRoomMock(.init(id: invitedRoomIDs[0], isSpace: true))))) + $0 == .presentSpace(SpaceRoomListProxyMock(.init(spaceServiceRoom: SpaceServiceRoom.mock(id: invitedRoomIDs[0], isSpace: true)))) } context.send(viewAction: .acceptInvite(roomIdentifier: invitedRoomIDs[0])) try await deferred.fulfill() @@ -408,7 +408,7 @@ class HomeScreenViewModelTests: XCTestCase { let spaceServiceProxy = SpaceServiceProxyMock(.init()) spaceServiceProxy.spaceRoomListSpaceIDClosure = { spaceID in - .success(SpaceRoomListProxyMock(.init(spaceServiceRoom: SpaceServiceRoomMock(.init(id: spaceID, isSpace: true))))) + .success(SpaceRoomListProxyMock(.init(spaceServiceRoom: SpaceServiceRoom.mock(id: spaceID, isSpace: true)))) } clientProxy.underlyingSpaceService = spaceServiceProxy case nil: diff --git a/UnitTests/Sources/SecurityAndPrivacyScreenViewModelTests.swift b/UnitTests/Sources/SecurityAndPrivacyScreenViewModelTests.swift index f7840eb38..3771617bb 100644 --- a/UnitTests/Sources/SecurityAndPrivacyScreenViewModelTests.swift +++ b/UnitTests/Sources/SecurityAndPrivacyScreenViewModelTests.swift @@ -29,7 +29,7 @@ class SecurityAndPrivacyScreenViewModelTests: XCTestCase { } func testSetSingleJoinedSpaceMembersAccess() async throws { - let singleRoom = [SpaceServiceRoomProtocol].mockSingleRoom + let singleRoom = [SpaceServiceRoom].mockSingleRoom let space = singleRoom[0] setupViewModel(joinedParentSpaces: singleRoom, joinRule: .public) @@ -60,7 +60,7 @@ class SecurityAndPrivacyScreenViewModelTests: XCTestCase { } func testSetSingleJoinedAskToJoinWithSpaceMembersAccess() async throws { - let singleRoom = [SpaceServiceRoomProtocol].mockSingleRoom + let singleRoom = [SpaceServiceRoom].mockSingleRoom let space = singleRoom[0] setupViewModel(joinedParentSpaces: singleRoom, joinRule: .public) @@ -91,7 +91,7 @@ class SecurityAndPrivacyScreenViewModelTests: XCTestCase { } func testSingleUnknownSpaceMembersAccessCanBeReselected() async throws { - let singleRoom = [SpaceServiceRoomProtocol].mockSingleRoom + let singleRoom = [SpaceServiceRoom].mockSingleRoom let space = singleRoom[0] setupViewModel(joinedParentSpaces: [], joinRule: .restricted(rules: [.roomMembership(roomId: space.id)])) @@ -122,7 +122,7 @@ class SecurityAndPrivacyScreenViewModelTests: XCTestCase { } func testMultipleKnownSpacesMembersSelection() async throws { - let spaces = [SpaceServiceRoomProtocol].mockJoinedSpaces2 + let spaces = [SpaceServiceRoom].mockJoinedSpaces2 setupViewModel(joinedParentSpaces: spaces, joinRule: .public) let deferred = deferFulfillment(context.$viewState) { $0.selectableJoinedSpaces.count == 3 } @@ -166,7 +166,7 @@ class SecurityAndPrivacyScreenViewModelTests: XCTestCase { } func testMultipleKnownAskToJoinSpacesMembersSelection() async throws { - let spaces = [SpaceServiceRoomProtocol].mockJoinedSpaces2 + let spaces = [SpaceServiceRoom].mockJoinedSpaces2 setupViewModel(joinedParentSpaces: spaces, joinRule: .public) let deferred = deferFulfillment(context.$viewState) { $0.selectableJoinedSpaces.count == 3 } @@ -210,7 +210,7 @@ class SecurityAndPrivacyScreenViewModelTests: XCTestCase { } func testMultipleSpacesMembersSelection() async throws { - let spaces = [SpaceServiceRoomProtocol].mockJoinedSpaces2 + let spaces = [SpaceServiceRoom].mockJoinedSpaces2 setupViewModel(joinedParentSpaces: spaces, joinRule: .restricted(rules: [.roomMembership(roomId: "unknownSpaceID")])) @@ -256,8 +256,8 @@ class SecurityAndPrivacyScreenViewModelTests: XCTestCase { } func testMultipleSpacesMembersSelectionWithAnExistingNonParentButJoinedSpace() async throws { - let joinedParentSpaces = [SpaceServiceRoomProtocol].mockJoinedSpaces2 - let singleRoom = [SpaceServiceRoomProtocol].mockSingleRoom + let joinedParentSpaces = [SpaceServiceRoom].mockJoinedSpaces2 + let singleRoom = [SpaceServiceRoom].mockSingleRoom let space = singleRoom[0] let allSpaces = joinedParentSpaces + singleRoom setupViewModel(joinedParentSpaces: joinedParentSpaces, @@ -319,7 +319,7 @@ class SecurityAndPrivacyScreenViewModelTests: XCTestCase { func testEmptySpaceMembersSelectionWithJoinedParentEdgeCase() async throws { // Edge case where there is one available joined parent but the room has a restricted join rule. // With no space ids in it - let singleRoom = [SpaceServiceRoomProtocol].mockSingleRoom + let singleRoom = [SpaceServiceRoom].mockSingleRoom setupViewModel(joinedParentSpaces: singleRoom, joinRule: .restricted(rules: [])) @@ -424,8 +424,8 @@ class SecurityAndPrivacyScreenViewModelTests: XCTestCase { // MARK: - Helpers - private func setupViewModel(joinedParentSpaces: [SpaceServiceRoomProtocol], - topLevelSpaces: [SpaceServiceRoomProtocol] = [], + private func setupViewModel(joinedParentSpaces: [SpaceServiceRoom], + topLevelSpaces: [SpaceServiceRoom] = [], joinRule: JoinRule) { let appSettings = AppSettings() appSettings.spaceSettingsEnabled = true diff --git a/UnitTests/Sources/SpaceAddRoomsScreenViewModelTests.swift b/UnitTests/Sources/SpaceAddRoomsScreenViewModelTests.swift index 7ec3c9d1c..4af093b77 100644 --- a/UnitTests/Sources/SpaceAddRoomsScreenViewModelTests.swift +++ b/UnitTests/Sources/SpaceAddRoomsScreenViewModelTests.swift @@ -93,7 +93,7 @@ class SpaceAddRoomsScreenViewModelTests: XCTestCase { func setupViewModel() { let summaryProvider = RoomSummaryProviderMock(.init(state: .loaded(.mockRooms))) - spaceRoomListProxy = SpaceRoomListProxyMock(.init(spaceServiceRoom: SpaceServiceRoomMock(.init(isSpace: true)))) + spaceRoomListProxy = SpaceRoomListProxyMock(.init(spaceServiceRoom: SpaceServiceRoom.mock(isSpace: true))) let clientProxy = ClientProxyMock(.init()) clientProxy.recentlyVisitedRoomsFilterReturnValue = .init(repeating: JoinedRoomProxyMock(.init()), count: 5) diff --git a/UnitTests/Sources/SpaceListScreenViewModelTests.swift b/UnitTests/Sources/SpaceListScreenViewModelTests.swift index ee128ae98..4e0da50df 100644 --- a/UnitTests/Sources/SpaceListScreenViewModelTests.swift +++ b/UnitTests/Sources/SpaceListScreenViewModelTests.swift @@ -13,7 +13,7 @@ import XCTest @MainActor class SpacesScreenViewModelTests: XCTestCase { - var topLevelSpacesSubject: CurrentValueSubject<[SpaceServiceRoomProtocol], Never>! + var topLevelSpacesSubject: CurrentValueSubject<[SpaceServiceRoom], Never>! var spaceServiceProxy: SpaceServiceProxyMock! var appSettings: AppSettings! @@ -47,7 +47,7 @@ class SpacesScreenViewModelTests: XCTestCase { deferred = deferFulfillment(context.observe(\.viewState.topLevelSpaces)) { $0.count == 1 } topLevelSpacesSubject.send([ - SpaceServiceRoomMock(.init(isSpace: true)) + SpaceServiceRoom.mock(isSpace: true) ]) try await deferred.fulfill() XCTAssertEqual(context.viewState.topLevelSpaces.count, 1) @@ -97,9 +97,9 @@ class SpacesScreenViewModelTests: XCTestCase { let userSession = UserSessionMock(.init(clientProxy: clientProxy)) topLevelSpacesSubject = .init([ - SpaceServiceRoomMock(.init(id: "space1", isSpace: true)), - SpaceServiceRoomMock(.init(id: "space2", isSpace: true)), - SpaceServiceRoomMock(.init(id: "space3", isSpace: true)) + SpaceServiceRoom.mock(id: "space1", isSpace: true), + SpaceServiceRoom.mock(id: "space2", isSpace: true), + SpaceServiceRoom.mock(id: "space3", isSpace: true) ]) spaceServiceProxy = SpaceServiceProxyMock(.init()) spaceServiceProxy.topLevelSpacesPublisher = topLevelSpacesSubject.asCurrentValuePublisher() diff --git a/UnitTests/Sources/SpaceScreenViewModelTests.swift b/UnitTests/Sources/SpaceScreenViewModelTests.swift index e8dc97315..0fcac777b 100644 --- a/UnitTests/Sources/SpaceScreenViewModelTests.swift +++ b/UnitTests/Sources/SpaceScreenViewModelTests.swift @@ -17,7 +17,7 @@ import MatrixRustSDKMocks class SpaceScreenViewModelTests: XCTestCase { var spaceRoomListProxy: SpaceRoomListProxyMock! var spaceServiceProxy: SpaceServiceProxyMock! - let mockSpaceRooms = [SpaceServiceRoomProtocol].mockSpaceList + let mockSpaceRooms = [SpaceServiceRoom].mockSpaceList var clientProxy: ClientProxyMock! var paginationStateSubject: CurrentValueSubject = .init(.idle(endReached: true)) var rustLeaveHandle: LeaveSpaceHandleSDKMock! @@ -308,8 +308,8 @@ class SpaceScreenViewModelTests: XCTestCase { // MARK: - Helpers - private func setupViewModel(initialSpaceRooms: [SpaceServiceRoomProtocol] = [], paginationResponses: [[SpaceServiceRoomProtocol]] = []) { - spaceRoomListProxy = SpaceRoomListProxyMock(.init(spaceServiceRoom: SpaceServiceRoomMock(.init(isSpace: true)), + private func setupViewModel(initialSpaceRooms: [SpaceServiceRoom] = [], paginationResponses: [[SpaceServiceRoom]] = []) { + spaceRoomListProxy = SpaceRoomListProxyMock(.init(spaceServiceRoom: SpaceServiceRoom.mock(isSpace: true), initialSpaceRooms: initialSpaceRooms, paginationStateSubject: paginationStateSubject, paginationResponses: paginationResponses))