mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-06 20:38:41 +00:00
Remove the protocol for SpaceServiceRoom given its a struct type. (#5000)
* Remove the protocol for SpaceServiceRoom given its a struct type. * Fix a few missed mocks in the unit tests.
This commit is contained in:
@@ -3,7 +3,7 @@
|
|||||||
archiveVersion = 1;
|
archiveVersion = 1;
|
||||||
classes = {
|
classes = {
|
||||||
};
|
};
|
||||||
objectVersion = 63;
|
objectVersion = 77;
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXAggregateTarget section */
|
/* Begin PBXAggregateTarget section */
|
||||||
@@ -835,7 +835,6 @@
|
|||||||
90733645AE76FB33DAD28C2B /* URLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE40D4A5DD857AC16EED945A /* URLSession.swift */; };
|
90733645AE76FB33DAD28C2B /* URLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE40D4A5DD857AC16EED945A /* URLSession.swift */; };
|
||||||
90DF83A6A347F7EE7EDE89EE /* AttributedStringBuilderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF25E364AE85090A70AE4644 /* AttributedStringBuilderTests.swift */; };
|
90DF83A6A347F7EE7EDE89EE /* AttributedStringBuilderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF25E364AE85090A70AE4644 /* AttributedStringBuilderTests.swift */; };
|
||||||
90EB25D13AE6EEF034BDE9D2 /* Assets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71D52BAA5BADB06E5E8C295D /* Assets.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 */; };
|
914BDF61447C723F104BCE33 /* SessionDirectories.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43C2067FF58B4996323EB40C /* SessionDirectories.swift */; };
|
||||||
915B4CDAF220D9AEB4047D45 /* PollInteractionHandlerProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 259E5B05BDE6E20C26CF11B4 /* PollInteractionHandlerProtocol.swift */; };
|
915B4CDAF220D9AEB4047D45 /* PollInteractionHandlerProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 259E5B05BDE6E20C26CF11B4 /* PollInteractionHandlerProtocol.swift */; };
|
||||||
91ABC91758A6E4A5FAA2E9C4 /* ReadReceipt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 314F1C79850BE46E8ABEAFCB /* ReadReceipt.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 */; };
|
F4996C82A4B3A5FF0C8EDD03 /* RoomListFilterModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = E06AAD6D9D3F5833E7A5A2F9 /* RoomListFilterModels.swift */; };
|
||||||
F4C005F006FC3657B9F0A31D /* BugReportHook.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25586C0ADB814FEE9897DCAA /* BugReportHook.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 */; };
|
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 */; };
|
F519DE17A3A0F760307B2E6D /* InviteUsersScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02D155E09BF961BBA8F85263 /* InviteUsersScreenViewModel.swift */; };
|
||||||
F54E2D6CAD96E1AC15BC526F /* MessageForwardingScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8E60332509665C00179ACF6 /* MessageForwardingScreenViewModel.swift */; };
|
F54E2D6CAD96E1AC15BC526F /* MessageForwardingScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8E60332509665C00179ACF6 /* MessageForwardingScreenViewModel.swift */; };
|
||||||
F5D2270B5021D521C0D22E11 /* FlowCoordinatorProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B9FCA1CFD07B8CF9BD21266 /* FlowCoordinatorProtocol.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 = "<group>"; };
|
044E501B8331B339874D1B96 /* CompoundIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompoundIcon.swift; sourceTree = "<group>"; };
|
||||||
045253F9967A535EE5B16691 /* Label.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Label.swift; sourceTree = "<group>"; };
|
045253F9967A535EE5B16691 /* Label.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Label.swift; sourceTree = "<group>"; };
|
||||||
046C0D3F53B0B5EF0A1F5BEA /* RoomSummaryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomSummaryTests.swift; sourceTree = "<group>"; };
|
046C0D3F53B0B5EF0A1F5BEA /* RoomSummaryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomSummaryTests.swift; sourceTree = "<group>"; };
|
||||||
048A21188AB19349D026BECD /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
|
048A21188AB19349D026BECD /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
|
||||||
04BB8DDE245ED86C489BA983 /* AccessibilityIdentifiers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessibilityIdentifiers.swift; sourceTree = "<group>"; };
|
04BB8DDE245ED86C489BA983 /* AccessibilityIdentifiers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessibilityIdentifiers.swift; sourceTree = "<group>"; };
|
||||||
04DF593C3F7AF4B2FBAEB05D /* FileManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileManager.swift; sourceTree = "<group>"; };
|
04DF593C3F7AF4B2FBAEB05D /* FileManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileManager.swift; sourceTree = "<group>"; };
|
||||||
0516C69708D5CBDE1A8E77EC /* RoomDirectorySearchProxyProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomDirectorySearchProxyProtocol.swift; sourceTree = "<group>"; };
|
0516C69708D5CBDE1A8E77EC /* RoomDirectorySearchProxyProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomDirectorySearchProxyProtocol.swift; sourceTree = "<group>"; };
|
||||||
@@ -1664,7 +1662,7 @@
|
|||||||
128501375217576AF0FE3E92 /* RoomAttachmentPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomAttachmentPicker.swift; sourceTree = "<group>"; };
|
128501375217576AF0FE3E92 /* RoomAttachmentPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomAttachmentPicker.swift; sourceTree = "<group>"; };
|
||||||
12B09A94C519227264A41208 /* RoomMembershipDetailsProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMembershipDetailsProxy.swift; sourceTree = "<group>"; };
|
12B09A94C519227264A41208 /* RoomMembershipDetailsProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMembershipDetailsProxy.swift; sourceTree = "<group>"; };
|
||||||
12FD5280AF55AB7F50F8E47D /* preview_avatar_room.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = preview_avatar_room.jpg; sourceTree = "<group>"; };
|
12FD5280AF55AB7F50F8E47D /* preview_avatar_room.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = preview_avatar_room.jpg; sourceTree = "<group>"; };
|
||||||
1304D9191300873EADA52D6E /* IntegrationTests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = IntegrationTests.xctestplan; sourceTree = "<group>"; };
|
1304D9191300873EADA52D6E /* IntegrationTests.xctestplan */ = {isa = PBXFileReference; path = IntegrationTests.xctestplan; sourceTree = "<group>"; };
|
||||||
130ED565A078F7E0B59D9D25 /* UNTextInputNotificationResponse+Creator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UNTextInputNotificationResponse+Creator.swift"; sourceTree = "<group>"; };
|
130ED565A078F7E0B59D9D25 /* UNTextInputNotificationResponse+Creator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UNTextInputNotificationResponse+Creator.swift"; sourceTree = "<group>"; };
|
||||||
136F80A613B55BDD071DCEA5 /* JoinRoomScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinRoomScreenModels.swift; sourceTree = "<group>"; };
|
136F80A613B55BDD071DCEA5 /* JoinRoomScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JoinRoomScreenModels.swift; sourceTree = "<group>"; };
|
||||||
13802897C7AFA360EA74C0B0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = en; path = en.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
13802897C7AFA360EA74C0B0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = en; path = en.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
||||||
@@ -1685,7 +1683,7 @@
|
|||||||
16D09C79746BDCD9173EB3A7 /* RoomDetailsEditScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomDetailsEditScreenModels.swift; sourceTree = "<group>"; };
|
16D09C79746BDCD9173EB3A7 /* RoomDetailsEditScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomDetailsEditScreenModels.swift; sourceTree = "<group>"; };
|
||||||
16D353E10A64172D863769BF /* TombstonedAvatarImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TombstonedAvatarImage.swift; sourceTree = "<group>"; };
|
16D353E10A64172D863769BF /* TombstonedAvatarImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TombstonedAvatarImage.swift; sourceTree = "<group>"; };
|
||||||
1715E3D7F53C0748AA50C91C /* PostHogAnalyticsClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostHogAnalyticsClient.swift; sourceTree = "<group>"; };
|
1715E3D7F53C0748AA50C91C /* PostHogAnalyticsClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostHogAnalyticsClient.swift; sourceTree = "<group>"; };
|
||||||
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 = "<group>"; };
|
17A8AA0DFA06012A9DAB951E /* TimelineProxyMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineProxyMock.swift; sourceTree = "<group>"; };
|
||||||
17BAE25A0E9E9F2F1BBA8930 /* DeactivateAccountScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeactivateAccountScreenViewModel.swift; sourceTree = "<group>"; };
|
17BAE25A0E9E9F2F1BBA8930 /* DeactivateAccountScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeactivateAccountScreenViewModel.swift; sourceTree = "<group>"; };
|
||||||
181CF280BC8E3F335AFCB4B8 /* RemotePreferenceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemotePreferenceTests.swift; sourceTree = "<group>"; };
|
181CF280BC8E3F335AFCB4B8 /* RemotePreferenceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemotePreferenceTests.swift; sourceTree = "<group>"; };
|
||||||
@@ -1776,7 +1774,7 @@
|
|||||||
25E7E9B7FEAB6169D960C206 /* QRCodeLoginScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCodeLoginScreenViewModelTests.swift; sourceTree = "<group>"; };
|
25E7E9B7FEAB6169D960C206 /* QRCodeLoginScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QRCodeLoginScreenViewModelTests.swift; sourceTree = "<group>"; };
|
||||||
25F8664F1FB95AF3C4202478 /* PollFormScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollFormScreenCoordinator.swift; sourceTree = "<group>"; };
|
25F8664F1FB95AF3C4202478 /* PollFormScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollFormScreenCoordinator.swift; sourceTree = "<group>"; };
|
||||||
260004737C573A56FA01E86E /* Encodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Encodable.swift; sourceTree = "<group>"; };
|
260004737C573A56FA01E86E /* Encodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Encodable.swift; sourceTree = "<group>"; };
|
||||||
267BB1D5B08A9511F894CB57 /* PreviewTests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = PreviewTests.xctestplan; sourceTree = "<group>"; };
|
267BB1D5B08A9511F894CB57 /* PreviewTests.xctestplan */ = {isa = PBXFileReference; path = PreviewTests.xctestplan; sourceTree = "<group>"; };
|
||||||
26B0A96B8FE4849227945067 /* VoiceMessageRecorder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VoiceMessageRecorder.swift; sourceTree = "<group>"; };
|
26B0A96B8FE4849227945067 /* VoiceMessageRecorder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VoiceMessageRecorder.swift; sourceTree = "<group>"; };
|
||||||
26EAAB54C6CE91D64B69A9F8 /* AppLockServiceProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockServiceProtocol.swift; sourceTree = "<group>"; };
|
26EAAB54C6CE91D64B69A9F8 /* AppLockServiceProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockServiceProtocol.swift; sourceTree = "<group>"; };
|
||||||
2711E5996016ABD6EAAEB58A /* LogLevel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogLevel.swift; sourceTree = "<group>"; };
|
2711E5996016ABD6EAAEB58A /* LogLevel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogLevel.swift; sourceTree = "<group>"; };
|
||||||
@@ -1859,7 +1857,7 @@
|
|||||||
358528B29FA72ACFD0D9644B /* SpacesScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpacesScreenCoordinator.swift; sourceTree = "<group>"; };
|
358528B29FA72ACFD0D9644B /* SpacesScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpacesScreenCoordinator.swift; sourceTree = "<group>"; };
|
||||||
35A057BA9BE0F079784CD061 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
|
35A057BA9BE0F079784CD061 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
|
||||||
35AFCF4C05DEED04E3DB1A16 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; };
|
35AFCF4C05DEED04E3DB1A16 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||||
36DA824791172B9821EACBED /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
|
36DA824791172B9821EACBED /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
|
||||||
36FD673E24FBFCFDF398716A /* RoomMemberProxyMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMemberProxyMock.swift; sourceTree = "<group>"; };
|
36FD673E24FBFCFDF398716A /* RoomMemberProxyMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMemberProxyMock.swift; sourceTree = "<group>"; };
|
||||||
3747C96188856006F784BF49 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ko; path = ko.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
3747C96188856006F784BF49 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ko; path = ko.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
||||||
37A63A59BFDDC494B1C20119 /* CallScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallScreenViewModel.swift; sourceTree = "<group>"; };
|
37A63A59BFDDC494B1C20119 /* CallScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallScreenViewModel.swift; sourceTree = "<group>"; };
|
||||||
@@ -1978,7 +1976,7 @@
|
|||||||
4A2B5274C1D3D2999D643786 /* EncryptionResetPasswordScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptionResetPasswordScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
4A2B5274C1D3D2999D643786 /* EncryptionResetPasswordScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptionResetPasswordScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
||||||
4A5B4CD611DE7E94F5BA87B2 /* AppLockTimerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockTimerTests.swift; sourceTree = "<group>"; };
|
4A5B4CD611DE7E94F5BA87B2 /* AppLockTimerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockTimerTests.swift; sourceTree = "<group>"; };
|
||||||
4AB29A2D95D3469B5F016655 /* SecureBackupControllerMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureBackupControllerMock.swift; sourceTree = "<group>"; };
|
4AB29A2D95D3469B5F016655 /* SecureBackupControllerMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureBackupControllerMock.swift; sourceTree = "<group>"; };
|
||||||
4B1F71AC585827E6C416C15A /* AppIcon.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; path = AppIcon.icon; sourceTree = "<group>"; };
|
4B1F71AC585827E6C416C15A /* AppIcon.icon */ = {isa = PBXFileReference; path = AppIcon.icon; sourceTree = "<group>"; };
|
||||||
4B2B564CA6570E1487A7C7CC /* SpaceRoomListProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceRoomListProxy.swift; sourceTree = "<group>"; };
|
4B2B564CA6570E1487A7C7CC /* SpaceRoomListProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceRoomListProxy.swift; sourceTree = "<group>"; };
|
||||||
4B2D4EEBE8C098BBADD10939 /* SecureBackupKeyBackupScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureBackupKeyBackupScreenCoordinator.swift; sourceTree = "<group>"; };
|
4B2D4EEBE8C098BBADD10939 /* SecureBackupKeyBackupScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureBackupKeyBackupScreenCoordinator.swift; sourceTree = "<group>"; };
|
||||||
4B41FABA2B0AEF4389986495 /* LoginMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginMode.swift; sourceTree = "<group>"; };
|
4B41FABA2B0AEF4389986495 /* LoginMode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginMode.swift; sourceTree = "<group>"; };
|
||||||
@@ -2021,14 +2019,12 @@
|
|||||||
536E72DCBEEC4A1FE66CFDCE /* target.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = target.yml; sourceTree = "<group>"; };
|
536E72DCBEEC4A1FE66CFDCE /* target.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = target.yml; sourceTree = "<group>"; };
|
||||||
53F41CEAAE2BB4E74CDC2278 /* TimelineMediaPreviewViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineMediaPreviewViewModel.swift; sourceTree = "<group>"; };
|
53F41CEAAE2BB4E74CDC2278 /* TimelineMediaPreviewViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineMediaPreviewViewModel.swift; sourceTree = "<group>"; };
|
||||||
53FD6D3D38F556CEAA280C58 /* test_animated_image.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = test_animated_image.gif; sourceTree = "<group>"; };
|
53FD6D3D38F556CEAA280C58 /* test_animated_image.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = test_animated_image.gif; sourceTree = "<group>"; };
|
||||||
5416FE342A1E6A1B6D028999 /* SpaceServiceRoomProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceServiceRoomProtocol.swift; sourceTree = "<group>"; };
|
|
||||||
5445FCE0CE15E634FDC1A2E2 /* AnalyticsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsService.swift; sourceTree = "<group>"; };
|
5445FCE0CE15E634FDC1A2E2 /* AnalyticsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsService.swift; sourceTree = "<group>"; };
|
||||||
5484457C81B325660901B161 /* AppLockSetupSettingsScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockSetupSettingsScreen.swift; sourceTree = "<group>"; };
|
5484457C81B325660901B161 /* AppLockSetupSettingsScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockSetupSettingsScreen.swift; sourceTree = "<group>"; };
|
||||||
54A5E6F398C269AD52C9AE21 /* EncryptionResetPasswordScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptionResetPasswordScreenModels.swift; sourceTree = "<group>"; };
|
54A5E6F398C269AD52C9AE21 /* EncryptionResetPasswordScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptionResetPasswordScreenModels.swift; sourceTree = "<group>"; };
|
||||||
54A7923F0115CF17ABC8047F /* hr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hr; path = hr.lproj/SAS.strings; sourceTree = "<group>"; };
|
54A7923F0115CF17ABC8047F /* hr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hr; path = hr.lproj/SAS.strings; sourceTree = "<group>"; };
|
||||||
54AD70D6E03D2031AE1B5A52 /* TimelineReactionsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineReactionsView.swift; sourceTree = "<group>"; };
|
54AD70D6E03D2031AE1B5A52 /* TimelineReactionsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineReactionsView.swift; sourceTree = "<group>"; };
|
||||||
54C4E7B46099462F12000C91 /* DeveloperOptionsScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeveloperOptionsScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
54C4E7B46099462F12000C91 /* DeveloperOptionsScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeveloperOptionsScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
||||||
5530D3541C8832D858EB755A /* SpaceRoomInfoMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceRoomInfoMock.swift; sourceTree = "<group>"; };
|
|
||||||
5557DDA438841AF5DC003D0B /* SpaceListScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceListScreenViewModelTests.swift; sourceTree = "<group>"; };
|
5557DDA438841AF5DC003D0B /* SpaceListScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceListScreenViewModelTests.swift; sourceTree = "<group>"; };
|
||||||
55AEEF8142DF1B59DB40FB93 /* TimelineItemSender.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineItemSender.swift; sourceTree = "<group>"; };
|
55AEEF8142DF1B59DB40FB93 /* TimelineItemSender.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineItemSender.swift; sourceTree = "<group>"; };
|
||||||
5644919DB2022397D9D5825A /* MockSoftLogoutScreenState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockSoftLogoutScreenState.swift; sourceTree = "<group>"; };
|
5644919DB2022397D9D5825A /* MockSoftLogoutScreenState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockSoftLogoutScreenState.swift; sourceTree = "<group>"; };
|
||||||
@@ -2327,7 +2323,7 @@
|
|||||||
8D55702474F279D910D2D162 /* RoomStateEventStringBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomStateEventStringBuilder.swift; sourceTree = "<group>"; };
|
8D55702474F279D910D2D162 /* RoomStateEventStringBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomStateEventStringBuilder.swift; sourceTree = "<group>"; };
|
||||||
8D8169443E5AC5FF71BFB3DB /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = "<group>"; };
|
8D8169443E5AC5FF71BFB3DB /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||||
8DA1E8F287680C8ED25EDBAC /* NetworkMonitorMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkMonitorMock.swift; sourceTree = "<group>"; };
|
8DA1E8F287680C8ED25EDBAC /* NetworkMonitorMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkMonitorMock.swift; sourceTree = "<group>"; };
|
||||||
8E088F2A1B9EC529D3221931 /* UITests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = UITests.xctestplan; sourceTree = "<group>"; };
|
8E088F2A1B9EC529D3221931 /* UITests.xctestplan */ = {isa = PBXFileReference; path = UITests.xctestplan; sourceTree = "<group>"; };
|
||||||
8E1584F8BCF407BB94F48F04 /* EncryptionResetPasswordScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptionResetPasswordScreen.swift; sourceTree = "<group>"; };
|
8E1584F8BCF407BB94F48F04 /* EncryptionResetPasswordScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EncryptionResetPasswordScreen.swift; sourceTree = "<group>"; };
|
||||||
8EAF4A49F3ACD8BB8B0D2371 /* ClientSDKMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClientSDKMock.swift; sourceTree = "<group>"; };
|
8EAF4A49F3ACD8BB8B0D2371 /* ClientSDKMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClientSDKMock.swift; sourceTree = "<group>"; };
|
||||||
8F062DD2CCD95DC33528A16F /* KnockRequestProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KnockRequestProxy.swift; sourceTree = "<group>"; };
|
8F062DD2CCD95DC33528A16F /* KnockRequestProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KnockRequestProxy.swift; sourceTree = "<group>"; };
|
||||||
@@ -2478,7 +2474,7 @@
|
|||||||
AAD8234D0E9C9B12BF9F240B /* LocationAnnotation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationAnnotation.swift; sourceTree = "<group>"; };
|
AAD8234D0E9C9B12BF9F240B /* LocationAnnotation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationAnnotation.swift; sourceTree = "<group>"; };
|
||||||
AB07F03461023BC39C730922 /* PhishingDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhishingDetector.swift; sourceTree = "<group>"; };
|
AB07F03461023BC39C730922 /* PhishingDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhishingDetector.swift; sourceTree = "<group>"; };
|
||||||
AB26D5444A4A7E095222DE8B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.stringsdict"; sourceTree = "<group>"; };
|
AB26D5444A4A7E095222DE8B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.stringsdict"; sourceTree = "<group>"; };
|
||||||
AB389C38BD41EB3E47092CFB /* AccessibilityTests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = AccessibilityTests.xctestplan; sourceTree = "<group>"; };
|
AB389C38BD41EB3E47092CFB /* AccessibilityTests.xctestplan */ = {isa = PBXFileReference; path = AccessibilityTests.xctestplan; sourceTree = "<group>"; };
|
||||||
ABA4CF2F5B4F68D02E412004 /* ServerConfirmationScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerConfirmationScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
ABA4CF2F5B4F68D02E412004 /* ServerConfirmationScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerConfirmationScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
||||||
AC0275CEE9CA078B34028BDF /* AppLockScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockScreenViewModelTests.swift; sourceTree = "<group>"; };
|
AC0275CEE9CA078B34028BDF /* AppLockScreenViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockScreenViewModelTests.swift; sourceTree = "<group>"; };
|
||||||
AC1DA29A5A041CC0BACA7CB0 /* MockImageCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockImageCache.swift; sourceTree = "<group>"; };
|
AC1DA29A5A041CC0BACA7CB0 /* MockImageCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockImageCache.swift; sourceTree = "<group>"; };
|
||||||
@@ -2546,7 +2542,7 @@
|
|||||||
B53AC78E49A297AC1D72A7CF /* AppMediator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppMediator.swift; sourceTree = "<group>"; };
|
B53AC78E49A297AC1D72A7CF /* AppMediator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppMediator.swift; sourceTree = "<group>"; };
|
||||||
B590BD4507D4F0A377FDE01A /* LoadableAvatarImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadableAvatarImage.swift; sourceTree = "<group>"; };
|
B590BD4507D4F0A377FDE01A /* LoadableAvatarImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadableAvatarImage.swift; sourceTree = "<group>"; };
|
||||||
B5D829FD8958376614504B18 /* TargetConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TargetConfiguration.swift; sourceTree = "<group>"; };
|
B5D829FD8958376614504B18 /* TargetConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TargetConfiguration.swift; sourceTree = "<group>"; };
|
||||||
B61C339A2FDDBD067FF6635C /* ConfettiScene.scn */ = {isa = PBXFileReference; lastKnownFileType = file.bplist; path = ConfettiScene.scn; sourceTree = "<group>"; };
|
B61C339A2FDDBD067FF6635C /* ConfettiScene.scn */ = {isa = PBXFileReference; path = ConfettiScene.scn; sourceTree = "<group>"; };
|
||||||
B6404166CBF5CC88673FF9E2 /* RoomDetails.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomDetails.swift; sourceTree = "<group>"; };
|
B6404166CBF5CC88673FF9E2 /* RoomDetails.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomDetails.swift; sourceTree = "<group>"; };
|
||||||
B65DDCF8E41759890355ACBC /* AuthenticationStartScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationStartScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
B65DDCF8E41759890355ACBC /* AuthenticationStartScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationStartScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
||||||
B682FE2C44C5E163E7023B05 /* CopyTextButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CopyTextButton.swift; sourceTree = "<group>"; };
|
B682FE2C44C5E163E7023B05 /* CopyTextButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CopyTextButton.swift; sourceTree = "<group>"; };
|
||||||
@@ -2578,7 +2574,7 @@
|
|||||||
BA40B98B098B6F0371B750B3 /* TemplateScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TemplateScreenModels.swift; sourceTree = "<group>"; };
|
BA40B98B098B6F0371B750B3 /* TemplateScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TemplateScreenModels.swift; sourceTree = "<group>"; };
|
||||||
BA919F521E9F0EE3638AFC85 /* BugReportScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BugReportScreen.swift; sourceTree = "<group>"; };
|
BA919F521E9F0EE3638AFC85 /* BugReportScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BugReportScreen.swift; sourceTree = "<group>"; };
|
||||||
BB284643AF7AB131E307DCE0 /* AudioSessionProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioSessionProtocol.swift; sourceTree = "<group>"; };
|
BB284643AF7AB131E307DCE0 /* AudioSessionProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioSessionProtocol.swift; sourceTree = "<group>"; };
|
||||||
BB576F4118C35E6B5124FA22 /* test_apple_image.heic */ = {isa = PBXFileReference; lastKnownFileType = file; path = test_apple_image.heic; sourceTree = "<group>"; };
|
BB576F4118C35E6B5124FA22 /* test_apple_image.heic */ = {isa = PBXFileReference; path = test_apple_image.heic; sourceTree = "<group>"; };
|
||||||
BB5B00A014307CE37B2812CD /* TimelineViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineViewModelProtocol.swift; sourceTree = "<group>"; };
|
BB5B00A014307CE37B2812CD /* TimelineViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineViewModelProtocol.swift; sourceTree = "<group>"; };
|
||||||
BB6ED50FE104992419310EEB /* NotificationHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationHandler.swift; sourceTree = "<group>"; };
|
BB6ED50FE104992419310EEB /* NotificationHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationHandler.swift; sourceTree = "<group>"; };
|
||||||
BB8BC4C791D0E88CFCF4E5DF /* ServerSelectionScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerSelectionScreenCoordinator.swift; sourceTree = "<group>"; };
|
BB8BC4C791D0E88CFCF4E5DF /* ServerSelectionScreenCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerSelectionScreenCoordinator.swift; sourceTree = "<group>"; };
|
||||||
@@ -2684,7 +2680,7 @@
|
|||||||
CDB3227C7A74B734924942E9 /* RoomSummaryProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomSummaryProvider.swift; sourceTree = "<group>"; };
|
CDB3227C7A74B734924942E9 /* RoomSummaryProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomSummaryProvider.swift; sourceTree = "<group>"; };
|
||||||
CDE3F3911FF7CC639BDE5844 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = "<group>"; };
|
CDE3F3911FF7CC639BDE5844 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||||
CEE20623EB4A9B88FB29F2BA /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/SAS.strings; sourceTree = "<group>"; };
|
CEE20623EB4A9B88FB29F2BA /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/SAS.strings; sourceTree = "<group>"; };
|
||||||
CEE41494C837AA403A06A5D9 /* UnitTests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = UnitTests.xctestplan; sourceTree = "<group>"; };
|
CEE41494C837AA403A06A5D9 /* UnitTests.xctestplan */ = {isa = PBXFileReference; path = UnitTests.xctestplan; sourceTree = "<group>"; };
|
||||||
CF19027E7FFA5E63D148873A /* CreateRoomScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateRoomScreenViewModel.swift; sourceTree = "<group>"; };
|
CF19027E7FFA5E63D148873A /* CreateRoomScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateRoomScreenViewModel.swift; sourceTree = "<group>"; };
|
||||||
CF847A34FC4C8C937CD39E08 /* LabsScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabsScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
CF847A34FC4C8C937CD39E08 /* LabsScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabsScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
||||||
CFFA5E881D281810AB428EA3 /* RoomPowerLevelsProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomPowerLevelsProxy.swift; sourceTree = "<group>"; };
|
CFFA5E881D281810AB428EA3 /* RoomPowerLevelsProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomPowerLevelsProxy.swift; sourceTree = "<group>"; };
|
||||||
@@ -2753,7 +2749,7 @@
|
|||||||
DC0AEA686E425F86F6BA0404 /* UNNotification+Creator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UNNotification+Creator.swift"; sourceTree = "<group>"; };
|
DC0AEA686E425F86F6BA0404 /* UNNotification+Creator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UNNotification+Creator.swift"; sourceTree = "<group>"; };
|
||||||
DC10CCC8D68B863E20660DBC /* MessageForwardingScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageForwardingScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
DC10CCC8D68B863E20660DBC /* MessageForwardingScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageForwardingScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
||||||
DC528B3764E3CF7FCFEF40E7 /* PollInteractionHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollInteractionHandler.swift; sourceTree = "<group>"; };
|
DC528B3764E3CF7FCFEF40E7 /* PollInteractionHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollInteractionHandler.swift; sourceTree = "<group>"; };
|
||||||
DCA2D836BD10303F37FAAEED /* test_voice_message.m4a */ = {isa = PBXFileReference; lastKnownFileType = file; path = test_voice_message.m4a; sourceTree = "<group>"; };
|
DCA2D836BD10303F37FAAEED /* test_voice_message.m4a */ = {isa = PBXFileReference; path = test_voice_message.m4a; sourceTree = "<group>"; };
|
||||||
DCAC01A97A43BE07B9E94E43 /* ShareExtensionModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareExtensionModels.swift; sourceTree = "<group>"; };
|
DCAC01A97A43BE07B9E94E43 /* ShareExtensionModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareExtensionModels.swift; sourceTree = "<group>"; };
|
||||||
DCDAB580109C09A6AA97AF7E /* PollFormScreenTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollFormScreenTests.swift; sourceTree = "<group>"; };
|
DCDAB580109C09A6AA97AF7E /* PollFormScreenTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PollFormScreenTests.swift; sourceTree = "<group>"; };
|
||||||
DCF239C619971FDE48132550 /* SecureBackupLogoutConfirmationScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureBackupLogoutConfirmationScreenModels.swift; sourceTree = "<group>"; };
|
DCF239C619971FDE48132550 /* SecureBackupLogoutConfirmationScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureBackupLogoutConfirmationScreenModels.swift; sourceTree = "<group>"; };
|
||||||
@@ -2799,7 +2795,7 @@
|
|||||||
E5272BC4A60B6AD7553BACA1 /* BlurHashDecode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlurHashDecode.swift; sourceTree = "<group>"; };
|
E5272BC4A60B6AD7553BACA1 /* BlurHashDecode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlurHashDecode.swift; sourceTree = "<group>"; };
|
||||||
E53BFB7E4F329621C844E8C3 /* AnalyticsPromptScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsPromptScreen.swift; sourceTree = "<group>"; };
|
E53BFB7E4F329621C844E8C3 /* AnalyticsPromptScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsPromptScreen.swift; sourceTree = "<group>"; };
|
||||||
E55B5EA766E89FF1F87C3ACB /* RoomNotificationSettingsProxyProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomNotificationSettingsProxyProtocol.swift; sourceTree = "<group>"; };
|
E55B5EA766E89FF1F87C3ACB /* RoomNotificationSettingsProxyProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomNotificationSettingsProxyProtocol.swift; sourceTree = "<group>"; };
|
||||||
E5E7D4EE7CA295E5039FDA21 /* portrait_test_video.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = portrait_test_video.mp4; sourceTree = "<group>"; };
|
E5E7D4EE7CA295E5039FDA21 /* portrait_test_video.mp4 */ = {isa = PBXFileReference; path = portrait_test_video.mp4; sourceTree = "<group>"; };
|
||||||
E5E94DCFEE803E5ABAE8ACCE /* KeychainControllerProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainControllerProtocol.swift; sourceTree = "<group>"; };
|
E5E94DCFEE803E5ABAE8ACCE /* KeychainControllerProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainControllerProtocol.swift; sourceTree = "<group>"; };
|
||||||
E5F2B6443D1ED8602F328539 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ru; path = ru.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
E5F2B6443D1ED8602F328539 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ru; path = ru.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
|
||||||
E5FDFAA04174CC99FB66391C /* EditRoomAddressScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditRoomAddressScreenViewModel.swift; sourceTree = "<group>"; };
|
E5FDFAA04174CC99FB66391C /* EditRoomAddressScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditRoomAddressScreenViewModel.swift; sourceTree = "<group>"; };
|
||||||
@@ -2847,7 +2843,7 @@
|
|||||||
ED0CBEAB5F796BEFBAF7BB6A /* VideoRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoRoomTimelineView.swift; sourceTree = "<group>"; };
|
ED0CBEAB5F796BEFBAF7BB6A /* VideoRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoRoomTimelineView.swift; sourceTree = "<group>"; };
|
||||||
ED1D792EB82506A19A72C8DE /* RoomTimelineItemProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomTimelineItemProtocol.swift; sourceTree = "<group>"; };
|
ED1D792EB82506A19A72C8DE /* RoomTimelineItemProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomTimelineItemProtocol.swift; sourceTree = "<group>"; };
|
||||||
ED33988DA4FD4FC666800106 /* SessionVerificationScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionVerificationScreenViewModel.swift; sourceTree = "<group>"; };
|
ED33988DA4FD4FC666800106 /* SessionVerificationScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionVerificationScreenViewModel.swift; sourceTree = "<group>"; };
|
||||||
ED482057AE39D5C6D9C5F3D8 /* message.caf */ = {isa = PBXFileReference; lastKnownFileType = file; path = message.caf; sourceTree = "<group>"; };
|
ED482057AE39D5C6D9C5F3D8 /* message.caf */ = {isa = PBXFileReference; path = message.caf; sourceTree = "<group>"; };
|
||||||
ED49073BB1C1FC649DAC2CCD /* LocationRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationRoomTimelineView.swift; sourceTree = "<group>"; };
|
ED49073BB1C1FC649DAC2CCD /* LocationRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationRoomTimelineView.swift; sourceTree = "<group>"; };
|
||||||
ED60E4D2CD678E1EBF16F77A /* BlockedUsersScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockedUsersScreen.swift; sourceTree = "<group>"; };
|
ED60E4D2CD678E1EBF16F77A /* BlockedUsersScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockedUsersScreen.swift; sourceTree = "<group>"; };
|
||||||
EDDE826EAB1BAB80C1104980 /* SpaceFlowCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceFlowCoordinator.swift; sourceTree = "<group>"; };
|
EDDE826EAB1BAB80C1104980 /* SpaceFlowCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpaceFlowCoordinator.swift; sourceTree = "<group>"; };
|
||||||
@@ -3674,7 +3670,6 @@
|
|||||||
FC83F47D2173B7538AA72E0E /* RoomSummaryProviderMock.swift */,
|
FC83F47D2173B7538AA72E0E /* RoomSummaryProviderMock.swift */,
|
||||||
4AB29A2D95D3469B5F016655 /* SecureBackupControllerMock.swift */,
|
4AB29A2D95D3469B5F016655 /* SecureBackupControllerMock.swift */,
|
||||||
248649EBA5BC33DB93698734 /* SessionVerificationControllerProxyMock.swift */,
|
248649EBA5BC33DB93698734 /* SessionVerificationControllerProxyMock.swift */,
|
||||||
5530D3541C8832D858EB755A /* SpaceRoomInfoMock.swift */,
|
|
||||||
7DB2A5FF1E68BA580A20D405 /* SpaceRoomListProxyMock.swift */,
|
7DB2A5FF1E68BA580A20D405 /* SpaceRoomListProxyMock.swift */,
|
||||||
EF36FC3DE25B20B7FA91F1FD /* SpaceServiceProxyMock.swift */,
|
EF36FC3DE25B20B7FA91F1FD /* SpaceServiceProxyMock.swift */,
|
||||||
B0F5CC38803B8382D2C63222 /* TimelineControllerFactoryMock.swift */,
|
B0F5CC38803B8382D2C63222 /* TimelineControllerFactoryMock.swift */,
|
||||||
@@ -5774,7 +5769,6 @@
|
|||||||
226A56746AD99ABDA97189E1 /* SpaceServiceProxy.swift */,
|
226A56746AD99ABDA97189E1 /* SpaceServiceProxy.swift */,
|
||||||
C57DB49B8426AA721BF85D83 /* SpaceServiceProxyProtocol.swift */,
|
C57DB49B8426AA721BF85D83 /* SpaceServiceProxyProtocol.swift */,
|
||||||
CCAA1B97A17A750AC706B112 /* SpaceServiceRoom.swift */,
|
CCAA1B97A17A750AC706B112 /* SpaceServiceRoom.swift */,
|
||||||
5416FE342A1E6A1B6D028999 /* SpaceServiceRoomProtocol.swift */,
|
|
||||||
);
|
);
|
||||||
path = Spaces;
|
path = Spaces;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -7237,6 +7231,7 @@
|
|||||||
EE40B0E16A55BD23ECBFFD22 /* XCRemoteSwiftPackageReference "matrix-rich-text-editor-swift" */,
|
EE40B0E16A55BD23ECBFFD22 /* XCRemoteSwiftPackageReference "matrix-rich-text-editor-swift" */,
|
||||||
C89CF7729E028671C5DC461E /* XCLocalSwiftPackageReference "compound-ios" */,
|
C89CF7729E028671C5DC461E /* XCLocalSwiftPackageReference "compound-ios" */,
|
||||||
);
|
);
|
||||||
|
preferredProjectObjectVersion = 77;
|
||||||
projectDirPath = "";
|
projectDirPath = "";
|
||||||
projectRoot = "";
|
projectRoot = "";
|
||||||
targets = (
|
targets = (
|
||||||
@@ -8638,7 +8633,6 @@
|
|||||||
E9B4742B3D6E103327466513 /* SpaceHeaderView.swift in Sources */,
|
E9B4742B3D6E103327466513 /* SpaceHeaderView.swift in Sources */,
|
||||||
36DCA11EA7320A45A4CC8D07 /* SpaceRemoveChildrenConfirmationView.swift in Sources */,
|
36DCA11EA7320A45A4CC8D07 /* SpaceRemoveChildrenConfirmationView.swift in Sources */,
|
||||||
9B84F55288AB98783C11CC49 /* SpaceRoomCell.swift in Sources */,
|
9B84F55288AB98783C11CC49 /* SpaceRoomCell.swift in Sources */,
|
||||||
913BCABB99796F82E3D8D93D /* SpaceRoomInfoMock.swift in Sources */,
|
|
||||||
0DAB08C117E0391F3ADB2031 /* SpaceRoomListProxy.swift in Sources */,
|
0DAB08C117E0391F3ADB2031 /* SpaceRoomListProxy.swift in Sources */,
|
||||||
9FBF0078657CA4F2A9747E98 /* SpaceRoomListProxyMock.swift in Sources */,
|
9FBF0078657CA4F2A9747E98 /* SpaceRoomListProxyMock.swift in Sources */,
|
||||||
2EAA1B35D9CA24F090F48792 /* SpaceRoomListProxyProtocol.swift in Sources */,
|
2EAA1B35D9CA24F090F48792 /* SpaceRoomListProxyProtocol.swift in Sources */,
|
||||||
@@ -8651,7 +8645,6 @@
|
|||||||
A2091F4B1332D9BF273B09D5 /* SpaceServiceProxyMock.swift in Sources */,
|
A2091F4B1332D9BF273B09D5 /* SpaceServiceProxyMock.swift in Sources */,
|
||||||
DB5200B87C4CE9DF0024AC4E /* SpaceServiceProxyProtocol.swift in Sources */,
|
DB5200B87C4CE9DF0024AC4E /* SpaceServiceProxyProtocol.swift in Sources */,
|
||||||
612196AF7826846A50C07FA6 /* SpaceServiceRoom.swift in Sources */,
|
612196AF7826846A50C07FA6 /* SpaceServiceRoom.swift in Sources */,
|
||||||
F4F29FF972C0C8B38757B2DD /* SpaceServiceRoomProtocol.swift in Sources */,
|
|
||||||
D0E257557DAC8A34C7B52A9F /* SpaceSettingsFlowCoordinator.swift in Sources */,
|
D0E257557DAC8A34C7B52A9F /* SpaceSettingsFlowCoordinator.swift in Sources */,
|
||||||
383063A7924F06D54BA9B24C /* SpaceSettingsScreen.swift in Sources */,
|
383063A7924F06D54BA9B24C /* SpaceSettingsScreen.swift in Sources */,
|
||||||
0EC0AF8287D6E698969FC25B /* SpacesAnnouncementSheetView.swift in Sources */,
|
0EC0AF8287D6E698969FC25B /* SpacesAnnouncementSheetView.swift in Sources */,
|
||||||
@@ -9150,7 +9143,9 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@loader_path/Frameworks",
|
"@loader_path/Frameworks",
|
||||||
);
|
);
|
||||||
OTHER_SWIFT_FLAGS = "-DRELEASE";
|
OTHER_SWIFT_FLAGS = (
|
||||||
|
"-DRELEASE",
|
||||||
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.accessibility.tests";
|
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.accessibility.tests";
|
||||||
PRODUCT_NAME = AccessibilityTests;
|
PRODUCT_NAME = AccessibilityTests;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
@@ -9169,7 +9164,9 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@loader_path/Frameworks",
|
"@loader_path/Frameworks",
|
||||||
);
|
);
|
||||||
OTHER_SWIFT_FLAGS = "-DDEBUG";
|
OTHER_SWIFT_FLAGS = (
|
||||||
|
"-DDEBUG",
|
||||||
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.accessibility.tests";
|
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.accessibility.tests";
|
||||||
PRODUCT_NAME = AccessibilityTests;
|
PRODUCT_NAME = AccessibilityTests;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
@@ -9191,7 +9188,9 @@
|
|||||||
"@executable_path/../../Frameworks",
|
"@executable_path/../../Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = "$(MARKETING_VERSION)";
|
MARKETING_VERSION = "$(MARKETING_VERSION)";
|
||||||
OTHER_SWIFT_FLAGS = "-DIS_NSE";
|
OTHER_SWIFT_FLAGS = (
|
||||||
|
"-DIS_NSE",
|
||||||
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.nse";
|
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.nse";
|
||||||
PRODUCT_DISPLAY_NAME = "$(APP_DISPLAY_NAME)";
|
PRODUCT_DISPLAY_NAME = "$(APP_DISPLAY_NAME)";
|
||||||
PRODUCT_NAME = NSE;
|
PRODUCT_NAME = NSE;
|
||||||
@@ -9258,7 +9257,9 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"-ObjC",
|
"-ObjC",
|
||||||
);
|
);
|
||||||
OTHER_SWIFT_FLAGS = "-DIS_MAIN_APP";
|
OTHER_SWIFT_FLAGS = (
|
||||||
|
"-DIS_MAIN_APP",
|
||||||
|
);
|
||||||
PILLS_UT_TYPE_IDENTIFIER = "$(BASE_BUNDLE_IDENTIFIER).pills";
|
PILLS_UT_TYPE_IDENTIFIER = "$(BASE_BUNDLE_IDENTIFIER).pills";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "$(BASE_BUNDLE_IDENTIFIER)";
|
PRODUCT_BUNDLE_IDENTIFIER = "$(BASE_BUNDLE_IDENTIFIER)";
|
||||||
PRODUCT_NAME = "$(APP_NAME)";
|
PRODUCT_NAME = "$(APP_NAME)";
|
||||||
@@ -9288,7 +9289,9 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"-ObjC",
|
"-ObjC",
|
||||||
);
|
);
|
||||||
OTHER_SWIFT_FLAGS = "-DIS_MAIN_APP";
|
OTHER_SWIFT_FLAGS = (
|
||||||
|
"-DIS_MAIN_APP",
|
||||||
|
);
|
||||||
PILLS_UT_TYPE_IDENTIFIER = "$(BASE_BUNDLE_IDENTIFIER).pills";
|
PILLS_UT_TYPE_IDENTIFIER = "$(BASE_BUNDLE_IDENTIFIER).pills";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "$(BASE_BUNDLE_IDENTIFIER)";
|
PRODUCT_BUNDLE_IDENTIFIER = "$(BASE_BUNDLE_IDENTIFIER)";
|
||||||
PRODUCT_NAME = "$(APP_NAME)";
|
PRODUCT_NAME = "$(APP_NAME)";
|
||||||
@@ -9513,7 +9516,9 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@loader_path/Frameworks",
|
"@loader_path/Frameworks",
|
||||||
);
|
);
|
||||||
OTHER_SWIFT_FLAGS = "-DDEBUG";
|
OTHER_SWIFT_FLAGS = (
|
||||||
|
"-DDEBUG",
|
||||||
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.ui.tests";
|
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.ui.tests";
|
||||||
PRODUCT_NAME = UITests;
|
PRODUCT_NAME = UITests;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
@@ -9532,7 +9537,9 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@loader_path/Frameworks",
|
"@loader_path/Frameworks",
|
||||||
);
|
);
|
||||||
OTHER_SWIFT_FLAGS = "-DRELEASE";
|
OTHER_SWIFT_FLAGS = (
|
||||||
|
"-DRELEASE",
|
||||||
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.ui.tests";
|
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.ui.tests";
|
||||||
PRODUCT_NAME = UITests;
|
PRODUCT_NAME = UITests;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
@@ -9554,7 +9561,9 @@
|
|||||||
"@executable_path/../../Frameworks",
|
"@executable_path/../../Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = "$(MARKETING_VERSION)";
|
MARKETING_VERSION = "$(MARKETING_VERSION)";
|
||||||
OTHER_SWIFT_FLAGS = "-DIS_NSE";
|
OTHER_SWIFT_FLAGS = (
|
||||||
|
"-DIS_NSE",
|
||||||
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.nse";
|
PRODUCT_BUNDLE_IDENTIFIER = "${BASE_BUNDLE_IDENTIFIER}.nse";
|
||||||
PRODUCT_DISPLAY_NAME = "$(APP_DISPLAY_NAME)";
|
PRODUCT_DISPLAY_NAME = "$(APP_DISPLAY_NAME)";
|
||||||
PRODUCT_NAME = NSE;
|
PRODUCT_NAME = NSE;
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ enum SpaceFlowCoordinatorAction {
|
|||||||
|
|
||||||
enum SpaceFlowCoordinatorEntryPoint {
|
enum SpaceFlowCoordinatorEntryPoint {
|
||||||
case space(SpaceRoomListProxyProtocol)
|
case space(SpaceRoomListProxyProtocol)
|
||||||
case joinSpace(SpaceServiceRoomProtocol)
|
case joinSpace(SpaceServiceRoom)
|
||||||
|
|
||||||
var spaceID: String {
|
var spaceID: String {
|
||||||
switch self {
|
switch self {
|
||||||
@@ -301,7 +301,7 @@ class SpaceFlowCoordinator: FlowCoordinatorProtocol {
|
|||||||
guard event == .startCreateChildRoomFlow, case .space = fromState else { return nil }
|
guard event == .startCreateChildRoomFlow, case .space = fromState else { return nil }
|
||||||
return .createChildRoomFlow
|
return .createChildRoomFlow
|
||||||
} handler: { [weak self] context in
|
} 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)
|
self?.startCreateChildFlow(space: space)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -561,7 +561,7 @@ class SpaceFlowCoordinator: FlowCoordinatorProtocol {
|
|||||||
flowCoordinator.start()
|
flowCoordinator.start()
|
||||||
}
|
}
|
||||||
|
|
||||||
private func startCreateChildFlow(space: SpaceServiceRoomProtocol) {
|
private func startCreateChildFlow(space: SpaceServiceRoom) {
|
||||||
let stackCoordinator = NavigationStackCoordinator()
|
let stackCoordinator = NavigationStackCoordinator()
|
||||||
let flowCoordinator = StartChatFlowCoordinator(entryPoint: .createRoomInSpace(space),
|
let flowCoordinator = StartChatFlowCoordinator(entryPoint: .createRoomInSpace(space),
|
||||||
userDiscoveryService: UserDiscoveryService(clientProxy: flowParameters.userSession.clientProxy),
|
userDiscoveryService: UserDiscoveryService(clientProxy: flowParameters.userSession.clientProxy),
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ enum StartChatFlowCoordinatorAction {
|
|||||||
enum StartChatFlowCoordinatorEntryPoint {
|
enum StartChatFlowCoordinatorEntryPoint {
|
||||||
case startChat
|
case startChat
|
||||||
case createSpace
|
case createSpace
|
||||||
case createRoomInSpace(SpaceServiceRoomProtocol)
|
case createRoomInSpace(SpaceServiceRoom)
|
||||||
}
|
}
|
||||||
|
|
||||||
class StartChatFlowCoordinator: FlowCoordinatorProtocol {
|
class StartChatFlowCoordinator: FlowCoordinatorProtocol {
|
||||||
@@ -141,7 +141,7 @@ class StartChatFlowCoordinator: FlowCoordinatorProtocol {
|
|||||||
}
|
}
|
||||||
stateMachine.addRoutes(event: .createRoom(isSpace: false), transitions: [.initial => .createRoom]) { [weak self] context in
|
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 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.")
|
fatalError("This transition only supports creating a room in a pre-selected space.")
|
||||||
}
|
}
|
||||||
self?.presentCreateRoomScreen(isSpace: false, spaceSelectionMode: .preSelected(space), isRoot: true)
|
self?.presentCreateRoomScreen(isSpace: false, spaceSelectionMode: .preSelected(space), isRoot: true)
|
||||||
|
|||||||
@@ -16721,16 +16721,16 @@ class SpaceRoomListProxyMock: SpaceRoomListProxyProtocol, @unchecked Sendable {
|
|||||||
set(value) { underlyingId = value }
|
set(value) { underlyingId = value }
|
||||||
}
|
}
|
||||||
var underlyingId: String!
|
var underlyingId: String!
|
||||||
var spaceServiceRoomPublisher: CurrentValuePublisher<SpaceServiceRoomProtocol, Never> {
|
var spaceServiceRoomPublisher: CurrentValuePublisher<SpaceServiceRoom, Never> {
|
||||||
get { return underlyingSpaceServiceRoomPublisher }
|
get { return underlyingSpaceServiceRoomPublisher }
|
||||||
set(value) { underlyingSpaceServiceRoomPublisher = value }
|
set(value) { underlyingSpaceServiceRoomPublisher = value }
|
||||||
}
|
}
|
||||||
var underlyingSpaceServiceRoomPublisher: CurrentValuePublisher<SpaceServiceRoomProtocol, Never>!
|
var underlyingSpaceServiceRoomPublisher: CurrentValuePublisher<SpaceServiceRoom, Never>!
|
||||||
var spaceRoomsPublisher: CurrentValuePublisher<[SpaceServiceRoomProtocol], Never> {
|
var spaceRoomsPublisher: CurrentValuePublisher<[SpaceServiceRoom], Never> {
|
||||||
get { return underlyingSpaceRoomsPublisher }
|
get { return underlyingSpaceRoomsPublisher }
|
||||||
set(value) { underlyingSpaceRoomsPublisher = value }
|
set(value) { underlyingSpaceRoomsPublisher = value }
|
||||||
}
|
}
|
||||||
var underlyingSpaceRoomsPublisher: CurrentValuePublisher<[SpaceServiceRoomProtocol], Never>!
|
var underlyingSpaceRoomsPublisher: CurrentValuePublisher<[SpaceServiceRoom], Never>!
|
||||||
var paginationStatePublisher: CurrentValuePublisher<SpaceRoomListPaginationState, Never> {
|
var paginationStatePublisher: CurrentValuePublisher<SpaceRoomListPaginationState, Never> {
|
||||||
get { return underlyingPaginationStatePublisher }
|
get { return underlyingPaginationStatePublisher }
|
||||||
set(value) { underlyingPaginationStatePublisher = value }
|
set(value) { underlyingPaginationStatePublisher = value }
|
||||||
@@ -16809,11 +16809,11 @@ class SpaceRoomListProxyMock: SpaceRoomListProxyProtocol, @unchecked Sendable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
class SpaceServiceProxyMock: SpaceServiceProxyProtocol, @unchecked Sendable {
|
class SpaceServiceProxyMock: SpaceServiceProxyProtocol, @unchecked Sendable {
|
||||||
var topLevelSpacesPublisher: CurrentValuePublisher<[SpaceServiceRoomProtocol], Never> {
|
var topLevelSpacesPublisher: CurrentValuePublisher<[SpaceServiceRoom], Never> {
|
||||||
get { return underlyingTopLevelSpacesPublisher }
|
get { return underlyingTopLevelSpacesPublisher }
|
||||||
set(value) { underlyingTopLevelSpacesPublisher = value }
|
set(value) { underlyingTopLevelSpacesPublisher = value }
|
||||||
}
|
}
|
||||||
var underlyingTopLevelSpacesPublisher: CurrentValuePublisher<[SpaceServiceRoomProtocol], Never>!
|
var underlyingTopLevelSpacesPublisher: CurrentValuePublisher<[SpaceServiceRoom], Never>!
|
||||||
var spaceFilterPublisher: CurrentValuePublisher<[SpaceServiceFilter], Never> {
|
var spaceFilterPublisher: CurrentValuePublisher<[SpaceServiceFilter], Never> {
|
||||||
get { return underlyingSpaceFilterPublisher }
|
get { return underlyingSpaceFilterPublisher }
|
||||||
set(value) { underlyingSpaceFilterPublisher = value }
|
set(value) { underlyingSpaceFilterPublisher = value }
|
||||||
@@ -16922,13 +16922,13 @@ class SpaceServiceProxyMock: SpaceServiceProxyProtocol, @unchecked Sendable {
|
|||||||
var spaceForIdentifierSpaceIDReceivedSpaceID: String?
|
var spaceForIdentifierSpaceIDReceivedSpaceID: String?
|
||||||
var spaceForIdentifierSpaceIDReceivedInvocations: [String] = []
|
var spaceForIdentifierSpaceIDReceivedInvocations: [String] = []
|
||||||
|
|
||||||
var spaceForIdentifierSpaceIDUnderlyingReturnValue: Result<SpaceServiceRoomProtocol?, SpaceServiceProxyError>!
|
var spaceForIdentifierSpaceIDUnderlyingReturnValue: Result<SpaceServiceRoom?, SpaceServiceProxyError>!
|
||||||
var spaceForIdentifierSpaceIDReturnValue: Result<SpaceServiceRoomProtocol?, SpaceServiceProxyError>! {
|
var spaceForIdentifierSpaceIDReturnValue: Result<SpaceServiceRoom?, SpaceServiceProxyError>! {
|
||||||
get {
|
get {
|
||||||
if Thread.isMainThread {
|
if Thread.isMainThread {
|
||||||
return spaceForIdentifierSpaceIDUnderlyingReturnValue
|
return spaceForIdentifierSpaceIDUnderlyingReturnValue
|
||||||
} else {
|
} else {
|
||||||
var returnValue: Result<SpaceServiceRoomProtocol?, SpaceServiceProxyError>? = nil
|
var returnValue: Result<SpaceServiceRoom?, SpaceServiceProxyError>? = nil
|
||||||
DispatchQueue.main.sync {
|
DispatchQueue.main.sync {
|
||||||
returnValue = spaceForIdentifierSpaceIDUnderlyingReturnValue
|
returnValue = spaceForIdentifierSpaceIDUnderlyingReturnValue
|
||||||
}
|
}
|
||||||
@@ -16946,9 +16946,9 @@ class SpaceServiceProxyMock: SpaceServiceProxyProtocol, @unchecked Sendable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var spaceForIdentifierSpaceIDClosure: ((String) async -> Result<SpaceServiceRoomProtocol?, SpaceServiceProxyError>)?
|
var spaceForIdentifierSpaceIDClosure: ((String) async -> Result<SpaceServiceRoom?, SpaceServiceProxyError>)?
|
||||||
|
|
||||||
func spaceForIdentifier(spaceID: String) async -> Result<SpaceServiceRoomProtocol?, SpaceServiceProxyError> {
|
func spaceForIdentifier(spaceID: String) async -> Result<SpaceServiceRoom?, SpaceServiceProxyError> {
|
||||||
spaceForIdentifierSpaceIDCallsCount += 1
|
spaceForIdentifierSpaceIDCallsCount += 1
|
||||||
spaceForIdentifierSpaceIDReceivedSpaceID = spaceID
|
spaceForIdentifierSpaceIDReceivedSpaceID = spaceID
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
@@ -17062,13 +17062,13 @@ class SpaceServiceProxyMock: SpaceServiceProxyProtocol, @unchecked Sendable {
|
|||||||
var joinedParentsChildIDReceivedChildID: String?
|
var joinedParentsChildIDReceivedChildID: String?
|
||||||
var joinedParentsChildIDReceivedInvocations: [String] = []
|
var joinedParentsChildIDReceivedInvocations: [String] = []
|
||||||
|
|
||||||
var joinedParentsChildIDUnderlyingReturnValue: Result<[SpaceServiceRoomProtocol], SpaceServiceProxyError>!
|
var joinedParentsChildIDUnderlyingReturnValue: Result<[SpaceServiceRoom], SpaceServiceProxyError>!
|
||||||
var joinedParentsChildIDReturnValue: Result<[SpaceServiceRoomProtocol], SpaceServiceProxyError>! {
|
var joinedParentsChildIDReturnValue: Result<[SpaceServiceRoom], SpaceServiceProxyError>! {
|
||||||
get {
|
get {
|
||||||
if Thread.isMainThread {
|
if Thread.isMainThread {
|
||||||
return joinedParentsChildIDUnderlyingReturnValue
|
return joinedParentsChildIDUnderlyingReturnValue
|
||||||
} else {
|
} else {
|
||||||
var returnValue: Result<[SpaceServiceRoomProtocol], SpaceServiceProxyError>? = nil
|
var returnValue: Result<[SpaceServiceRoom], SpaceServiceProxyError>? = nil
|
||||||
DispatchQueue.main.sync {
|
DispatchQueue.main.sync {
|
||||||
returnValue = joinedParentsChildIDUnderlyingReturnValue
|
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
|
joinedParentsChildIDCallsCount += 1
|
||||||
joinedParentsChildIDReceivedChildID = childID
|
joinedParentsChildIDReceivedChildID = childID
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
@@ -17130,13 +17130,13 @@ class SpaceServiceProxyMock: SpaceServiceProxyProtocol, @unchecked Sendable {
|
|||||||
return editableSpacesCallsCount > 0
|
return editableSpacesCallsCount > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
var editableSpacesUnderlyingReturnValue: [SpaceServiceRoomProtocol]!
|
var editableSpacesUnderlyingReturnValue: [SpaceServiceRoom]!
|
||||||
var editableSpacesReturnValue: [SpaceServiceRoomProtocol]! {
|
var editableSpacesReturnValue: [SpaceServiceRoom]! {
|
||||||
get {
|
get {
|
||||||
if Thread.isMainThread {
|
if Thread.isMainThread {
|
||||||
return editableSpacesUnderlyingReturnValue
|
return editableSpacesUnderlyingReturnValue
|
||||||
} else {
|
} else {
|
||||||
var returnValue: [SpaceServiceRoomProtocol]? = nil
|
var returnValue: [SpaceServiceRoom]? = nil
|
||||||
DispatchQueue.main.sync {
|
DispatchQueue.main.sync {
|
||||||
returnValue = editableSpacesUnderlyingReturnValue
|
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
|
editableSpacesCallsCount += 1
|
||||||
if let editableSpacesClosure = editableSpacesClosure {
|
if let editableSpacesClosure = editableSpacesClosure {
|
||||||
return await 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 {
|
class StaticRoomSummaryProviderMock: StaticRoomSummaryProviderProtocol, @unchecked Sendable {
|
||||||
var statePublisher: CurrentValuePublisher<RoomSummaryProviderState, Never> {
|
var statePublisher: CurrentValuePublisher<RoomSummaryProviderState, Never> {
|
||||||
get { return underlyingStatePublisher }
|
get { return underlyingStatePublisher }
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ extension RoomPreviewProxyMock {
|
|||||||
underlyingOwnMembershipDetails = roomMembershipDetails
|
underlyingOwnMembershipDetails = roomMembershipDetails
|
||||||
}
|
}
|
||||||
|
|
||||||
convenience init(spaceServiceRoom: SpaceServiceRoomProtocol) {
|
convenience init(spaceServiceRoom: SpaceServiceRoom) {
|
||||||
self.init(Configuration(roomID: spaceServiceRoom.id,
|
self.init(Configuration(roomID: spaceServiceRoom.id,
|
||||||
canonicalAlias: spaceServiceRoom.canonicalAlias ?? "",
|
canonicalAlias: spaceServiceRoom.canonicalAlias ?? "",
|
||||||
name: spaceServiceRoom.name,
|
name: spaceServiceRoom.name,
|
||||||
|
|||||||
@@ -23,11 +23,11 @@ extension LeaveSpaceHandleSDKMock {
|
|||||||
}
|
}
|
||||||
|
|
||||||
extension [LeaveSpaceRoom] {
|
extension [LeaveSpaceRoom] {
|
||||||
static func mockRoomsWithSpace(spaceServiceRoom: SpaceServiceRoomProtocol, isLastOwner: Bool) -> [LeaveSpaceRoom] {
|
static func mockRoomsWithSpace(spaceServiceRoom: SpaceServiceRoom, isLastOwner: Bool) -> [LeaveSpaceRoom] {
|
||||||
mockRooms + mockSingleSpace(spaceServiceRoom: spaceServiceRoom, isLastOwner: isLastOwner)
|
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,
|
[LeaveSpaceRoom(spaceRoom: SpaceRoom(id: spaceServiceRoom.id,
|
||||||
name: spaceServiceRoom.name,
|
name: spaceServiceRoom.name,
|
||||||
avatarURL: spaceServiceRoom.avatarURL,
|
avatarURL: spaceServiceRoom.avatarURL,
|
||||||
|
|||||||
@@ -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))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -12,15 +12,15 @@ import MatrixRustSDK
|
|||||||
|
|
||||||
extension SpaceRoomListProxyMock {
|
extension SpaceRoomListProxyMock {
|
||||||
class Configuration {
|
class Configuration {
|
||||||
var spaceServiceRoom: SpaceServiceRoomProtocol
|
var spaceServiceRoom: SpaceServiceRoom
|
||||||
var initialSpaceRooms: [SpaceServiceRoomProtocol]
|
var initialSpaceRooms: [SpaceServiceRoom]
|
||||||
var paginationStateSubject: CurrentValueSubject<SpaceRoomListPaginationState, Never>
|
var paginationStateSubject: CurrentValueSubject<SpaceRoomListPaginationState, Never>
|
||||||
var paginationResponses: [[SpaceServiceRoomProtocol]]
|
var paginationResponses: [[SpaceServiceRoom]]
|
||||||
|
|
||||||
init(spaceServiceRoom: SpaceServiceRoomProtocol,
|
init(spaceServiceRoom: SpaceServiceRoom,
|
||||||
initialSpaceRooms: [SpaceServiceRoomProtocol] = [],
|
initialSpaceRooms: [SpaceServiceRoom] = [],
|
||||||
paginationStateSubject: CurrentValueSubject<SpaceRoomListPaginationState, Never> = .init(.idle(endReached: true)),
|
paginationStateSubject: CurrentValueSubject<SpaceRoomListPaginationState, Never> = .init(.idle(endReached: true)),
|
||||||
paginationResponses: [[SpaceServiceRoomProtocol]] = []) {
|
paginationResponses: [[SpaceServiceRoom]] = []) {
|
||||||
self.spaceServiceRoom = spaceServiceRoom
|
self.spaceServiceRoom = spaceServiceRoom
|
||||||
self.initialSpaceRooms = initialSpaceRooms
|
self.initialSpaceRooms = initialSpaceRooms
|
||||||
self.paginationStateSubject = paginationStateSubject
|
self.paginationStateSubject = paginationStateSubject
|
||||||
@@ -31,7 +31,7 @@ extension SpaceRoomListProxyMock {
|
|||||||
convenience init(_ configuration: Configuration) {
|
convenience init(_ configuration: Configuration) {
|
||||||
self.init()
|
self.init()
|
||||||
|
|
||||||
let spaceRoomsSubject: CurrentValueSubject<[SpaceServiceRoomProtocol], Never> = .init(configuration.initialSpaceRooms)
|
let spaceRoomsSubject: CurrentValueSubject<[SpaceServiceRoom], Never> = .init(configuration.initialSpaceRooms)
|
||||||
|
|
||||||
id = configuration.spaceServiceRoom.id
|
id = configuration.spaceServiceRoom.id
|
||||||
spaceServiceRoomPublisher = .init(configuration.spaceServiceRoom)
|
spaceServiceRoomPublisher = .init(configuration.spaceServiceRoom)
|
||||||
|
|||||||
@@ -17,10 +17,10 @@ enum SpaceServiceProxyMockError: Error {
|
|||||||
|
|
||||||
extension SpaceServiceProxyMock {
|
extension SpaceServiceProxyMock {
|
||||||
struct Configuration {
|
struct Configuration {
|
||||||
var topLevelSpaces: [SpaceServiceRoomProtocol] = []
|
var topLevelSpaces: [SpaceServiceRoom] = []
|
||||||
var spaceFilters: [SpaceServiceFilter] = []
|
var spaceFilters: [SpaceServiceFilter] = []
|
||||||
var joinedParentSpaces: [SpaceServiceRoomProtocol] = []
|
var joinedParentSpaces: [SpaceServiceRoom] = []
|
||||||
var editableSpaces: [SpaceServiceRoomProtocol] = []
|
var editableSpaces: [SpaceServiceRoom] = []
|
||||||
var spaceRoomLists: [String: SpaceRoomListProxyMock] = [:]
|
var spaceRoomLists: [String: SpaceRoomListProxyMock] = [:]
|
||||||
var leaveSpaceRooms: [LeaveSpaceRoom] = []
|
var leaveSpaceRooms: [LeaveSpaceRoom] = []
|
||||||
}
|
}
|
||||||
@@ -55,16 +55,16 @@ extension SpaceServiceProxyMock {
|
|||||||
|
|
||||||
extension SpaceServiceProxyMock.Configuration {
|
extension SpaceServiceProxyMock.Configuration {
|
||||||
static var populated: 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: 0, descendants: .init()))
|
||||||
partialResult.append(SpaceServiceFilter(room: spaceRoom, level: 1, 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)))
|
($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)))
|
($0.id, SpaceRoomListProxyMock(.init(spaceServiceRoom: $0, initialSpaceRooms: .mockSingleRoom)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ struct ChatsSpaceFilterCell: View {
|
|||||||
struct ChatsSpaceFilterCell_Previews: PreviewProvider, TestablePreview {
|
struct ChatsSpaceFilterCell_Previews: PreviewProvider, TestablePreview {
|
||||||
static let mediaProvider = MediaProviderMock(configuration: .init())
|
static let mediaProvider = MediaProviderMock(configuration: .init())
|
||||||
|
|
||||||
static let spaces = [SpaceServiceRoomProtocol].mockJoinedSpaces2
|
static let spaces = [SpaceServiceRoom].mockJoinedSpaces2
|
||||||
|
|
||||||
static var previews: some View {
|
static var previews: some View {
|
||||||
VStack(spacing: 0) {
|
VStack(spacing: 0) {
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ struct CreateRoomScreenViewState: BindableState {
|
|||||||
let isKnockingFeatureEnabled: Bool
|
let isKnockingFeatureEnabled: Bool
|
||||||
let canSelectSpace: Bool
|
let canSelectSpace: Bool
|
||||||
var aliasLocalPart: String
|
var aliasLocalPart: String
|
||||||
var editableSpaces: [SpaceServiceRoomProtocol] = []
|
var editableSpaces: [SpaceServiceRoom] = []
|
||||||
var bindings: CreateRoomScreenViewStateBindings
|
var bindings: CreateRoomScreenViewStateBindings
|
||||||
var avatarMediaInfo: MediaInfo? {
|
var avatarMediaInfo: MediaInfo? {
|
||||||
didSet {
|
didSet {
|
||||||
@@ -99,7 +99,7 @@ struct CreateRoomScreenViewState: BindableState {
|
|||||||
struct CreateRoomScreenViewStateBindings {
|
struct CreateRoomScreenViewStateBindings {
|
||||||
var roomTopic: String
|
var roomTopic: String
|
||||||
var selectedAccessType: CreateRoomScreenAccessType
|
var selectedAccessType: CreateRoomScreenAccessType
|
||||||
var selectedSpace: SpaceServiceRoomProtocol?
|
var selectedSpace: SpaceServiceRoom?
|
||||||
|
|
||||||
var showAttachmentConfirmationDialog = false
|
var showAttachmentConfirmationDialog = false
|
||||||
var showSpaceSelectionSheet = false
|
var showSpaceSelectionSheet = false
|
||||||
@@ -144,5 +144,5 @@ enum CreateRoomScreenAccessType {
|
|||||||
|
|
||||||
enum CreateRoomScreenSpaceSelectionMode {
|
enum CreateRoomScreenSpaceSelectionMode {
|
||||||
case editableSpacesList
|
case editableSpacesList
|
||||||
case preSelected(SpaceServiceRoomProtocol)
|
case preSelected(SpaceServiceRoom)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ class CreateRoomScreenViewModel: CreateRoomScreenViewModelType, CreateRoomScreen
|
|||||||
self.analytics = analytics
|
self.analytics = analytics
|
||||||
self.userIndicatorController = userIndicatorController
|
self.userIndicatorController = userIndicatorController
|
||||||
|
|
||||||
var selectedSpace: SpaceServiceRoomProtocol?
|
var selectedSpace: SpaceServiceRoom?
|
||||||
var canSelectSpace = false
|
var canSelectSpace = false
|
||||||
switch spaceSelectionMode {
|
switch spaceSelectionMode {
|
||||||
case .editableSpacesList:
|
case .editableSpacesList:
|
||||||
|
|||||||
@@ -378,21 +378,21 @@ struct CreateRoom_Previews: PreviewProvider, TestablePreview {
|
|||||||
return viewModel
|
return viewModel
|
||||||
}()
|
}()
|
||||||
|
|
||||||
static let selectedSpaceViewModel = makeViewModel(selectionMode: .preSelected(SpaceServiceRoomMock(.init(name: "Awesome Space",
|
static let selectedSpaceViewModel = makeViewModel(selectionMode: .preSelected(SpaceServiceRoom.mock(name: "Awesome Space",
|
||||||
isSpace: true,
|
isSpace: true,
|
||||||
joinRule: .private))))
|
joinRule: .private)))
|
||||||
|
|
||||||
static let selectedSpaceWithListViewModel = {
|
static let selectedSpaceWithListViewModel = {
|
||||||
let viewModel = makeViewModel()
|
let viewModel = makeViewModel()
|
||||||
viewModel.context.selectedSpace = [SpaceServiceRoomProtocol].mockJoinedSpaces2.first
|
viewModel.context.selectedSpace = [SpaceServiceRoom].mockJoinedSpaces2.first
|
||||||
return viewModel
|
return viewModel
|
||||||
}()
|
}()
|
||||||
|
|
||||||
static let selectedSpaceWithAskToJoinViewModel = {
|
static let selectedSpaceWithAskToJoinViewModel = {
|
||||||
let viewModel = makeViewModel(isKnockingEnabled: true,
|
let viewModel = makeViewModel(isKnockingEnabled: true,
|
||||||
selectionMode: .preSelected(SpaceServiceRoomMock(.init(name: "Awesome Space",
|
selectionMode: .preSelected(SpaceServiceRoom.mock(name: "Awesome Space",
|
||||||
isSpace: true,
|
isSpace: true,
|
||||||
joinRule: .private))))
|
joinRule: .private)))
|
||||||
viewModel.context.selectedAccessType = .askToJoinWithSpaceMembers
|
viewModel.context.selectedAccessType = .askToJoinWithSpaceMembers
|
||||||
return viewModel
|
return viewModel
|
||||||
}()
|
}()
|
||||||
@@ -469,7 +469,7 @@ struct CreateRoom_Previews: PreviewProvider, TestablePreview {
|
|||||||
let clientProxy = ClientProxyMock(.init(userIDServerName: "example.org",
|
let clientProxy = ClientProxyMock(.init(userIDServerName: "example.org",
|
||||||
userID: "@userid:example.com"))
|
userID: "@userid:example.com"))
|
||||||
clientProxy.isAliasAvailableReturnValue = .success(isAliasAvailable)
|
clientProxy.isAliasAvailableReturnValue = .success(isAliasAvailable)
|
||||||
let spaces = [SpaceServiceRoomProtocol].mockJoinedSpaces2
|
let spaces = [SpaceServiceRoom].mockJoinedSpaces2
|
||||||
clientProxy.spaceService = SpaceServiceProxyMock(.init(editableSpaces: spaces))
|
clientProxy.spaceService = SpaceServiceProxyMock(.init(editableSpaces: spaces))
|
||||||
let userSession = UserSessionMock(.init(clientProxy: clientProxy))
|
let userSession = UserSessionMock(.init(clientProxy: clientProxy))
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ struct JoinRoomScreenCoordinatorParameters {
|
|||||||
|
|
||||||
enum JoinRoomScreenSource {
|
enum JoinRoomScreenSource {
|
||||||
case generic(roomID: String, via: [String])
|
case generic(roomID: String, via: [String])
|
||||||
case space(SpaceServiceRoomProtocol)
|
case space(SpaceServiceRoom)
|
||||||
|
|
||||||
func roomIDAndVia() -> (roomID: String, via: [String]) {
|
func roomIDAndVia() -> (roomID: String, via: [String]) {
|
||||||
switch self {
|
switch self {
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ class JoinRoomScreenViewModel: JoinRoomScreenViewModelType, JoinRoomScreenViewMo
|
|||||||
spaceVisibility: nil)
|
spaceVisibility: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func updateSpaceRoomDetails(spaceServiceRoom: SpaceServiceRoomProtocol, inviter: RoomInviterDetails?) async {
|
private func updateSpaceRoomDetails(spaceServiceRoom: SpaceServiceRoom, inviter: RoomInviterDetails?) async {
|
||||||
state.roomDetails = JoinRoomScreenRoomDetails(name: spaceServiceRoom.name,
|
state.roomDetails = JoinRoomScreenRoomDetails(name: spaceServiceRoom.name,
|
||||||
topic: spaceServiceRoom.topic,
|
topic: spaceServiceRoom.topic,
|
||||||
canonicalAlias: spaceServiceRoom.canonicalAlias,
|
canonicalAlias: spaceServiceRoom.canonicalAlias,
|
||||||
|
|||||||
@@ -447,7 +447,7 @@ struct JoinRoomScreenPreviewWrapper: Identifiable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let source: JoinRoomScreenSource = if isSpace {
|
let source: JoinRoomScreenSource = if isSpace {
|
||||||
.space(SpaceServiceRoomMock(mode: mode))
|
.space(SpaceServiceRoom.mock(joinRoomScreenMode: mode))
|
||||||
} else {
|
} else {
|
||||||
.generic(roomID: "1", via: [])
|
.generic(roomID: "1", via: [])
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -37,7 +37,7 @@ enum ManageAuthorizedSpacesScreenViewAction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct AuthorizedSpacesSelection {
|
struct AuthorizedSpacesSelection {
|
||||||
let joinedSpaces: [SpaceServiceRoomProtocol]
|
let joinedSpaces: [SpaceServiceRoom]
|
||||||
let unknownSpacesIDs: [String]
|
let unknownSpacesIDs: [String]
|
||||||
let initialSelectedIDs: Set<String>
|
let initialSelectedIDs: Set<String>
|
||||||
let selectedIDs: PassthroughSubject<Set<String>, Never> = .init()
|
let selectedIDs: PassthroughSubject<Set<String>, Never> = .init()
|
||||||
|
|||||||
+1
-1
@@ -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,
|
RoomAvatarImage(avatar: space.avatar,
|
||||||
avatarSize: .room(on: .authorizedSpaces),
|
avatarSize: .room(on: .authorizedSpaces),
|
||||||
mediaProvider: context.mediaProvider)
|
mediaProvider: context.mediaProvider)
|
||||||
|
|||||||
+2
-2
@@ -32,7 +32,7 @@ struct SecurityAndPrivacyScreenViewState: BindableState {
|
|||||||
var canEditHistoryVisibility = false
|
var canEditHistoryVisibility = false
|
||||||
|
|
||||||
/// The union of joined parent spaces and the joined spaces in the current access type
|
/// 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
|
/// 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 {
|
var selectableSpacesCount: Int {
|
||||||
@@ -118,7 +118,7 @@ struct SecurityAndPrivacyScreenViewState: BindableState {
|
|||||||
|
|
||||||
enum SpaceSelection {
|
enum SpaceSelection {
|
||||||
/// There is only one available parent space for selection and is joined by the user
|
/// 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
|
/// There is only one available space for selection and is unknown to the user
|
||||||
case singleUnknown(id: String)
|
case singleUnknown(id: String)
|
||||||
/// Multiple spaces are available for selection
|
/// Multiple spaces are available for selection
|
||||||
|
|||||||
+2
-2
@@ -305,7 +305,7 @@ class SecurityAndPrivacyScreenViewModel: SecurityAndPrivacyScreenViewModelType,
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func setupSelectableJoinedSpaces() async {
|
private func setupSelectableJoinedSpaces() async {
|
||||||
var joinedParentSpaces: [SpaceServiceRoomProtocol] = []
|
var joinedParentSpaces: [SpaceServiceRoom] = []
|
||||||
switch await clientProxy.spaceService.joinedParents(childID: roomProxy.id) {
|
switch await clientProxy.spaceService.joinedParents(childID: roomProxy.id) {
|
||||||
case .success(let value):
|
case .success(let value):
|
||||||
joinedParentSpaces = value
|
joinedParentSpaces = value
|
||||||
@@ -313,7 +313,7 @@ class SecurityAndPrivacyScreenViewModel: SecurityAndPrivacyScreenViewModelType,
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
var nonParentJoinedSpaces: [SpaceServiceRoomProtocol] = []
|
var nonParentJoinedSpaces: [SpaceServiceRoom] = []
|
||||||
for spaceID in state.currentSettings.accessType.spaceIDs where !joinedParentSpaces.contains(where: { $0.id == spaceID }) {
|
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) {
|
if case let .success(.some(space)) = await clientProxy.spaceService.spaceForIdentifier(spaceID: spaceID) {
|
||||||
nonParentJoinedSpaces.append(space)
|
nonParentJoinedSpaces.append(space)
|
||||||
|
|||||||
+4
-4
@@ -269,7 +269,7 @@ struct SecurityAndPrivacyScreen_Previews: PreviewProvider, TestablePreview {
|
|||||||
AppSettings.resetAllSettings()
|
AppSettings.resetAllSettings()
|
||||||
let appSettings = AppSettings()
|
let appSettings = AppSettings()
|
||||||
appSettings.spaceSettingsEnabled = true
|
appSettings.spaceSettingsEnabled = true
|
||||||
let space = [SpaceServiceRoomProtocol].mockSingleRoom[0]
|
let space = [SpaceServiceRoom].mockSingleRoom[0]
|
||||||
|
|
||||||
return SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(isEncrypted: false,
|
return SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(isEncrypted: false,
|
||||||
canonicalAlias: "#room:matrix.org",
|
canonicalAlias: "#room:matrix.org",
|
||||||
@@ -286,7 +286,7 @@ struct SecurityAndPrivacyScreen_Previews: PreviewProvider, TestablePreview {
|
|||||||
AppSettings.resetAllSettings()
|
AppSettings.resetAllSettings()
|
||||||
let appSettings = AppSettings()
|
let appSettings = AppSettings()
|
||||||
appSettings.spaceSettingsEnabled = true
|
appSettings.spaceSettingsEnabled = true
|
||||||
let spaces = [SpaceServiceRoomProtocol].mockJoinedSpaces
|
let spaces = [SpaceServiceRoom].mockJoinedSpaces
|
||||||
|
|
||||||
return SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(isEncrypted: false,
|
return SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(isEncrypted: false,
|
||||||
canonicalAlias: "#room:matrix.org",
|
canonicalAlias: "#room:matrix.org",
|
||||||
@@ -319,7 +319,7 @@ struct SecurityAndPrivacyScreen_Previews: PreviewProvider, TestablePreview {
|
|||||||
let appSettings = AppSettings()
|
let appSettings = AppSettings()
|
||||||
appSettings.spaceSettingsEnabled = true
|
appSettings.spaceSettingsEnabled = true
|
||||||
appSettings.knockingEnabled = true
|
appSettings.knockingEnabled = true
|
||||||
let space = [SpaceServiceRoomProtocol].mockSingleRoom[0]
|
let space = [SpaceServiceRoom].mockSingleRoom[0]
|
||||||
|
|
||||||
return SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(isEncrypted: false,
|
return SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(isEncrypted: false,
|
||||||
canonicalAlias: "#room:matrix.org",
|
canonicalAlias: "#room:matrix.org",
|
||||||
@@ -337,7 +337,7 @@ struct SecurityAndPrivacyScreen_Previews: PreviewProvider, TestablePreview {
|
|||||||
let appSettings = AppSettings()
|
let appSettings = AppSettings()
|
||||||
appSettings.spaceSettingsEnabled = true
|
appSettings.spaceSettingsEnabled = true
|
||||||
appSettings.knockingEnabled = true
|
appSettings.knockingEnabled = true
|
||||||
let spaces = [SpaceServiceRoomProtocol].mockJoinedSpaces
|
let spaces = [SpaceServiceRoom].mockJoinedSpaces
|
||||||
|
|
||||||
return SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(isEncrypted: false,
|
return SecurityAndPrivacyScreenViewModel(roomProxy: JoinedRoomProxyMock(.init(isEncrypted: false,
|
||||||
canonicalAlias: "#room:matrix.org",
|
canonicalAlias: "#room:matrix.org",
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import Compound
|
|||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
struct SpaceHeaderView: View {
|
struct SpaceHeaderView: View {
|
||||||
let spaceServiceRoom: SpaceServiceRoomProtocol
|
let spaceServiceRoom: SpaceServiceRoom
|
||||||
let mediaProvider: MediaProviderProtocol?
|
let mediaProvider: MediaProviderProtocol?
|
||||||
|
|
||||||
@State private var isPresentingTopic = false
|
@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",
|
SpaceServiceRoom.mock(id: "!space1:matrix.org",
|
||||||
name: "Company Space",
|
name: "Company Space",
|
||||||
isSpace: true,
|
isSpace: true,
|
||||||
childrenCount: 10,
|
childrenCount: 10,
|
||||||
joinedMembersCount: 50)),
|
joinedMembersCount: 50),
|
||||||
SpaceServiceRoomMock(.init(id: "!space2:matrix.org",
|
SpaceServiceRoom.mock(id: "!space2:matrix.org",
|
||||||
name: "Community Space",
|
name: "Community Space",
|
||||||
avatarURL: .mockMXCAvatar,
|
avatarURL: .mockMXCAvatar,
|
||||||
isSpace: true,
|
isSpace: true,
|
||||||
childrenCount: 20,
|
childrenCount: 20,
|
||||||
joinedMembersCount: 78,
|
joinedMembersCount: 78,
|
||||||
topic: "Description of the space goes right here.",
|
topic: "Description of the space goes right here.",
|
||||||
canonicalAlias: "#space:matrix.org",
|
canonicalAlias: "#space:matrix.org",
|
||||||
joinRule: .public)),
|
joinRule: .public),
|
||||||
SpaceServiceRoomMock(.init(id: "!space3:matrix.org",
|
SpaceServiceRoom.mock(id: "!space3:matrix.org",
|
||||||
name: "Subspace",
|
name: "Subspace",
|
||||||
isSpace: true,
|
isSpace: true,
|
||||||
childrenCount: 30,
|
childrenCount: 30,
|
||||||
joinedMembersCount: 123,
|
joinedMembersCount: 123,
|
||||||
heroes: [.mockDan, .mockBob, .mockCharlie, .mockVerbose],
|
heroes: [.mockDan, .mockBob, .mockCharlie, .mockVerbose],
|
||||||
topic: ["Description of the space goes right here.",
|
topic: ["Description of the space goes right here.",
|
||||||
"Lorem ipsum dolor sit amet consectetur.",
|
"Lorem ipsum dolor sit amet consectetur.",
|
||||||
"Leo viverra morbi habitant in.",
|
"Leo viverra morbi habitant in.",
|
||||||
"Sem amet enim habitant nibh augue mauris.",
|
"Sem amet enim habitant nibh augue mauris.",
|
||||||
"Interdum mauris ultrices tincidunt proin morbi erat aenean risus nibh.",
|
"Interdum mauris ultrices tincidunt proin morbi erat aenean risus nibh.",
|
||||||
"Diam amet sit fermentum vulputate faucibus."].joined(separator: " "),
|
"Diam amet sit fermentum vulputate faucibus."].joined(separator: " "),
|
||||||
canonicalAlias: "#subspace:matrix.org",
|
canonicalAlias: "#subspace:matrix.org",
|
||||||
joinRule: .knockRestricted(rules: [.roomMembership(roomId: "")])))
|
joinRule: .knockRestricted(rules: [.roomMembership(roomId: "")]))
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,12 +14,12 @@ struct SpaceRoomCell: View {
|
|||||||
@Environment(\.dynamicTypeSize) private var dynamicTypeSize
|
@Environment(\.dynamicTypeSize) private var dynamicTypeSize
|
||||||
@Environment(\.editMode) private var editMode
|
@Environment(\.editMode) private var editMode
|
||||||
|
|
||||||
let spaceServiceRoom: SpaceServiceRoomProtocol
|
let spaceServiceRoom: SpaceServiceRoom
|
||||||
let isSelected: Bool
|
let isSelected: Bool
|
||||||
var isJoining = false
|
var isJoining = false
|
||||||
let mediaProvider: MediaProviderProtocol!
|
let mediaProvider: MediaProviderProtocol!
|
||||||
|
|
||||||
enum Action { case select(SpaceServiceRoomProtocol), join(SpaceServiceRoomProtocol) }
|
enum Action { case select(SpaceServiceRoom), join(SpaceServiceRoom) }
|
||||||
let action: (Action) -> Void
|
let action: (Action) -> Void
|
||||||
|
|
||||||
private let verticalInsets = 12.0
|
private let verticalInsets = 12.0
|
||||||
@@ -179,7 +179,7 @@ struct SpaceRoomCellButtonStyle: ButtonStyle {
|
|||||||
struct SpaceRoomCell_Previews: PreviewProvider, TestablePreview {
|
struct SpaceRoomCell_Previews: PreviewProvider, TestablePreview {
|
||||||
static let mediaProvider = MediaProviderMock(configuration: .init())
|
static let mediaProvider = MediaProviderMock(configuration: .init())
|
||||||
|
|
||||||
static let spaces = [SpaceServiceRoomProtocol].mockSpaceList
|
static let spaces = [SpaceServiceRoom].mockSpaceList
|
||||||
|
|
||||||
static var previews: some View {
|
static var previews: some View {
|
||||||
ScrollView {
|
ScrollView {
|
||||||
@@ -190,21 +190,21 @@ struct SpaceRoomCell_Previews: PreviewProvider, TestablePreview {
|
|||||||
mediaProvider: mediaProvider) { _ in }
|
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,
|
isSelected: false,
|
||||||
isJoining: true,
|
isJoining: true,
|
||||||
mediaProvider: mediaProvider) { _ in }
|
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,
|
isSelected: false,
|
||||||
isJoining: true,
|
isJoining: true,
|
||||||
mediaProvider: mediaProvider) { _ in }
|
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,
|
isSelected: true,
|
||||||
isJoining: false,
|
isJoining: false,
|
||||||
mediaProvider: mediaProvider) { _ in }
|
mediaProvider: mediaProvider) { _ in }
|
||||||
.environment(\.editMode, .constant(.active))
|
.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,
|
isSelected: false,
|
||||||
isJoining: false,
|
isJoining: false,
|
||||||
mediaProvider: mediaProvider) { _ in }
|
mediaProvider: mediaProvider) { _ in }
|
||||||
|
|||||||
@@ -91,45 +91,45 @@ struct LeaveSpaceRoomDetailsCell: View {
|
|||||||
struct LeaveSpaceRoomDetailsCell_Previews: PreviewProvider, TestablePreview {
|
struct LeaveSpaceRoomDetailsCell_Previews: PreviewProvider, TestablePreview {
|
||||||
static var previews: some View {
|
static var previews: some View {
|
||||||
VStack(spacing: 0) {
|
VStack(spacing: 0) {
|
||||||
LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoomMock(.init(id: "1",
|
LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoom.mock(id: "1",
|
||||||
name: "Space",
|
name: "Space",
|
||||||
isSpace: true)),
|
isSpace: true),
|
||||||
isLastOwner: false,
|
isLastOwner: false,
|
||||||
areCreatorsPrivileged: false,
|
areCreatorsPrivileged: false,
|
||||||
isSelected: true),
|
isSelected: true),
|
||||||
mediaProvider: MediaProviderMock(configuration: .init())) { }
|
mediaProvider: MediaProviderMock(configuration: .init())) { }
|
||||||
LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoomMock(.init(id: "2",
|
LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoom.mock(id: "2",
|
||||||
name: "My Space",
|
name: "My Space",
|
||||||
isSpace: true)),
|
isSpace: true),
|
||||||
isLastOwner: true,
|
isLastOwner: true,
|
||||||
areCreatorsPrivileged: false,
|
areCreatorsPrivileged: false,
|
||||||
isSelected: false),
|
isSelected: false),
|
||||||
mediaProvider: MediaProviderMock(configuration: .init())) { }
|
mediaProvider: MediaProviderMock(configuration: .init())) { }
|
||||||
LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoomMock(.init(id: "2",
|
LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoom.mock(id: "2",
|
||||||
name: "My Space",
|
name: "My Space",
|
||||||
isSpace: true)),
|
isSpace: true),
|
||||||
isLastOwner: true,
|
isLastOwner: true,
|
||||||
areCreatorsPrivileged: false,
|
areCreatorsPrivileged: false,
|
||||||
isSelected: false),
|
isSelected: false),
|
||||||
hideSelection: true,
|
hideSelection: true,
|
||||||
mediaProvider: MediaProviderMock(configuration: .init())) { }
|
mediaProvider: MediaProviderMock(configuration: .init())) { }
|
||||||
LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoomMock(.init(id: "3",
|
LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoom.mock(id: "3",
|
||||||
name: "Room",
|
name: "Room",
|
||||||
isSpace: false)),
|
isSpace: false),
|
||||||
isLastOwner: false,
|
isLastOwner: false,
|
||||||
areCreatorsPrivileged: false,
|
areCreatorsPrivileged: false,
|
||||||
isSelected: true),
|
isSelected: true),
|
||||||
mediaProvider: MediaProviderMock(configuration: .init())) { }
|
mediaProvider: MediaProviderMock(configuration: .init())) { }
|
||||||
LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoomMock(.init(id: "4",
|
LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoom.mock(id: "4",
|
||||||
name: "My Room",
|
name: "My Room",
|
||||||
isSpace: false)),
|
isSpace: false),
|
||||||
isLastOwner: true,
|
isLastOwner: true,
|
||||||
areCreatorsPrivileged: false,
|
areCreatorsPrivileged: false,
|
||||||
isSelected: false),
|
isSelected: false),
|
||||||
mediaProvider: MediaProviderMock(configuration: .init())) { }
|
mediaProvider: MediaProviderMock(configuration: .init())) { }
|
||||||
LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoomMock(.init(id: "4",
|
LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoom.mock(id: "4",
|
||||||
name: "My Room",
|
name: "My Room",
|
||||||
isSpace: false)),
|
isSpace: false),
|
||||||
isLastOwner: true,
|
isLastOwner: true,
|
||||||
areCreatorsPrivileged: false,
|
areCreatorsPrivileged: false,
|
||||||
isSelected: false),
|
isSelected: false),
|
||||||
|
|||||||
@@ -136,14 +136,14 @@ struct LeaveSpaceView_Previews: PreviewProvider, TestablePreview {
|
|||||||
.previewDisplayName("Last Space Admin")
|
.previewDisplayName("Last Space Admin")
|
||||||
}
|
}
|
||||||
|
|
||||||
static let spaceServiceRoom = SpaceServiceRoomMock(.init(id: "!eng-space:matrix.org",
|
static let spaceServiceRoom = SpaceServiceRoom.mock(id: "!eng-space:matrix.org",
|
||||||
name: "Engineering Team",
|
name: "Engineering Team",
|
||||||
isSpace: true,
|
isSpace: true,
|
||||||
childrenCount: 30,
|
childrenCount: 30,
|
||||||
joinedMembersCount: 76,
|
joinedMembersCount: 76,
|
||||||
heroes: [.mockDan, .mockBob, .mockCharlie, .mockVerbose],
|
heroes: [.mockDan, .mockBob, .mockCharlie, .mockVerbose],
|
||||||
topic: "Description of the space goes right here. Lorem ipsum dolor sit amet consectetur. Leo viverra morbi habitant in.",
|
topic: "Description of the space goes right here. Lorem ipsum dolor sit amet consectetur. Leo viverra morbi habitant in.",
|
||||||
joinRule: .knockRestricted(rules: [.roomMembership(roomId: "")])))
|
joinRule: .knockRestricted(rules: [.roomMembership(roomId: "")]))
|
||||||
|
|
||||||
static func makeViewModel(mode: LeaveSpaceHandleProxy.Mode) -> LeaveSpaceViewModel {
|
static func makeViewModel(mode: LeaveSpaceHandleProxy.Mode) -> LeaveSpaceViewModel {
|
||||||
let rooms: [LeaveSpaceRoom] = switch mode {
|
let rooms: [LeaveSpaceRoom] = switch mode {
|
||||||
|
|||||||
@@ -184,7 +184,7 @@ struct SpaceAddRoomsScreen_Previews: PreviewProvider, TestablePreview {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static func makeViewModel(searchQuery: String? = nil, hasSelection: Bool = false) -> SpaceAddRoomsScreenViewModel {
|
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())
|
let clientProxy = ClientProxyMock(.init())
|
||||||
clientProxy.recentlyVisitedRoomsFilterReturnValue = .mockRooms
|
clientProxy.recentlyVisitedRoomsFilterReturnValue = .mockRooms
|
||||||
|
|||||||
@@ -22,14 +22,14 @@ struct SpaceScreenCoordinatorParameters {
|
|||||||
|
|
||||||
enum SpaceScreenCoordinatorAction {
|
enum SpaceScreenCoordinatorAction {
|
||||||
case selectSpace(SpaceRoomListProxyProtocol)
|
case selectSpace(SpaceRoomListProxyProtocol)
|
||||||
case selectUnjoinedSpace(SpaceServiceRoomProtocol)
|
case selectUnjoinedSpace(SpaceServiceRoom)
|
||||||
case selectRoom(roomID: String)
|
case selectRoom(roomID: String)
|
||||||
case leftSpace
|
case leftSpace
|
||||||
case displayMembers(roomProxy: JoinedRoomProxyProtocol)
|
case displayMembers(roomProxy: JoinedRoomProxyProtocol)
|
||||||
case displaySpaceSettings(roomProxy: JoinedRoomProxyProtocol)
|
case displaySpaceSettings(roomProxy: JoinedRoomProxyProtocol)
|
||||||
case displayRolesAndPermissions(roomProxy: JoinedRoomProxyProtocol)
|
case displayRolesAndPermissions(roomProxy: JoinedRoomProxyProtocol)
|
||||||
case addExistingChildren
|
case addExistingChildren
|
||||||
case displayCreateChildRoomFlow(space: SpaceServiceRoomProtocol)
|
case displayCreateChildRoomFlow(space: SpaceServiceRoom)
|
||||||
}
|
}
|
||||||
|
|
||||||
final class SpaceScreenCoordinator: CoordinatorProtocol {
|
final class SpaceScreenCoordinator: CoordinatorProtocol {
|
||||||
|
|||||||
@@ -10,24 +10,24 @@ import SwiftUI
|
|||||||
|
|
||||||
enum SpaceScreenViewModelAction {
|
enum SpaceScreenViewModelAction {
|
||||||
case selectSpace(SpaceRoomListProxyProtocol)
|
case selectSpace(SpaceRoomListProxyProtocol)
|
||||||
case selectUnjoinedSpace(SpaceServiceRoomProtocol)
|
case selectUnjoinedSpace(SpaceServiceRoom)
|
||||||
case selectRoom(roomID: String)
|
case selectRoom(roomID: String)
|
||||||
case leftSpace
|
case leftSpace
|
||||||
case presentRolesAndPermissions(roomProxy: JoinedRoomProxyProtocol)
|
case presentRolesAndPermissions(roomProxy: JoinedRoomProxyProtocol)
|
||||||
case displayMembers(roomProxy: JoinedRoomProxyProtocol)
|
case displayMembers(roomProxy: JoinedRoomProxyProtocol)
|
||||||
case displaySpaceSettings(roomProxy: JoinedRoomProxyProtocol)
|
case displaySpaceSettings(roomProxy: JoinedRoomProxyProtocol)
|
||||||
case addExistingChildren
|
case addExistingChildren
|
||||||
case displayCreateChildRoomFlow(space: SpaceServiceRoomProtocol)
|
case displayCreateChildRoomFlow(space: SpaceServiceRoom)
|
||||||
}
|
}
|
||||||
|
|
||||||
struct SpaceScreenViewState: BindableState {
|
struct SpaceScreenViewState: BindableState {
|
||||||
var space: SpaceServiceRoomProtocol
|
var space: SpaceServiceRoom
|
||||||
|
|
||||||
var permalink: URL?
|
var permalink: URL?
|
||||||
var roomProxy: JoinedRoomProxyProtocol?
|
var roomProxy: JoinedRoomProxyProtocol?
|
||||||
|
|
||||||
var paginationState: PaginationState = .idle
|
var paginationState: PaginationState = .idle
|
||||||
var rooms: [SpaceServiceRoomProtocol]
|
var rooms: [SpaceServiceRoom]
|
||||||
var selectedSpaceRoomID: String?
|
var selectedSpaceRoomID: String?
|
||||||
var joiningRoomIDs: Set<String> = []
|
var joiningRoomIDs: Set<String> = []
|
||||||
|
|
||||||
@@ -47,7 +47,7 @@ struct SpaceScreenViewState: BindableState {
|
|||||||
rooms.isEmpty && paginationState == .endReached && canEditChildren
|
rooms.isEmpty && paginationState == .endReached && canEditChildren
|
||||||
}
|
}
|
||||||
|
|
||||||
var visibleRooms: [SpaceServiceRoomProtocol] {
|
var visibleRooms: [SpaceServiceRoom] {
|
||||||
if editMode == .inactive {
|
if editMode == .inactive {
|
||||||
rooms
|
rooms
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -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)
|
state.joiningRoomIDs.insert(spaceServiceRoom.id)
|
||||||
defer { state.joiningRoomIDs.remove(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 🤷♂️
|
// 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) {
|
switch await spaceServiceProxy.spaceRoomList(spaceID: spaceServiceRoom.id) {
|
||||||
case .success(let spaceRoomListProxy):
|
case .success(let spaceRoomListProxy):
|
||||||
actionsSubject.send(.selectSpace(spaceRoomListProxy))
|
actionsSubject.send(.selectSpace(spaceRoomListProxy))
|
||||||
|
|||||||
@@ -210,15 +210,15 @@ struct SpaceScreen_Previews: PreviewProvider, TestablePreview {
|
|||||||
appSettings.spaceSettingsEnabled = true
|
appSettings.spaceSettingsEnabled = true
|
||||||
appSettings.createSpaceEnabled = true
|
appSettings.createSpaceEnabled = true
|
||||||
|
|
||||||
let spaceServiceRoom = SpaceServiceRoomMock(.init(id: "!eng-space:matrix.org",
|
let spaceServiceRoom = SpaceServiceRoom.mock(id: "!eng-space:matrix.org",
|
||||||
name: "Engineering Team",
|
name: "Engineering Team",
|
||||||
isSpace: true,
|
isSpace: true,
|
||||||
childrenCount: 30,
|
childrenCount: 30,
|
||||||
joinedMembersCount: 76,
|
joinedMembersCount: 76,
|
||||||
heroes: [.mockDan, .mockBob, .mockCharlie, .mockVerbose],
|
heroes: [.mockDan, .mockBob, .mockCharlie, .mockVerbose],
|
||||||
topic: "Description of the space goes right here. Lorem ipsum dolor sit amet consectetur. Leo viverra morbi habitant in.",
|
topic: "Description of the space goes right here. Lorem ipsum dolor sit amet consectetur. Leo viverra morbi habitant in.",
|
||||||
canonicalAlias: "#engineering-team:element.io",
|
canonicalAlias: "#engineering-team:element.io",
|
||||||
joinRule: .knockRestricted(rules: [.roomMembership(roomId: "")])))
|
joinRule: .knockRestricted(rules: [.roomMembership(roomId: "")]))
|
||||||
let spaceRoomListProxy = SpaceRoomListProxyMock(.init(spaceServiceRoom: spaceServiceRoom,
|
let spaceRoomListProxy = SpaceRoomListProxyMock(.init(spaceServiceRoom: spaceServiceRoom,
|
||||||
initialSpaceRooms: isNewSpace ? [] : .mockSpaceList))
|
initialSpaceRooms: isNewSpace ? [] : .mockSpaceList))
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ struct SpacesScreenViewState: BindableState {
|
|||||||
var userDisplayName: String?
|
var userDisplayName: String?
|
||||||
var userAvatarURL: URL?
|
var userAvatarURL: URL?
|
||||||
|
|
||||||
var topLevelSpaces: [SpaceServiceRoomProtocol]
|
var topLevelSpaces: [SpaceServiceRoom]
|
||||||
var selectedSpaceID: String?
|
var selectedSpaceID: String?
|
||||||
|
|
||||||
var isCreateSpaceEnabled: Bool
|
var isCreateSpaceEnabled: Bool
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ class SpacesScreenViewModel: SpacesScreenViewModelType, SpacesScreenViewModelPro
|
|||||||
|
|
||||||
// MARK: - Private
|
// MARK: - Private
|
||||||
|
|
||||||
private func selectSpace(_ spaceServiceRoom: SpaceServiceRoomProtocol) async {
|
private func selectSpace(_ spaceServiceRoom: SpaceServiceRoom) async {
|
||||||
switch await spaceServiceProxy.spaceRoomList(spaceID: spaceServiceRoom.id) {
|
switch await spaceServiceProxy.spaceRoomList(spaceID: spaceServiceRoom.id) {
|
||||||
case .success(let spaceRoomListProxy):
|
case .success(let spaceRoomListProxy):
|
||||||
actionsSubject.send(.selectSpace(spaceRoomListProxy))
|
actionsSubject.send(.selectSpace(spaceRoomListProxy))
|
||||||
|
|||||||
@@ -87,12 +87,12 @@ final class LeaveSpaceHandleProxy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Observable class LeaveSpaceRoomDetails {
|
@Observable class LeaveSpaceRoomDetails {
|
||||||
let spaceServiceRoom: SpaceServiceRoomProtocol
|
let spaceServiceRoom: SpaceServiceRoom
|
||||||
let canLeave: Bool
|
let canLeave: Bool
|
||||||
let areCreatorsPrivileged: Bool
|
let areCreatorsPrivileged: Bool
|
||||||
var isSelected: 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
|
self.spaceServiceRoom = spaceServiceRoom
|
||||||
canLeave = !isLastOwner || spaceServiceRoom.joinedMembersCount == 1
|
canLeave = !isLastOwner || spaceServiceRoom.joinedMembersCount == 1
|
||||||
self.isSelected = isSelected
|
self.isSelected = isSelected
|
||||||
|
|||||||
@@ -15,14 +15,14 @@ class SpaceRoomListProxy: SpaceRoomListProxyProtocol {
|
|||||||
private let spaceRoomList: SpaceRoomListProtocol
|
private let spaceRoomList: SpaceRoomListProtocol
|
||||||
|
|
||||||
private var spaceServiceRoomHandle: TaskHandle?
|
private var spaceServiceRoomHandle: TaskHandle?
|
||||||
private let spaceServiceRoomSubject: CurrentValueSubject<SpaceServiceRoomProtocol, Never>
|
private let spaceServiceRoomSubject: CurrentValueSubject<SpaceServiceRoom, Never>
|
||||||
var spaceServiceRoomPublisher: CurrentValuePublisher<SpaceServiceRoomProtocol, Never> {
|
var spaceServiceRoomPublisher: CurrentValuePublisher<SpaceServiceRoom, Never> {
|
||||||
spaceServiceRoomSubject.asCurrentValuePublisher()
|
spaceServiceRoomSubject.asCurrentValuePublisher()
|
||||||
}
|
}
|
||||||
|
|
||||||
private var spaceRoomsHandle: TaskHandle?
|
private var spaceRoomsHandle: TaskHandle?
|
||||||
private let spaceRoomsSubject = CurrentValueSubject<[SpaceServiceRoomProtocol], Never>([])
|
private let spaceRoomsSubject = CurrentValueSubject<[SpaceServiceRoom], Never>([])
|
||||||
var spaceRoomsPublisher: CurrentValuePublisher<[SpaceServiceRoomProtocol], Never> {
|
var spaceRoomsPublisher: CurrentValuePublisher<[SpaceServiceRoom], Never> {
|
||||||
spaceRoomsSubject.asCurrentValuePublisher()
|
spaceRoomsSubject.asCurrentValuePublisher()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ enum SpaceRoomListProxyError: Error {
|
|||||||
protocol SpaceRoomListProxyProtocol {
|
protocol SpaceRoomListProxyProtocol {
|
||||||
var id: String { get }
|
var id: String { get }
|
||||||
|
|
||||||
var spaceServiceRoomPublisher: CurrentValuePublisher<SpaceServiceRoomProtocol, Never> { get }
|
var spaceServiceRoomPublisher: CurrentValuePublisher<SpaceServiceRoom, Never> { get }
|
||||||
var spaceRoomsPublisher: CurrentValuePublisher<[SpaceServiceRoomProtocol], Never> { get }
|
var spaceRoomsPublisher: CurrentValuePublisher<[SpaceServiceRoom], Never> { get }
|
||||||
var paginationStatePublisher: CurrentValuePublisher<SpaceRoomListPaginationState, Never> { get }
|
var paginationStatePublisher: CurrentValuePublisher<SpaceRoomListPaginationState, Never> { get }
|
||||||
|
|
||||||
func paginate() async
|
func paginate() async
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ class SpaceServiceProxy: SpaceServiceProxyProtocol {
|
|||||||
private let spaceService: SpaceServiceProtocol
|
private let spaceService: SpaceServiceProtocol
|
||||||
|
|
||||||
private var topLevelSpacesHandle: TaskHandle?
|
private var topLevelSpacesHandle: TaskHandle?
|
||||||
private let spacesSubject = CurrentValueSubject<[SpaceServiceRoomProtocol], Never>([])
|
private let spacesSubject = CurrentValueSubject<[SpaceServiceRoom], Never>([])
|
||||||
var topLevelSpacesPublisher: CurrentValuePublisher<[SpaceServiceRoomProtocol], Never> {
|
var topLevelSpacesPublisher: CurrentValuePublisher<[SpaceServiceRoom], Never> {
|
||||||
spacesSubject.asCurrentValuePublisher()
|
spacesSubject.asCurrentValuePublisher()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@ class SpaceServiceProxy: SpaceServiceProxyProtocol {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func spaceForIdentifier(spaceID: String) async -> Result<SpaceServiceRoomProtocol?, SpaceServiceProxyError> {
|
func spaceForIdentifier(spaceID: String) async -> Result<SpaceServiceRoom?, SpaceServiceProxyError> {
|
||||||
do {
|
do {
|
||||||
return try await .success(spaceService.getSpaceRoom(roomId: spaceID).map(SpaceServiceRoom.init))
|
return try await .success(spaceService.getSpaceRoom(roomId: spaceID).map(SpaceServiceRoom.init))
|
||||||
} catch {
|
} 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 {
|
do {
|
||||||
return try await .success(spaceService.joinedParentsOfChild(childId: childID).map(SpaceServiceRoom.init))
|
return try await .success(spaceService.joinedParentsOfChild(childId: childID).map(SpaceServiceRoom.init))
|
||||||
} catch {
|
} catch {
|
||||||
@@ -77,7 +77,7 @@ class SpaceServiceProxy: SpaceServiceProxyProtocol {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func editableSpaces() async -> [SpaceServiceRoomProtocol] {
|
func editableSpaces() async -> [SpaceServiceRoom] {
|
||||||
await spaceService.editableSpaces().map(SpaceServiceRoom.init)
|
await spaceService.editableSpaces().map(SpaceServiceRoom.init)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,11 +15,11 @@ enum SpaceServiceProxyError: Error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct SpaceServiceFilter: Identifiable, Equatable {
|
struct SpaceServiceFilter: Identifiable, Equatable {
|
||||||
let room: SpaceServiceRoomProtocol
|
let room: SpaceServiceRoom
|
||||||
let level: UInt
|
let level: UInt
|
||||||
let descendants: Set<String>
|
let descendants: Set<String>
|
||||||
|
|
||||||
init(room: SpaceServiceRoomProtocol, level: UInt, descendants: Set<String>) {
|
init(room: SpaceServiceRoom, level: UInt, descendants: Set<String>) {
|
||||||
self.room = room
|
self.room = room
|
||||||
self.level = level
|
self.level = level
|
||||||
self.descendants = descendants
|
self.descendants = descendants
|
||||||
@@ -43,17 +43,17 @@ struct SpaceServiceFilter: Identifiable, Equatable {
|
|||||||
|
|
||||||
// sourcery: AutoMockable
|
// sourcery: AutoMockable
|
||||||
protocol SpaceServiceProxyProtocol {
|
protocol SpaceServiceProxyProtocol {
|
||||||
var topLevelSpacesPublisher: CurrentValuePublisher<[SpaceServiceRoomProtocol], Never> { get }
|
var topLevelSpacesPublisher: CurrentValuePublisher<[SpaceServiceRoom], Never> { get }
|
||||||
var spaceFilterPublisher: CurrentValuePublisher<[SpaceServiceFilter], Never> { get }
|
var spaceFilterPublisher: CurrentValuePublisher<[SpaceServiceFilter], Never> { get }
|
||||||
|
|
||||||
func spaceRoomList(spaceID: String) async -> Result<SpaceRoomListProxyProtocol, SpaceServiceProxyError>
|
func spaceRoomList(spaceID: String) async -> Result<SpaceRoomListProxyProtocol, SpaceServiceProxyError>
|
||||||
/// Returns a joined space given its identifier
|
/// Returns a joined space given its identifier
|
||||||
func spaceForIdentifier(spaceID: String) async -> Result<SpaceServiceRoomProtocol?, SpaceServiceProxyError>
|
func spaceForIdentifier(spaceID: String) async -> Result<SpaceServiceRoom?, SpaceServiceProxyError>
|
||||||
func leaveSpace(spaceID: String) async -> Result<LeaveSpaceHandleProxy, SpaceServiceProxyError>
|
func leaveSpace(spaceID: String) async -> Result<LeaveSpaceHandleProxy, SpaceServiceProxyError>
|
||||||
/// Returns all the parent spaces of a child that user has joined.
|
/// 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
|
/// 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.
|
/// Adds a room (or space) as a child of another space.
|
||||||
func addChild(_ childID: String, to spaceID: String) async -> Result<Void, SpaceServiceProxyError>
|
func addChild(_ childID: String, to spaceID: String) async -> Result<Void, SpaceServiceProxyError>
|
||||||
|
|||||||
@@ -9,7 +9,14 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import MatrixRustSDK
|
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 id: String
|
||||||
var name: String
|
var name: String
|
||||||
var rawName: String?
|
var rawName: String?
|
||||||
@@ -30,6 +37,31 @@ struct SpaceServiceRoom: SpaceServiceRoomProtocol {
|
|||||||
var state: Membership?
|
var state: Membership?
|
||||||
var via: [String]
|
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) {
|
init(spaceRoom: SpaceRoom) {
|
||||||
id = spaceRoom.roomId
|
id = spaceRoom.roomId
|
||||||
name = spaceRoom.displayName
|
name = spaceRoom.displayName
|
||||||
@@ -51,4 +83,193 @@ struct SpaceServiceRoom: SpaceServiceRoomProtocol {
|
|||||||
state = spaceRoom.state
|
state = spaceRoom.state
|
||||||
via = spaceRoom.via
|
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)
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -598,7 +598,7 @@ class MockScreen: Identifiable {
|
|||||||
deviceID: "MOCKCLIENT",
|
deviceID: "MOCKCLIENT",
|
||||||
roomSummaryProvider: RoomSummaryProviderMock(.init(state: .loaded(roomSummaries))),
|
roomSummaryProvider: RoomSummaryProviderMock(.init(state: .loaded(roomSummaries))),
|
||||||
spaceServiceConfiguration: .init(topLevelSpaces: .mockSpaceList.filter(\.isSpace) + .mockSingleRoom),
|
spaceServiceConfiguration: .init(topLevelSpaces: .mockSpaceList.filter(\.isSpace) + .mockSingleRoom),
|
||||||
roomPreviews: [SpaceServiceRoomProtocol].mockSpaceList.map(RoomPreviewProxyMock.init),
|
roomPreviews: [SpaceServiceRoom].mockSpaceList.map(RoomPreviewProxyMock.init),
|
||||||
defaultRoomMembers: .allMembersAsAdmin))
|
defaultRoomMembers: .allMembersAsAdmin))
|
||||||
clientProxy.recentlyVisitedRoomsFilterReturnValue = .mockRooms
|
clientProxy.recentlyVisitedRoomsFilterReturnValue = .mockRooms
|
||||||
|
|
||||||
|
|||||||
@@ -223,7 +223,7 @@ class CreateRoomScreenViewModelTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testCreateRoomInASelectedSpaceFromTheList() async throws {
|
func testCreateRoomInASelectedSpaceFromTheList() async throws {
|
||||||
let spaces = [SpaceServiceRoomProtocol].mockJoinedSpaces2
|
let spaces = [SpaceServiceRoom].mockJoinedSpaces2
|
||||||
setup()
|
setup()
|
||||||
|
|
||||||
context.send(viewAction: .updateRoomName("A"))
|
context.send(viewAction: .updateRoomName("A"))
|
||||||
@@ -272,7 +272,7 @@ class CreateRoomScreenViewModelTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testCreateRoomInAnAlreadySelectedSpace() async throws {
|
func testCreateRoomInAnAlreadySelectedSpace() async throws {
|
||||||
let space = SpaceServiceRoomMock(.init(isSpace: true, joinRule: .private))
|
let space = SpaceServiceRoom.mock(isSpace: true, joinRule: .private)
|
||||||
setup(spacesSelectionMode: .preSelected(space))
|
setup(spacesSelectionMode: .preSelected(space))
|
||||||
|
|
||||||
context.send(viewAction: .updateRoomName("A"))
|
context.send(viewAction: .updateRoomName("A"))
|
||||||
@@ -307,7 +307,7 @@ class CreateRoomScreenViewModelTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testCreateRoomInAnPublicSpaceAvailableTypes() async throws {
|
func testCreateRoomInAnPublicSpaceAvailableTypes() async throws {
|
||||||
let space = SpaceServiceRoomMock(.init(isSpace: true, joinRule: .public))
|
let space = SpaceServiceRoom.mock(isSpace: true, joinRule: .public)
|
||||||
setup(spacesSelectionMode: .preSelected(space))
|
setup(spacesSelectionMode: .preSelected(space))
|
||||||
|
|
||||||
// Given a form with a blank topic.
|
// Given a form with a blank topic.
|
||||||
|
|||||||
@@ -311,7 +311,7 @@ class HomeScreenViewModelTests: XCTestCase {
|
|||||||
XCTAssertEqual(invitedRoomIDs.count, 2)
|
XCTAssertEqual(invitedRoomIDs.count, 2)
|
||||||
|
|
||||||
let deferred = deferFulfillment(viewModel.actions) {
|
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]))
|
context.send(viewAction: .acceptInvite(roomIdentifier: invitedRoomIDs[0]))
|
||||||
try await deferred.fulfill()
|
try await deferred.fulfill()
|
||||||
@@ -408,7 +408,7 @@ class HomeScreenViewModelTests: XCTestCase {
|
|||||||
|
|
||||||
let spaceServiceProxy = SpaceServiceProxyMock(.init())
|
let spaceServiceProxy = SpaceServiceProxyMock(.init())
|
||||||
spaceServiceProxy.spaceRoomListSpaceIDClosure = { spaceID in
|
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
|
clientProxy.underlyingSpaceService = spaceServiceProxy
|
||||||
case nil:
|
case nil:
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ class SecurityAndPrivacyScreenViewModelTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testSetSingleJoinedSpaceMembersAccess() async throws {
|
func testSetSingleJoinedSpaceMembersAccess() async throws {
|
||||||
let singleRoom = [SpaceServiceRoomProtocol].mockSingleRoom
|
let singleRoom = [SpaceServiceRoom].mockSingleRoom
|
||||||
let space = singleRoom[0]
|
let space = singleRoom[0]
|
||||||
setupViewModel(joinedParentSpaces: singleRoom, joinRule: .public)
|
setupViewModel(joinedParentSpaces: singleRoom, joinRule: .public)
|
||||||
|
|
||||||
@@ -60,7 +60,7 @@ class SecurityAndPrivacyScreenViewModelTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testSetSingleJoinedAskToJoinWithSpaceMembersAccess() async throws {
|
func testSetSingleJoinedAskToJoinWithSpaceMembersAccess() async throws {
|
||||||
let singleRoom = [SpaceServiceRoomProtocol].mockSingleRoom
|
let singleRoom = [SpaceServiceRoom].mockSingleRoom
|
||||||
let space = singleRoom[0]
|
let space = singleRoom[0]
|
||||||
setupViewModel(joinedParentSpaces: singleRoom, joinRule: .public)
|
setupViewModel(joinedParentSpaces: singleRoom, joinRule: .public)
|
||||||
|
|
||||||
@@ -91,7 +91,7 @@ class SecurityAndPrivacyScreenViewModelTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testSingleUnknownSpaceMembersAccessCanBeReselected() async throws {
|
func testSingleUnknownSpaceMembersAccessCanBeReselected() async throws {
|
||||||
let singleRoom = [SpaceServiceRoomProtocol].mockSingleRoom
|
let singleRoom = [SpaceServiceRoom].mockSingleRoom
|
||||||
let space = singleRoom[0]
|
let space = singleRoom[0]
|
||||||
setupViewModel(joinedParentSpaces: [], joinRule: .restricted(rules: [.roomMembership(roomId: space.id)]))
|
setupViewModel(joinedParentSpaces: [], joinRule: .restricted(rules: [.roomMembership(roomId: space.id)]))
|
||||||
|
|
||||||
@@ -122,7 +122,7 @@ class SecurityAndPrivacyScreenViewModelTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testMultipleKnownSpacesMembersSelection() async throws {
|
func testMultipleKnownSpacesMembersSelection() async throws {
|
||||||
let spaces = [SpaceServiceRoomProtocol].mockJoinedSpaces2
|
let spaces = [SpaceServiceRoom].mockJoinedSpaces2
|
||||||
setupViewModel(joinedParentSpaces: spaces, joinRule: .public)
|
setupViewModel(joinedParentSpaces: spaces, joinRule: .public)
|
||||||
|
|
||||||
let deferred = deferFulfillment(context.$viewState) { $0.selectableJoinedSpaces.count == 3 }
|
let deferred = deferFulfillment(context.$viewState) { $0.selectableJoinedSpaces.count == 3 }
|
||||||
@@ -166,7 +166,7 @@ class SecurityAndPrivacyScreenViewModelTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testMultipleKnownAskToJoinSpacesMembersSelection() async throws {
|
func testMultipleKnownAskToJoinSpacesMembersSelection() async throws {
|
||||||
let spaces = [SpaceServiceRoomProtocol].mockJoinedSpaces2
|
let spaces = [SpaceServiceRoom].mockJoinedSpaces2
|
||||||
setupViewModel(joinedParentSpaces: spaces, joinRule: .public)
|
setupViewModel(joinedParentSpaces: spaces, joinRule: .public)
|
||||||
|
|
||||||
let deferred = deferFulfillment(context.$viewState) { $0.selectableJoinedSpaces.count == 3 }
|
let deferred = deferFulfillment(context.$viewState) { $0.selectableJoinedSpaces.count == 3 }
|
||||||
@@ -210,7 +210,7 @@ class SecurityAndPrivacyScreenViewModelTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testMultipleSpacesMembersSelection() async throws {
|
func testMultipleSpacesMembersSelection() async throws {
|
||||||
let spaces = [SpaceServiceRoomProtocol].mockJoinedSpaces2
|
let spaces = [SpaceServiceRoom].mockJoinedSpaces2
|
||||||
setupViewModel(joinedParentSpaces: spaces,
|
setupViewModel(joinedParentSpaces: spaces,
|
||||||
joinRule: .restricted(rules: [.roomMembership(roomId: "unknownSpaceID")]))
|
joinRule: .restricted(rules: [.roomMembership(roomId: "unknownSpaceID")]))
|
||||||
|
|
||||||
@@ -256,8 +256,8 @@ class SecurityAndPrivacyScreenViewModelTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testMultipleSpacesMembersSelectionWithAnExistingNonParentButJoinedSpace() async throws {
|
func testMultipleSpacesMembersSelectionWithAnExistingNonParentButJoinedSpace() async throws {
|
||||||
let joinedParentSpaces = [SpaceServiceRoomProtocol].mockJoinedSpaces2
|
let joinedParentSpaces = [SpaceServiceRoom].mockJoinedSpaces2
|
||||||
let singleRoom = [SpaceServiceRoomProtocol].mockSingleRoom
|
let singleRoom = [SpaceServiceRoom].mockSingleRoom
|
||||||
let space = singleRoom[0]
|
let space = singleRoom[0]
|
||||||
let allSpaces = joinedParentSpaces + singleRoom
|
let allSpaces = joinedParentSpaces + singleRoom
|
||||||
setupViewModel(joinedParentSpaces: joinedParentSpaces,
|
setupViewModel(joinedParentSpaces: joinedParentSpaces,
|
||||||
@@ -319,7 +319,7 @@ class SecurityAndPrivacyScreenViewModelTests: XCTestCase {
|
|||||||
func testEmptySpaceMembersSelectionWithJoinedParentEdgeCase() async throws {
|
func testEmptySpaceMembersSelectionWithJoinedParentEdgeCase() async throws {
|
||||||
// Edge case where there is one available joined parent but the room has a restricted join rule.
|
// Edge case where there is one available joined parent but the room has a restricted join rule.
|
||||||
// With no space ids in it
|
// With no space ids in it
|
||||||
let singleRoom = [SpaceServiceRoomProtocol].mockSingleRoom
|
let singleRoom = [SpaceServiceRoom].mockSingleRoom
|
||||||
setupViewModel(joinedParentSpaces: singleRoom,
|
setupViewModel(joinedParentSpaces: singleRoom,
|
||||||
joinRule: .restricted(rules: []))
|
joinRule: .restricted(rules: []))
|
||||||
|
|
||||||
@@ -424,8 +424,8 @@ class SecurityAndPrivacyScreenViewModelTests: XCTestCase {
|
|||||||
|
|
||||||
// MARK: - Helpers
|
// MARK: - Helpers
|
||||||
|
|
||||||
private func setupViewModel(joinedParentSpaces: [SpaceServiceRoomProtocol],
|
private func setupViewModel(joinedParentSpaces: [SpaceServiceRoom],
|
||||||
topLevelSpaces: [SpaceServiceRoomProtocol] = [],
|
topLevelSpaces: [SpaceServiceRoom] = [],
|
||||||
joinRule: JoinRule) {
|
joinRule: JoinRule) {
|
||||||
let appSettings = AppSettings()
|
let appSettings = AppSettings()
|
||||||
appSettings.spaceSettingsEnabled = true
|
appSettings.spaceSettingsEnabled = true
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ class SpaceAddRoomsScreenViewModelTests: XCTestCase {
|
|||||||
|
|
||||||
func setupViewModel() {
|
func setupViewModel() {
|
||||||
let summaryProvider = RoomSummaryProviderMock(.init(state: .loaded(.mockRooms)))
|
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())
|
let clientProxy = ClientProxyMock(.init())
|
||||||
clientProxy.recentlyVisitedRoomsFilterReturnValue = .init(repeating: JoinedRoomProxyMock(.init()), count: 5)
|
clientProxy.recentlyVisitedRoomsFilterReturnValue = .init(repeating: JoinedRoomProxyMock(.init()), count: 5)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import XCTest
|
|||||||
|
|
||||||
@MainActor
|
@MainActor
|
||||||
class SpacesScreenViewModelTests: XCTestCase {
|
class SpacesScreenViewModelTests: XCTestCase {
|
||||||
var topLevelSpacesSubject: CurrentValueSubject<[SpaceServiceRoomProtocol], Never>!
|
var topLevelSpacesSubject: CurrentValueSubject<[SpaceServiceRoom], Never>!
|
||||||
var spaceServiceProxy: SpaceServiceProxyMock!
|
var spaceServiceProxy: SpaceServiceProxyMock!
|
||||||
var appSettings: AppSettings!
|
var appSettings: AppSettings!
|
||||||
|
|
||||||
@@ -47,7 +47,7 @@ class SpacesScreenViewModelTests: XCTestCase {
|
|||||||
|
|
||||||
deferred = deferFulfillment(context.observe(\.viewState.topLevelSpaces)) { $0.count == 1 }
|
deferred = deferFulfillment(context.observe(\.viewState.topLevelSpaces)) { $0.count == 1 }
|
||||||
topLevelSpacesSubject.send([
|
topLevelSpacesSubject.send([
|
||||||
SpaceServiceRoomMock(.init(isSpace: true))
|
SpaceServiceRoom.mock(isSpace: true)
|
||||||
])
|
])
|
||||||
try await deferred.fulfill()
|
try await deferred.fulfill()
|
||||||
XCTAssertEqual(context.viewState.topLevelSpaces.count, 1)
|
XCTAssertEqual(context.viewState.topLevelSpaces.count, 1)
|
||||||
@@ -97,9 +97,9 @@ class SpacesScreenViewModelTests: XCTestCase {
|
|||||||
let userSession = UserSessionMock(.init(clientProxy: clientProxy))
|
let userSession = UserSessionMock(.init(clientProxy: clientProxy))
|
||||||
|
|
||||||
topLevelSpacesSubject = .init([
|
topLevelSpacesSubject = .init([
|
||||||
SpaceServiceRoomMock(.init(id: "space1", isSpace: true)),
|
SpaceServiceRoom.mock(id: "space1", isSpace: true),
|
||||||
SpaceServiceRoomMock(.init(id: "space2", isSpace: true)),
|
SpaceServiceRoom.mock(id: "space2", isSpace: true),
|
||||||
SpaceServiceRoomMock(.init(id: "space3", isSpace: true))
|
SpaceServiceRoom.mock(id: "space3", isSpace: true)
|
||||||
])
|
])
|
||||||
spaceServiceProxy = SpaceServiceProxyMock(.init())
|
spaceServiceProxy = SpaceServiceProxyMock(.init())
|
||||||
spaceServiceProxy.topLevelSpacesPublisher = topLevelSpacesSubject.asCurrentValuePublisher()
|
spaceServiceProxy.topLevelSpacesPublisher = topLevelSpacesSubject.asCurrentValuePublisher()
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import MatrixRustSDKMocks
|
|||||||
class SpaceScreenViewModelTests: XCTestCase {
|
class SpaceScreenViewModelTests: XCTestCase {
|
||||||
var spaceRoomListProxy: SpaceRoomListProxyMock!
|
var spaceRoomListProxy: SpaceRoomListProxyMock!
|
||||||
var spaceServiceProxy: SpaceServiceProxyMock!
|
var spaceServiceProxy: SpaceServiceProxyMock!
|
||||||
let mockSpaceRooms = [SpaceServiceRoomProtocol].mockSpaceList
|
let mockSpaceRooms = [SpaceServiceRoom].mockSpaceList
|
||||||
var clientProxy: ClientProxyMock!
|
var clientProxy: ClientProxyMock!
|
||||||
var paginationStateSubject: CurrentValueSubject<SpaceRoomListPaginationState, Never> = .init(.idle(endReached: true))
|
var paginationStateSubject: CurrentValueSubject<SpaceRoomListPaginationState, Never> = .init(.idle(endReached: true))
|
||||||
var rustLeaveHandle: LeaveSpaceHandleSDKMock!
|
var rustLeaveHandle: LeaveSpaceHandleSDKMock!
|
||||||
@@ -308,8 +308,8 @@ class SpaceScreenViewModelTests: XCTestCase {
|
|||||||
|
|
||||||
// MARK: - Helpers
|
// MARK: - Helpers
|
||||||
|
|
||||||
private func setupViewModel(initialSpaceRooms: [SpaceServiceRoomProtocol] = [], paginationResponses: [[SpaceServiceRoomProtocol]] = []) {
|
private func setupViewModel(initialSpaceRooms: [SpaceServiceRoom] = [], paginationResponses: [[SpaceServiceRoom]] = []) {
|
||||||
spaceRoomListProxy = SpaceRoomListProxyMock(.init(spaceServiceRoom: SpaceServiceRoomMock(.init(isSpace: true)),
|
spaceRoomListProxy = SpaceRoomListProxyMock(.init(spaceServiceRoom: SpaceServiceRoom.mock(isSpace: true),
|
||||||
initialSpaceRooms: initialSpaceRooms,
|
initialSpaceRooms: initialSpaceRooms,
|
||||||
paginationStateSubject: paginationStateSubject,
|
paginationStateSubject: paginationStateSubject,
|
||||||
paginationResponses: paginationResponses))
|
paginationResponses: paginationResponses))
|
||||||
|
|||||||
Reference in New Issue
Block a user