mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 01:20:12 +00:00
Adopt the lastest SDK APIs and refactor how we deal with user permissions.
This patch introduces a new RoomPowerLevelsProxy and its associated mock and adopts newer Rust APIs to make working with user power levels and permissions easier.
This commit is contained in:
committed by
Stefan Ceriu
parent
96e5ed06f5
commit
f522e15dac
@@ -3,7 +3,7 @@
|
|||||||
archiveVersion = 1;
|
archiveVersion = 1;
|
||||||
classes = {
|
classes = {
|
||||||
};
|
};
|
||||||
objectVersion = 54;
|
objectVersion = 63;
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXAggregateTarget section */
|
/* Begin PBXAggregateTarget section */
|
||||||
@@ -145,6 +145,9 @@
|
|||||||
1801F1467ABCEA080419E150 /* preview_avatar_user.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 87FC42213E86E8182CFD3A49 /* preview_avatar_user.jpg */; };
|
1801F1467ABCEA080419E150 /* preview_avatar_user.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 87FC42213E86E8182CFD3A49 /* preview_avatar_user.jpg */; };
|
||||||
182D532B736178A1DED9F76E /* ReportRoomScreenModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11FCAE847556719BBE7A0882 /* ReportRoomScreenModels.swift */; };
|
182D532B736178A1DED9F76E /* ReportRoomScreenModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11FCAE847556719BBE7A0882 /* ReportRoomScreenModels.swift */; };
|
||||||
18386B777FDA74E4B3282D4F /* TimelineItemThreadSummary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98C6A082F2B2A15E1B9BE280 /* TimelineItemThreadSummary.swift */; };
|
18386B777FDA74E4B3282D4F /* TimelineItemThreadSummary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98C6A082F2B2A15E1B9BE280 /* TimelineItemThreadSummary.swift */; };
|
||||||
|
183CFD912E054B3400995797 /* RoomPowerLevelsProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 183CFD902E054B2F00995797 /* RoomPowerLevelsProxy.swift */; };
|
||||||
|
183CFD952E055C0400995797 /* RoomPowerLevelProxyProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 183CFD942E055BFF00995797 /* RoomPowerLevelProxyProtocol.swift */; };
|
||||||
|
183CFD972E055C5600995797 /* RoomPowerLevelsProxyMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 183CFD962E055C5100995797 /* RoomPowerLevelsProxyMock.swift */; };
|
||||||
18867F4F1C8991EEC56EA932 /* UTType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 897DF5E9A70CE05A632FC8AF /* UTType.swift */; };
|
18867F4F1C8991EEC56EA932 /* UTType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 897DF5E9A70CE05A632FC8AF /* UTType.swift */; };
|
||||||
18978C9438206828C1D5AF2A /* test_animated_image.gif in Resources */ = {isa = PBXBuildFile; fileRef = 53FD6D3D38F556CEAA280C58 /* test_animated_image.gif */; };
|
18978C9438206828C1D5AF2A /* test_animated_image.gif in Resources */ = {isa = PBXBuildFile; fileRef = 53FD6D3D38F556CEAA280C58 /* test_animated_image.gif */; };
|
||||||
18E3786918486D4C9726BC84 /* FormButtonStyles.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89FBFC09F9DAFF1E4BA97849 /* FormButtonStyles.swift */; };
|
18E3786918486D4C9726BC84 /* FormButtonStyles.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89FBFC09F9DAFF1E4BA97849 /* FormButtonStyles.swift */; };
|
||||||
@@ -1401,7 +1404,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; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
|
048A21188AB19349D026BECD /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; 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>"; };
|
||||||
@@ -1475,7 +1478,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; path = IntegrationTests.xctestplan; sourceTree = "<group>"; };
|
1304D9191300873EADA52D6E /* IntegrationTests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; 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>"; };
|
||||||
@@ -1496,6 +1499,9 @@
|
|||||||
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>"; };
|
||||||
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>"; };
|
||||||
|
183CFD902E054B2F00995797 /* RoomPowerLevelsProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomPowerLevelsProxy.swift; sourceTree = "<group>"; };
|
||||||
|
183CFD942E055BFF00995797 /* RoomPowerLevelProxyProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomPowerLevelProxyProtocol.swift; sourceTree = "<group>"; };
|
||||||
|
183CFD962E055C5100995797 /* RoomPowerLevelsProxyMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomPowerLevelsProxyMock.swift; sourceTree = "<group>"; };
|
||||||
18486B87745B1811E7FBD3D2 /* AnalyticsPromptScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsPromptScreenModels.swift; sourceTree = "<group>"; };
|
18486B87745B1811E7FBD3D2 /* AnalyticsPromptScreenModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsPromptScreenModels.swift; sourceTree = "<group>"; };
|
||||||
184CF8C196BE143AE226628D /* DecorationTimelineItemProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DecorationTimelineItemProtocol.swift; sourceTree = "<group>"; };
|
184CF8C196BE143AE226628D /* DecorationTimelineItemProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DecorationTimelineItemProtocol.swift; sourceTree = "<group>"; };
|
||||||
18F2958E6D247AE2516BEEE8 /* ClientProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClientProxy.swift; sourceTree = "<group>"; };
|
18F2958E6D247AE2516BEEE8 /* ClientProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClientProxy.swift; sourceTree = "<group>"; };
|
||||||
@@ -1578,7 +1584,7 @@
|
|||||||
25F7FE40EF7490A7E09D7BE6 /* NotificationItemProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationItemProxy.swift; sourceTree = "<group>"; };
|
25F7FE40EF7490A7E09D7BE6 /* NotificationItemProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationItemProxy.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; path = PreviewTests.xctestplan; sourceTree = "<group>"; };
|
267BB1D5B08A9511F894CB57 /* PreviewTests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; 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>"; };
|
||||||
@@ -1655,7 +1661,7 @@
|
|||||||
3558A15CFB934F9229301527 /* RestorationToken.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RestorationToken.swift; sourceTree = "<group>"; };
|
3558A15CFB934F9229301527 /* RestorationToken.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RestorationToken.swift; 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>"; };
|
||||||
35FA991289149D31F4286747 /* UserPreference.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserPreference.swift; sourceTree = "<group>"; };
|
35FA991289149D31F4286747 /* UserPreference.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserPreference.swift; sourceTree = "<group>"; };
|
||||||
36DA824791172B9821EACBED /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
|
36DA824791172B9821EACBED /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; 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>"; };
|
||||||
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>"; };
|
||||||
37CA26F55123E36B50DB0B3A /* AttributedStringTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttributedStringTests.swift; sourceTree = "<group>"; };
|
37CA26F55123E36B50DB0B3A /* AttributedStringTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttributedStringTests.swift; sourceTree = "<group>"; };
|
||||||
@@ -2070,7 +2076,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; path = UITests.xctestplan; sourceTree = "<group>"; };
|
8E088F2A1B9EC529D3221931 /* UITests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; 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>"; };
|
||||||
@@ -2278,7 +2284,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; path = ConfettiScene.scn; sourceTree = "<group>"; };
|
B61C339A2FDDBD067FF6635C /* ConfettiScene.scn */ = {isa = PBXFileReference; lastKnownFileType = file.bplist; 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>"; };
|
||||||
B655A536341D2695158C6664 /* AuthenticationClientBuilderFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationClientBuilderFactory.swift; sourceTree = "<group>"; };
|
B655A536341D2695158C6664 /* AuthenticationClientBuilderFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationClientBuilderFactory.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>"; };
|
||||||
@@ -2306,7 +2312,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; path = test_apple_image.heic; sourceTree = "<group>"; };
|
BB576F4118C35E6B5124FA22 /* test_apple_image.heic */ = {isa = PBXFileReference; lastKnownFileType = file; 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>"; };
|
||||||
@@ -2404,7 +2410,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; path = UnitTests.xctestplan; sourceTree = "<group>"; };
|
CEE41494C837AA403A06A5D9 /* UnitTests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = UnitTests.xctestplan; sourceTree = "<group>"; };
|
||||||
D01FD1171FF40E34D707FD00 /* BigIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BigIcon.swift; sourceTree = "<group>"; };
|
D01FD1171FF40E34D707FD00 /* BigIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BigIcon.swift; sourceTree = "<group>"; };
|
||||||
D03D7ECAC68C2FFB8CF01BCB /* DeactivateAccountScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeactivateAccountScreen.swift; sourceTree = "<group>"; };
|
D03D7ECAC68C2FFB8CF01BCB /* DeactivateAccountScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeactivateAccountScreen.swift; sourceTree = "<group>"; };
|
||||||
D046ABB22E680F7C5054441B /* SecurityAndPrivacyScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecurityAndPrivacyScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
D046ABB22E680F7C5054441B /* SecurityAndPrivacyScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecurityAndPrivacyScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
||||||
@@ -2466,7 +2472,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; path = test_voice_message.m4a; sourceTree = "<group>"; };
|
DCA2D836BD10303F37FAAEED /* test_voice_message.m4a */ = {isa = PBXFileReference; lastKnownFileType = file; 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>"; };
|
||||||
@@ -2509,7 +2515,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; path = portrait_test_video.mp4; sourceTree = "<group>"; };
|
E5E7D4EE7CA295E5039FDA21 /* portrait_test_video.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; 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>"; };
|
||||||
@@ -2551,7 +2557,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; path = message.caf; sourceTree = "<group>"; };
|
ED482057AE39D5C6D9C5F3D8 /* message.caf */ = {isa = PBXFileReference; lastKnownFileType = file; 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>"; };
|
||||||
EE378083653EF0C9B5E9D580 /* EmoteRoomTimelineItemContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmoteRoomTimelineItemContent.swift; sourceTree = "<group>"; };
|
EE378083653EF0C9B5E9D580 /* EmoteRoomTimelineItemContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmoteRoomTimelineItemContent.swift; sourceTree = "<group>"; };
|
||||||
@@ -3286,6 +3292,7 @@
|
|||||||
31CE4DA53232AA534057F912 /* Mocks */ = {
|
31CE4DA53232AA534057F912 /* Mocks */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
183CFD962E055C5100995797 /* RoomPowerLevelsProxyMock.swift */,
|
||||||
69CB8242D69B7E4D0B32E18D /* AggregatedReactionMock.swift */,
|
69CB8242D69B7E4D0B32E18D /* AggregatedReactionMock.swift */,
|
||||||
3BAC027034248429A438886B /* AppMediatorMock.swift */,
|
3BAC027034248429A438886B /* AppMediatorMock.swift */,
|
||||||
0554FEA301486A8CFA475D5A /* AuthenticationClientBuilderFactoryMock.swift */,
|
0554FEA301486A8CFA475D5A /* AuthenticationClientBuilderFactoryMock.swift */,
|
||||||
@@ -3634,6 +3641,8 @@
|
|||||||
40E6246F03D1FE377BC5D963 /* Room */ = {
|
40E6246F03D1FE377BC5D963 /* Room */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
183CFD902E054B2F00995797 /* RoomPowerLevelsProxy.swift */,
|
||||||
|
183CFD942E055BFF00995797 /* RoomPowerLevelProxyProtocol.swift */,
|
||||||
C30F45308428A4D9FFDB2FB8 /* BannedRoomProxy.swift */,
|
C30F45308428A4D9FFDB2FB8 /* BannedRoomProxy.swift */,
|
||||||
0E95B3BDB80531C85CD50AE6 /* InvitedRoomProxy.swift */,
|
0E95B3BDB80531C85CD50AE6 /* InvitedRoomProxy.swift */,
|
||||||
07C6B0B087FE6601C3F77816 /* JoinedRoomProxy.swift */,
|
07C6B0B087FE6601C3F77816 /* JoinedRoomProxy.swift */,
|
||||||
@@ -6486,7 +6495,6 @@
|
|||||||
EC6D0C817B1C21D9D096505A /* XCRemoteSwiftPackageReference "Version" */,
|
EC6D0C817B1C21D9D096505A /* XCRemoteSwiftPackageReference "Version" */,
|
||||||
EE40B0E16A55BD23ECBFFD22 /* XCRemoteSwiftPackageReference "matrix-rich-text-editor-swift" */,
|
EE40B0E16A55BD23ECBFFD22 /* XCRemoteSwiftPackageReference "matrix-rich-text-editor-swift" */,
|
||||||
);
|
);
|
||||||
preferredProjectObjectVersion = 54;
|
|
||||||
projectDirPath = "";
|
projectDirPath = "";
|
||||||
projectRoot = "";
|
projectRoot = "";
|
||||||
targets = (
|
targets = (
|
||||||
@@ -7112,6 +7120,7 @@
|
|||||||
BB6BF528BC7F5B87E08C4F18 /* CameraPicker.swift in Sources */,
|
BB6BF528BC7F5B87E08C4F18 /* CameraPicker.swift in Sources */,
|
||||||
E14E469CD97550D0FC58F3CA /* CancellableTask.swift in Sources */,
|
E14E469CD97550D0FC58F3CA /* CancellableTask.swift in Sources */,
|
||||||
DF8F1211F2B0B56F0FCCA5C2 /* CertificateValidatorHook.swift in Sources */,
|
DF8F1211F2B0B56F0FCCA5C2 /* CertificateValidatorHook.swift in Sources */,
|
||||||
|
183CFD952E055C0400995797 /* RoomPowerLevelProxyProtocol.swift in Sources */,
|
||||||
D885B783B95AD7832D4EF5DD /* CharacterSet.swift in Sources */,
|
D885B783B95AD7832D4EF5DD /* CharacterSet.swift in Sources */,
|
||||||
C80E06ED97CE52704A46C148 /* ClientBuilder.swift in Sources */,
|
C80E06ED97CE52704A46C148 /* ClientBuilder.swift in Sources */,
|
||||||
87CEA3E07B602705BC2D2A20 /* ClientBuilderHook.swift in Sources */,
|
87CEA3E07B602705BC2D2A20 /* ClientBuilderHook.swift in Sources */,
|
||||||
@@ -7415,6 +7424,7 @@
|
|||||||
53A59720F4729D9BBFFB7CAB /* NotificationSettingsEditScreenCoordinator.swift in Sources */,
|
53A59720F4729D9BBFFB7CAB /* NotificationSettingsEditScreenCoordinator.swift in Sources */,
|
||||||
4EA1CE0E88EA68E862FF0EA2 /* NotificationSettingsEditScreenModels.swift in Sources */,
|
4EA1CE0E88EA68E862FF0EA2 /* NotificationSettingsEditScreenModels.swift in Sources */,
|
||||||
119AE9A3FC6E0606C1146528 /* NotificationSettingsEditScreenRoomCell.swift in Sources */,
|
119AE9A3FC6E0606C1146528 /* NotificationSettingsEditScreenRoomCell.swift in Sources */,
|
||||||
|
183CFD912E054B3400995797 /* RoomPowerLevelsProxy.swift in Sources */,
|
||||||
D5FE90A6AF5FD5AE91BD37C7 /* NotificationSettingsEditScreenViewModel.swift in Sources */,
|
D5FE90A6AF5FD5AE91BD37C7 /* NotificationSettingsEditScreenViewModel.swift in Sources */,
|
||||||
2F623DA1122140A987B34D08 /* NotificationSettingsEditScreenViewModelProtocol.swift in Sources */,
|
2F623DA1122140A987B34D08 /* NotificationSettingsEditScreenViewModelProtocol.swift in Sources */,
|
||||||
B93FA0DA1504B301CAEE141B /* NotificationSettingsProxy.swift in Sources */,
|
B93FA0DA1504B301CAEE141B /* NotificationSettingsProxy.swift in Sources */,
|
||||||
@@ -7687,6 +7697,7 @@
|
|||||||
91D1A46A733EC24C081DD353 /* SessionVerificationRequestDetailsView.swift in Sources */,
|
91D1A46A733EC24C081DD353 /* SessionVerificationRequestDetailsView.swift in Sources */,
|
||||||
707E49BE07E8EB8A13C0EB1E /* SessionVerificationScreen.swift in Sources */,
|
707E49BE07E8EB8A13C0EB1E /* SessionVerificationScreen.swift in Sources */,
|
||||||
D02DEB36D32A72A1B365E452 /* SessionVerificationScreenCoordinator.swift in Sources */,
|
D02DEB36D32A72A1B365E452 /* SessionVerificationScreenCoordinator.swift in Sources */,
|
||||||
|
183CFD972E055C5600995797 /* RoomPowerLevelsProxyMock.swift in Sources */,
|
||||||
5710AAB27D5D866292C1FE06 /* SessionVerificationScreenModels.swift in Sources */,
|
5710AAB27D5D866292C1FE06 /* SessionVerificationScreenModels.swift in Sources */,
|
||||||
601AB75BD52B0B4276CEB84A /* SessionVerificationScreenStateMachine.swift in Sources */,
|
601AB75BD52B0B4276CEB84A /* SessionVerificationScreenStateMachine.swift in Sources */,
|
||||||
4A8287E5281B44A8754BE509 /* SessionVerificationScreenViewModel.swift in Sources */,
|
4A8287E5281B44A8754BE509 /* SessionVerificationScreenViewModel.swift in Sources */,
|
||||||
@@ -8148,9 +8159,7 @@
|
|||||||
"@executable_path/../../Frameworks",
|
"@executable_path/../../Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = "$(MARKETING_VERSION)";
|
MARKETING_VERSION = "$(MARKETING_VERSION)";
|
||||||
OTHER_SWIFT_FLAGS = (
|
OTHER_SWIFT_FLAGS = "-DIS_NSE";
|
||||||
"-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;
|
||||||
@@ -8199,9 +8208,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = "$(MARKETING_VERSION)";
|
MARKETING_VERSION = "$(MARKETING_VERSION)";
|
||||||
OTHER_SWIFT_FLAGS = (
|
OTHER_SWIFT_FLAGS = "-DIS_MAIN_APP";
|
||||||
"-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)";
|
||||||
@@ -8227,9 +8234,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = "$(MARKETING_VERSION)";
|
MARKETING_VERSION = "$(MARKETING_VERSION)";
|
||||||
OTHER_SWIFT_FLAGS = (
|
OTHER_SWIFT_FLAGS = "-DIS_MAIN_APP";
|
||||||
"-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)";
|
||||||
@@ -8454,9 +8459,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@loader_path/Frameworks",
|
"@loader_path/Frameworks",
|
||||||
);
|
);
|
||||||
OTHER_SWIFT_FLAGS = (
|
OTHER_SWIFT_FLAGS = "-DDEBUG";
|
||||||
"-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;
|
||||||
@@ -8475,9 +8478,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@loader_path/Frameworks",
|
"@loader_path/Frameworks",
|
||||||
);
|
);
|
||||||
OTHER_SWIFT_FLAGS = (
|
OTHER_SWIFT_FLAGS = "-DRELEASE";
|
||||||
"-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;
|
||||||
@@ -8499,9 +8500,7 @@
|
|||||||
"@executable_path/../../Frameworks",
|
"@executable_path/../../Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = "$(MARKETING_VERSION)";
|
MARKETING_VERSION = "$(MARKETING_VERSION)";
|
||||||
OTHER_SWIFT_FLAGS = (
|
OTHER_SWIFT_FLAGS = "-DIS_NSE";
|
||||||
"-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;
|
||||||
@@ -8732,7 +8731,7 @@
|
|||||||
repositoryURL = "https://github.com/element-hq/matrix-rust-components-swift";
|
repositoryURL = "https://github.com/element-hq/matrix-rust-components-swift";
|
||||||
requirement = {
|
requirement = {
|
||||||
kind = exactVersion;
|
kind = exactVersion;
|
||||||
version = 25.06.18;
|
version = 25.06.20;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
701C7BEF8F70F7A83E852DCC /* XCRemoteSwiftPackageReference "GZIP" */ = {
|
701C7BEF8F70F7A83E852DCC /* XCRemoteSwiftPackageReference "GZIP" */ = {
|
||||||
|
|||||||
@@ -158,8 +158,8 @@
|
|||||||
"kind" : "remoteSourceControl",
|
"kind" : "remoteSourceControl",
|
||||||
"location" : "https://github.com/element-hq/matrix-rust-components-swift",
|
"location" : "https://github.com/element-hq/matrix-rust-components-swift",
|
||||||
"state" : {
|
"state" : {
|
||||||
"revision" : "6f6885adeb33f67fabeb9f732e8781b4f72e8955",
|
"revision" : "68abbf0622825f008e2e9f70678b2433006e38ef",
|
||||||
"version" : "25.6.18"
|
"version" : "25.6.20"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -89,9 +89,8 @@ extension JoinedRoomProxyMock {
|
|||||||
markAsReadReceiptTypeReturnValue = .success(())
|
markAsReadReceiptTypeReturnValue = .success(())
|
||||||
flagAsFavouriteReturnValue = .success(())
|
flagAsFavouriteReturnValue = .success(())
|
||||||
|
|
||||||
powerLevelsReturnValue = .success(.mock)
|
|
||||||
applyPowerLevelChangesReturnValue = .success(())
|
applyPowerLevelChangesReturnValue = .success(())
|
||||||
resetPowerLevelsReturnValue = .success(.mock)
|
resetPowerLevelsReturnValue = .success(())
|
||||||
suggestedRoleForClosure = { [weak self] userID in
|
suggestedRoleForClosure = { [weak self] userID in
|
||||||
guard case .success(let member) = await self?.getMember(userID: userID) else {
|
guard case .success(let member) = await self?.getMember(userID: userID) else {
|
||||||
return .failure(.sdkError(RoomProxyMockError.generic))
|
return .failure(.sdkError(RoomProxyMockError.generic))
|
||||||
@@ -99,22 +98,27 @@ extension JoinedRoomProxyMock {
|
|||||||
return .success(member.role)
|
return .success(member.role)
|
||||||
}
|
}
|
||||||
updatePowerLevelsForUsersReturnValue = .success(())
|
updatePowerLevelsForUsersReturnValue = .success(())
|
||||||
canUserUserIDSendMessageReturnValue = .success(configuration.canUserSendMessage)
|
|
||||||
canUserUserIDSendStateEventClosure = { [weak self] userID, _ in
|
let powerLevelsProxyMock = RoomPowerLevelsProxyMock(configuration: .init())
|
||||||
|
|
||||||
|
powerLevelsProxyMock.canUserUserIDSendMessageReturnValue = .success(configuration.canUserSendMessage)
|
||||||
|
powerLevelsProxyMock.canUserUserIDSendStateEventClosure = { [weak self] userID, _ in
|
||||||
.success(self?.membersPublisher.value.first { $0.userID == userID }?.role ?? .user != .user)
|
.success(self?.membersPublisher.value.first { $0.userID == userID }?.role ?? .user != .user)
|
||||||
}
|
}
|
||||||
canUserInviteUserIDReturnValue = .success(configuration.canUserInvite)
|
powerLevelsProxyMock.canUserInviteUserIDReturnValue = .success(configuration.canUserInvite)
|
||||||
canUserRedactOtherUserIDReturnValue = .success(false)
|
powerLevelsProxyMock.canUserRedactOtherUserIDReturnValue = .success(false)
|
||||||
canUserRedactOwnUserIDReturnValue = .success(true)
|
powerLevelsProxyMock.canUserRedactOwnUserIDReturnValue = .success(true)
|
||||||
canUserKickUserIDClosure = { [weak self] userID in
|
powerLevelsProxyMock.canUserKickUserIDClosure = { [weak self] userID in
|
||||||
.success(self?.membersPublisher.value.first { $0.userID == userID }?.role ?? .user != .user)
|
.success(self?.membersPublisher.value.first { $0.userID == userID }?.role ?? .user != .user)
|
||||||
}
|
}
|
||||||
canUserBanUserIDClosure = { [weak self] userID in
|
powerLevelsProxyMock.canUserBanUserIDClosure = { [weak self] userID in
|
||||||
.success(self?.membersPublisher.value.first { $0.userID == userID }?.role ?? .user != .user)
|
.success(self?.membersPublisher.value.first { $0.userID == userID }?.role ?? .user != .user)
|
||||||
}
|
}
|
||||||
canUserTriggerRoomNotificationUserIDReturnValue = .success(configuration.canUserTriggerRoomNotification)
|
powerLevelsProxyMock.canUserTriggerRoomNotificationUserIDReturnValue = .success(configuration.canUserTriggerRoomNotification)
|
||||||
canUserJoinCallUserIDReturnValue = .success(configuration.canUserJoinCall)
|
powerLevelsProxyMock.canUserJoinCallUserIDReturnValue = .success(configuration.canUserJoinCall)
|
||||||
canUserPinOrUnpinUserIDReturnValue = .success(configuration.canUserPin)
|
powerLevelsProxyMock.canUserPinOrUnpinUserIDReturnValue = .success(configuration.canUserPin)
|
||||||
|
|
||||||
|
powerLevelsReturnValue = .success(powerLevelsProxyMock)
|
||||||
|
|
||||||
kickUserReasonReturnValue = .success(())
|
kickUserReasonReturnValue = .success(())
|
||||||
banUserReasonReturnValue = .success(())
|
banUserReasonReturnValue = .success(())
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
//
|
||||||
|
// 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 MatrixRustSDK
|
||||||
|
|
||||||
|
extension RoomPowerLevelsProxyMock {
|
||||||
|
struct Configuration { }
|
||||||
|
|
||||||
|
convenience init(configuration: Configuration) {
|
||||||
|
self.init()
|
||||||
|
|
||||||
|
underlyingValues = RoomPowerLevelsValues.mock
|
||||||
|
|
||||||
|
canUserUserIDSendMessageReturnValue = .success(true)
|
||||||
|
canUserUserIDSendStateEventReturnValue = .success(true)
|
||||||
|
canUserInviteUserIDReturnValue = .success(true)
|
||||||
|
canUserRedactOtherUserIDReturnValue = .success(true)
|
||||||
|
canUserRedactOwnUserIDReturnValue = .success(true)
|
||||||
|
canUserKickUserIDReturnValue = .success(true)
|
||||||
|
canUserBanUserIDReturnValue = .success(true)
|
||||||
|
canUserTriggerRoomNotificationUserIDReturnValue = .success(true)
|
||||||
|
canUserPinOrUnpinUserIDReturnValue = .success(true)
|
||||||
|
canUserJoinCallUserIDReturnValue = .success(true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension RoomPowerLevelsValues {
|
||||||
|
static var mock: RoomPowerLevelsValues {
|
||||||
|
RoomPowerLevelsValues(ban: 50,
|
||||||
|
invite: 0,
|
||||||
|
kick: 50,
|
||||||
|
redact: 50,
|
||||||
|
eventsDefault: 0,
|
||||||
|
stateDefault: 50,
|
||||||
|
usersDefault: 0,
|
||||||
|
roomName: 50,
|
||||||
|
roomAvatar: 50,
|
||||||
|
roomTopic: 50)
|
||||||
|
}
|
||||||
|
}
|
||||||
+4
-3
@@ -224,9 +224,10 @@ class KnockRequestsListScreenViewModel: KnockRequestsListScreenViewModelType, Kn
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func updatePermissions() async {
|
private func updatePermissions() async {
|
||||||
state.canAccept = await (try? roomProxy.canUserInvite(userID: roomProxy.ownUserID).get()) == true
|
let powerLevels = try? await roomProxy.powerLevels().get()
|
||||||
state.canDecline = await (try? roomProxy.canUserKick(userID: roomProxy.ownUserID).get()) == true
|
state.canAccept = (try? powerLevels?.canUserInvite(userID: roomProxy.ownUserID).get()) == true
|
||||||
state.canBan = await (try? roomProxy.canUserBan(userID: roomProxy.ownUserID).get()) == true
|
state.canDecline = (try? powerLevels?.canUserKick(userID: roomProxy.ownUserID).get()) == true
|
||||||
|
state.canBan = (try? powerLevels?.canUserBan(userID: roomProxy.ownUserID).get()) == true
|
||||||
}
|
}
|
||||||
|
|
||||||
private static let loadingIndicatorIdentifier = "\(KnockRequestsListScreenViewModel.self)-Loading"
|
private static let loadingIndicatorIdentifier = "\(KnockRequestsListScreenViewModel.self)-Loading"
|
||||||
|
|||||||
@@ -40,10 +40,10 @@ class RoomDetailsEditScreenViewModel: RoomDetailsEditScreenViewModelType, RoomDe
|
|||||||
bindings: .init(name: roomName ?? "", topic: roomTopic ?? "")), mediaProvider: mediaProvider)
|
bindings: .init(name: roomName ?? "", topic: roomTopic ?? "")), mediaProvider: mediaProvider)
|
||||||
|
|
||||||
Task {
|
Task {
|
||||||
// Can't use async let because the mocks aren't thread safe when calling the same method 🤦♂️
|
let powerLevels = try? await roomProxy.powerLevels().get()
|
||||||
state.canEditAvatar = await (try? roomProxy.canUser(userID: roomProxy.ownUserID, sendStateEvent: .roomAvatar).get()) == .some(true)
|
state.canEditAvatar = (try? powerLevels?.canUser(userID: roomProxy.ownUserID, sendStateEvent: .roomAvatar).get()) == .some(true)
|
||||||
state.canEditName = await (try? roomProxy.canUser(userID: roomProxy.ownUserID, sendStateEvent: .roomName).get()) == .some(true)
|
state.canEditName = (try? powerLevels?.canUser(userID: roomProxy.ownUserID, sendStateEvent: .roomName).get()) == .some(true)
|
||||||
state.canEditTopic = await (try? roomProxy.canUser(userID: roomProxy.ownUserID, sendStateEvent: .roomTopic).get()) == .some(true)
|
state.canEditTopic = (try? powerLevels?.canUser(userID: roomProxy.ownUserID, sendStateEvent: .roomTopic).get()) == .some(true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -90,13 +90,6 @@ class RoomDetailsScreenViewModel: RoomDetailsScreenViewModelType, RoomDetailsScr
|
|||||||
}
|
}
|
||||||
.store(in: &cancellables)
|
.store(in: &cancellables)
|
||||||
|
|
||||||
Task {
|
|
||||||
let userID = roomProxy.ownUserID
|
|
||||||
if case let .success(permission) = await roomProxy.canUserJoinCall(userID: userID) {
|
|
||||||
state.canJoinCall = permission
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Task {
|
Task {
|
||||||
if case let .success(permalinkURL) = await roomProxy.matrixToPermalink() {
|
if case let .success(permalinkURL) = await roomProxy.matrixToPermalink() {
|
||||||
state.permalink = permalinkURL
|
state.permalink = permalinkURL
|
||||||
@@ -288,13 +281,16 @@ class RoomDetailsScreenViewModel: RoomDetailsScreenViewModelType, RoomDetailsScr
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func updatePowerLevelPermissions() async {
|
private func updatePowerLevelPermissions() async {
|
||||||
state.canEditRoomName = await (try? roomProxy.canUser(userID: roomProxy.ownUserID, sendStateEvent: .roomName).get()) == true
|
|
||||||
state.canEditRoomTopic = await (try? roomProxy.canUser(userID: roomProxy.ownUserID, sendStateEvent: .roomTopic).get()) == true
|
|
||||||
state.canEditRoomAvatar = await (try? roomProxy.canUser(userID: roomProxy.ownUserID, sendStateEvent: .roomAvatar).get()) == true
|
|
||||||
state.canEditRolesOrPermissions = await (try? roomProxy.suggestedRole(for: roomProxy.ownUserID).get()) == .administrator
|
state.canEditRolesOrPermissions = await (try? roomProxy.suggestedRole(for: roomProxy.ownUserID).get()) == .administrator
|
||||||
state.canInviteUsers = await (try? roomProxy.canUserInvite(userID: roomProxy.ownUserID).get()) == true
|
|
||||||
state.canKickUsers = await (try? roomProxy.canUserKick(userID: roomProxy.ownUserID).get()) == true
|
let powerLevels = try? await roomProxy.powerLevels().get()
|
||||||
state.canBanUsers = await (try? roomProxy.canUserBan(userID: roomProxy.ownUserID).get()) == true
|
state.canEditRoomName = (try? powerLevels?.canUser(userID: roomProxy.ownUserID, sendStateEvent: .roomName).get()) == true
|
||||||
|
state.canEditRoomTopic = (try? powerLevels?.canUser(userID: roomProxy.ownUserID, sendStateEvent: .roomTopic).get()) == true
|
||||||
|
state.canEditRoomAvatar = (try? powerLevels?.canUser(userID: roomProxy.ownUserID, sendStateEvent: .roomAvatar).get()) == true
|
||||||
|
state.canInviteUsers = (try? powerLevels?.canUserInvite(userID: roomProxy.ownUserID).get()) == true
|
||||||
|
state.canKickUsers = (try? powerLevels?.canUserKick(userID: roomProxy.ownUserID).get()) == true
|
||||||
|
state.canBanUsers = (try? powerLevels?.canUserBan(userID: roomProxy.ownUserID).get()) == true
|
||||||
|
state.canJoinCall = (try? powerLevels?.canUserJoinCall(userID: roomProxy.ownUserID).get()) == true
|
||||||
}
|
}
|
||||||
|
|
||||||
private func setupNotificationSettingsSubscription() {
|
private func setupNotificationSettingsSubscription() {
|
||||||
|
|||||||
@@ -99,9 +99,10 @@ class RoomMembersListScreenViewModel: RoomMembersListScreenViewModelType, RoomMe
|
|||||||
bannedMembers: roomMembersDetails.bannedMembers,
|
bannedMembers: roomMembersDetails.bannedMembers,
|
||||||
bindings: state.bindings)
|
bindings: state.bindings)
|
||||||
|
|
||||||
self.state.canInviteUsers = await (try? roomProxy.canUserInvite(userID: roomProxy.ownUserID).get()) == true
|
let powerLevels = try? await roomProxy.powerLevels().get()
|
||||||
self.state.canKickUsers = await (try? roomProxy.canUserKick(userID: roomProxy.ownUserID).get()) == true
|
self.state.canInviteUsers = (try? powerLevels?.canUserInvite(userID: roomProxy.ownUserID).get()) == true
|
||||||
self.state.canBanUsers = await (try? roomProxy.canUserBan(userID: roomProxy.ownUserID).get()) == true
|
self.state.canKickUsers = (try? powerLevels?.canUserKick(userID: roomProxy.ownUserID).get()) == true
|
||||||
|
self.state.canBanUsers = (try? powerLevels?.canUserBan(userID: roomProxy.ownUserID).get()) == true
|
||||||
|
|
||||||
hideLoadingIndicator(Self.updateStateLoadingIndicatorIdentifier)
|
hideLoadingIndicator(Self.updateStateLoadingIndicatorIdentifier)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -116,7 +116,7 @@ class RoomRolesAndPermissionsScreenViewModel: RoomRolesAndPermissionsScreenViewM
|
|||||||
private func updatePermissions() async {
|
private func updatePermissions() async {
|
||||||
switch await roomProxy.powerLevels() {
|
switch await roomProxy.powerLevels() {
|
||||||
case .success(let powerLevels):
|
case .success(let powerLevels):
|
||||||
state.permissions = .init(powerLevels: powerLevels)
|
state.permissions = .init(powerLevels: powerLevels.values)
|
||||||
case .failure:
|
case .failure:
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-6
@@ -48,12 +48,7 @@ final class CompletionSuggestionService: CompletionSuggestionServiceProtocol {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Task {
|
Task {
|
||||||
switch await roomProxy.canUserTriggerRoomNotification(userID: roomProxy.ownUserID) {
|
canMentionAllUsers = await (try? roomProxy.powerLevels().get().canUserTriggerRoomNotification(userID: roomProxy.ownUserID).get()) == true
|
||||||
case .success(let value):
|
|
||||||
canMentionAllUsers = value
|
|
||||||
case .failure:
|
|
||||||
canMentionAllUsers = false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -348,12 +348,12 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
|
|||||||
state.isKnockableRoom = false
|
state.isKnockableRoom = false
|
||||||
}
|
}
|
||||||
|
|
||||||
let ownUserID = roomProxy.ownUserID
|
let powerLevels = try? await roomProxy.powerLevels().get()
|
||||||
state.canSendMessage = await (try? roomProxy.canUser(userID: ownUserID, sendMessage: .roomMessage).get()) == true
|
state.canSendMessage = (try? powerLevels?.canUser(userID: roomProxy.ownUserID, sendMessage: .roomMessage).get()) == true
|
||||||
state.canJoinCall = await (try? roomProxy.canUserJoinCall(userID: ownUserID).get()) == true
|
state.canJoinCall = (try? powerLevels?.canUserJoinCall(userID: roomProxy.ownUserID).get()) == true
|
||||||
state.canAcceptKnocks = await (try? roomProxy.canUserInvite(userID: ownUserID).get()) == true
|
state.canAcceptKnocks = (try? powerLevels?.canUserInvite(userID: roomProxy.ownUserID).get()) == true
|
||||||
state.canDeclineKnocks = await (try? roomProxy.canUserKick(userID: ownUserID).get()) == true
|
state.canDeclineKnocks = (try? powerLevels?.canUserKick(userID: roomProxy.ownUserID).get()) == true
|
||||||
state.canBan = await (try? roomProxy.canUserBan(userID: ownUserID).get()) == true
|
state.canBan = (try? powerLevels?.canUserBan(userID: roomProxy.ownUserID).get()) == true
|
||||||
}
|
}
|
||||||
|
|
||||||
private func setupPinnedEventsTimelineItemProviderIfNeeded() {
|
private func setupPinnedEventsTimelineItemProviderIfNeeded() {
|
||||||
|
|||||||
@@ -65,6 +65,6 @@ class ThreadTimelineScreenViewModel: ThreadTimelineScreenViewModelType, ThreadTi
|
|||||||
// MARK: - Private
|
// MARK: - Private
|
||||||
|
|
||||||
private func handleRoomInfoUpdate(_ roomInfo: RoomInfoProxy) async {
|
private func handleRoomInfoUpdate(_ roomInfo: RoomInfoProxy) async {
|
||||||
state.canSendMessage = await (try? roomProxy.canUser(userID: roomProxy.ownUserID, sendMessage: .roomMessage).get()) == true
|
state.canSendMessage = await (try? roomProxy.powerLevels().get().canUser(userID: roomProxy.ownUserID, sendMessage: .roomMessage).get()) == true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -404,41 +404,13 @@ class TimelineViewModel: TimelineViewModelType, TimelineViewModelProtocol {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func updatePermissions() async {
|
private func updatePermissions() async {
|
||||||
if case let .success(value) = await roomProxy.canUser(userID: roomProxy.ownUserID, sendMessage: .roomMessage) {
|
let powerLevels = try? await roomProxy.powerLevels().get()
|
||||||
state.canCurrentUserSendMessage = value
|
state.canCurrentUserSendMessage = (try? powerLevels?.canUser(userID: roomProxy.ownUserID, sendMessage: .roomMessage).get()) == true
|
||||||
} else {
|
state.canCurrentUserRedactOthers = (try? powerLevels?.canUserRedactOther(userID: roomProxy.ownUserID).get()) == true
|
||||||
state.canCurrentUserSendMessage = false
|
state.canCurrentUserRedactSelf = (try? powerLevels?.canUserRedactOwn(userID: roomProxy.ownUserID).get()) == true
|
||||||
}
|
state.canCurrentUserPin = (try? powerLevels?.canUserPinOrUnpin(userID: roomProxy.ownUserID).get()) == true
|
||||||
|
state.canCurrentUserKick = (try? powerLevels?.canUserKick(userID: roomProxy.ownUserID).get()) == true
|
||||||
if case let .success(value) = await roomProxy.canUserRedactOther(userID: roomProxy.ownUserID) {
|
state.canCurrentUserBan = (try? powerLevels?.canUserBan(userID: roomProxy.ownUserID).get()) == true
|
||||||
state.canCurrentUserRedactOthers = value
|
|
||||||
} else {
|
|
||||||
state.canCurrentUserRedactOthers = false
|
|
||||||
}
|
|
||||||
|
|
||||||
if case let .success(value) = await roomProxy.canUserRedactOwn(userID: roomProxy.ownUserID) {
|
|
||||||
state.canCurrentUserRedactSelf = value
|
|
||||||
} else {
|
|
||||||
state.canCurrentUserRedactSelf = false
|
|
||||||
}
|
|
||||||
|
|
||||||
if case let .success(value) = await roomProxy.canUserPinOrUnpin(userID: roomProxy.ownUserID) {
|
|
||||||
state.canCurrentUserPin = value
|
|
||||||
} else {
|
|
||||||
state.canCurrentUserPin = false
|
|
||||||
}
|
|
||||||
|
|
||||||
if case let .success(value) = await roomProxy.canUserKick(userID: roomProxy.ownUserID) {
|
|
||||||
state.canCurrentUserKick = value
|
|
||||||
} else {
|
|
||||||
state.canCurrentUserKick = false
|
|
||||||
}
|
|
||||||
|
|
||||||
if case let .success(value) = await roomProxy.canUserBan(userID: roomProxy.ownUserID) {
|
|
||||||
state.canCurrentUserBan = value
|
|
||||||
} else {
|
|
||||||
state.canCurrentUserBan = false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private func setupSubscriptions() {
|
private func setupSubscriptions() {
|
||||||
|
|||||||
@@ -552,9 +552,9 @@ class JoinedRoomProxy: JoinedRoomProxyProtocol {
|
|||||||
|
|
||||||
// MARK: - Power Levels
|
// MARK: - Power Levels
|
||||||
|
|
||||||
func powerLevels() async -> Result<RoomPowerLevels, RoomProxyError> {
|
func powerLevels() async -> Result<RoomPowerLevelsProxyProtocol, RoomProxyError> {
|
||||||
do {
|
do {
|
||||||
return try await .success(room.getPowerLevels())
|
return try await .success(RoomPowerLevelsProxy(room.getPowerLevels()))
|
||||||
} catch {
|
} catch {
|
||||||
MXLog.error("Failed building the current power level settings: \(error)")
|
MXLog.error("Failed building the current power level settings: \(error)")
|
||||||
return .failure(.sdkError(error))
|
return .failure(.sdkError(error))
|
||||||
@@ -570,9 +570,10 @@ class JoinedRoomProxy: JoinedRoomProxyProtocol {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func resetPowerLevels() async -> Result<RoomPowerLevels, RoomProxyError> {
|
func resetPowerLevels() async -> Result<Void, RoomProxyError> {
|
||||||
do {
|
do {
|
||||||
return try await .success(room.resetPowerLevels())
|
_ = try await room.resetPowerLevels()
|
||||||
|
return .success(())
|
||||||
} catch {
|
} catch {
|
||||||
MXLog.error("Failed resetting the power levels: \(error)")
|
MXLog.error("Failed resetting the power levels: \(error)")
|
||||||
return .failure(.sdkError(error))
|
return .failure(.sdkError(error))
|
||||||
@@ -598,87 +599,6 @@ class JoinedRoomProxy: JoinedRoomProxyProtocol {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func canUser(userID: String, sendMessage messageType: MessageLikeEventType) async -> Result<Bool, RoomProxyError> {
|
|
||||||
do {
|
|
||||||
return try await .success(room.canUserSendMessage(userId: userID, message: messageType))
|
|
||||||
} catch {
|
|
||||||
MXLog.error("Failed checking if the user can send message with error: \(error)")
|
|
||||||
return .failure(.sdkError(error))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func canUser(userID: String, sendStateEvent event: StateEventType) async -> Result<Bool, RoomProxyError> {
|
|
||||||
do {
|
|
||||||
return try await .success(room.canUserSendState(userId: userID, stateEvent: event))
|
|
||||||
} catch {
|
|
||||||
MXLog.error("Failed checking if the user can send \(event) with error: \(error)")
|
|
||||||
return .failure(.sdkError(error))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func canUserInvite(userID: String) async -> Result<Bool, RoomProxyError> {
|
|
||||||
do {
|
|
||||||
return try await .success(room.canUserInvite(userId: userID))
|
|
||||||
} catch {
|
|
||||||
MXLog.error("Failed checking if the user can invite with error: \(error)")
|
|
||||||
return .failure(.sdkError(error))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func canUserRedactOther(userID: String) async -> Result<Bool, RoomProxyError> {
|
|
||||||
do {
|
|
||||||
return try await .success(room.canUserRedactOther(userId: userID))
|
|
||||||
} catch {
|
|
||||||
MXLog.error("Failed checking if the user can redact others with error: \(error)")
|
|
||||||
return .failure(.sdkError(error))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func canUserRedactOwn(userID: String) async -> Result<Bool, RoomProxyError> {
|
|
||||||
do {
|
|
||||||
return try await .success(room.canUserRedactOwn(userId: userID))
|
|
||||||
} catch {
|
|
||||||
MXLog.error("Failed checking if the user can redact self with error: \(error)")
|
|
||||||
return .failure(.sdkError(error))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func canUserKick(userID: String) async -> Result<Bool, RoomProxyError> {
|
|
||||||
do {
|
|
||||||
return try await .success(room.canUserKick(userId: userID))
|
|
||||||
} catch {
|
|
||||||
MXLog.error("Failed checking if the user can kick with error: \(error)")
|
|
||||||
return .failure(.sdkError(error))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func canUserBan(userID: String) async -> Result<Bool, RoomProxyError> {
|
|
||||||
do {
|
|
||||||
return try await .success(room.canUserBan(userId: userID))
|
|
||||||
} catch {
|
|
||||||
MXLog.error("Failed checking if the user can ban with error: \(error)")
|
|
||||||
return .failure(.sdkError(error))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func canUserTriggerRoomNotification(userID: String) async -> Result<Bool, RoomProxyError> {
|
|
||||||
do {
|
|
||||||
return try await .success(room.canUserTriggerRoomNotification(userId: userID))
|
|
||||||
} catch {
|
|
||||||
MXLog.error("Failed checking if the user can trigger room notification with error: \(error)")
|
|
||||||
return .failure(.sdkError(error))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func canUserPinOrUnpin(userID: String) async -> Result<Bool, RoomProxyError> {
|
|
||||||
do {
|
|
||||||
return try await .success(room.canUserPinUnpin(userId: userID))
|
|
||||||
} catch {
|
|
||||||
MXLog.error("Failed checking if the user can pin or unnpin: \(error)")
|
|
||||||
return .failure(.sdkError(error))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - Moderation
|
// MARK: - Moderation
|
||||||
|
|
||||||
func kickUser(_ userID: String, reason: String?) async -> Result<Void, RoomProxyError> {
|
func kickUser(_ userID: String, reason: String?) async -> Result<Void, RoomProxyError> {
|
||||||
@@ -713,15 +633,6 @@ class JoinedRoomProxy: JoinedRoomProxyProtocol {
|
|||||||
|
|
||||||
// MARK: - Element Call
|
// MARK: - Element Call
|
||||||
|
|
||||||
func canUserJoinCall(userID: String) async -> Result<Bool, RoomProxyError> {
|
|
||||||
do {
|
|
||||||
return try await .success(room.canUserSendState(userId: userID, stateEvent: .callMember))
|
|
||||||
} catch {
|
|
||||||
MXLog.error("Failed checking if the user can trigger room notification with error: \(error)")
|
|
||||||
return .failure(.sdkError(error))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func elementCallWidgetDriver(deviceID: String) -> ElementCallWidgetDriverProtocol {
|
func elementCallWidgetDriver(deviceID: String) -> ElementCallWidgetDriverProtocol {
|
||||||
ElementCallWidgetDriver(room: room, deviceID: deviceID)
|
ElementCallWidgetDriver(room: room, deviceID: deviceID)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ struct RoomPermissions {
|
|||||||
|
|
||||||
extension RoomPermissions {
|
extension RoomPermissions {
|
||||||
/// Create permissions from the room's power levels.
|
/// Create permissions from the room's power levels.
|
||||||
init(powerLevels: RoomPowerLevels) {
|
init(powerLevels: RoomPowerLevelsValues) {
|
||||||
ban = RoomMemberDetails.Role(rustPowerLevel: powerLevels.ban)
|
ban = RoomMemberDetails.Role(rustPowerLevel: powerLevels.ban)
|
||||||
invite = RoomMemberDetails.Role(rustPowerLevel: powerLevels.invite)
|
invite = RoomMemberDetails.Role(rustPowerLevel: powerLevels.invite)
|
||||||
kick = RoomMemberDetails.Role(rustPowerLevel: powerLevels.kick)
|
kick = RoomMemberDetails.Role(rustPowerLevel: powerLevels.kick)
|
||||||
@@ -104,18 +104,3 @@ extension RoomMemberDetails.Role {
|
|||||||
suggestedPowerLevelForRole(role: rustRole)
|
suggestedPowerLevelForRole(role: rustRole)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension RoomPowerLevels {
|
|
||||||
static var mock: RoomPowerLevels {
|
|
||||||
RoomPowerLevels(ban: 50,
|
|
||||||
invite: 0,
|
|
||||||
kick: 50,
|
|
||||||
redact: 50,
|
|
||||||
eventsDefault: 0,
|
|
||||||
stateDefault: 50,
|
|
||||||
usersDefault: 0,
|
|
||||||
roomName: 50,
|
|
||||||
roomAvatar: 50,
|
|
||||||
roomTopic: 50)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
//
|
||||||
|
// 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 MatrixRustSDK
|
||||||
|
|
||||||
|
// sourcery: AutoMockable
|
||||||
|
protocol RoomPowerLevelsProxyProtocol {
|
||||||
|
var values: RoomPowerLevelsValues { get }
|
||||||
|
|
||||||
|
func canUser(userID: String, sendMessage messageType: MessageLikeEventType) -> Result<Bool, RoomProxyError>
|
||||||
|
func canUser(userID: String, sendStateEvent event: StateEventType) -> Result<Bool, RoomProxyError>
|
||||||
|
func canUserInvite(userID: String) -> Result<Bool, RoomProxyError>
|
||||||
|
func canUserRedactOther(userID: String) -> Result<Bool, RoomProxyError>
|
||||||
|
func canUserRedactOwn(userID: String) -> Result<Bool, RoomProxyError>
|
||||||
|
func canUserKick(userID: String) -> Result<Bool, RoomProxyError>
|
||||||
|
func canUserBan(userID: String) -> Result<Bool, RoomProxyError>
|
||||||
|
func canUserTriggerRoomNotification(userID: String) -> Result<Bool, RoomProxyError>
|
||||||
|
func canUserPinOrUnpin(userID: String) -> Result<Bool, RoomProxyError>
|
||||||
|
func canUserJoinCall(userID: String) -> Result<Bool, RoomProxyError>
|
||||||
|
}
|
||||||
@@ -0,0 +1,110 @@
|
|||||||
|
//
|
||||||
|
// 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 MatrixRustSDK
|
||||||
|
|
||||||
|
struct RoomPowerLevelsProxy: RoomPowerLevelsProxyProtocol {
|
||||||
|
private let powerLevels: RoomPowerLevels
|
||||||
|
|
||||||
|
init(_ powerLevels: RoomPowerLevels) {
|
||||||
|
self.powerLevels = powerLevels
|
||||||
|
}
|
||||||
|
|
||||||
|
var values: RoomPowerLevelsValues {
|
||||||
|
powerLevels.values()
|
||||||
|
}
|
||||||
|
|
||||||
|
func canUser(userID: String, sendMessage messageType: MessageLikeEventType) -> Result<Bool, RoomProxyError> {
|
||||||
|
do {
|
||||||
|
return try .success(powerLevels.canUserSendMessage(userId: userID, message: messageType))
|
||||||
|
} catch {
|
||||||
|
MXLog.error("Failed checking if the user can send message with error: \(error)")
|
||||||
|
return .failure(.sdkError(error))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func canUser(userID: String, sendStateEvent event: StateEventType) -> Result<Bool, RoomProxyError> {
|
||||||
|
do {
|
||||||
|
return try .success(powerLevels.canUserSendState(userId: userID, stateEvent: event))
|
||||||
|
} catch {
|
||||||
|
MXLog.error("Failed checking if the user can send \(event) with error: \(error)")
|
||||||
|
return .failure(.sdkError(error))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func canUserInvite(userID: String) -> Result<Bool, RoomProxyError> {
|
||||||
|
do {
|
||||||
|
return try .success(powerLevels.canUserInvite(userId: userID))
|
||||||
|
} catch {
|
||||||
|
MXLog.error("Failed checking if the user can invite with error: \(error)")
|
||||||
|
return .failure(.sdkError(error))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func canUserRedactOther(userID: String) -> Result<Bool, RoomProxyError> {
|
||||||
|
do {
|
||||||
|
return try .success(powerLevels.canUserRedactOther(userId: userID))
|
||||||
|
} catch {
|
||||||
|
MXLog.error("Failed checking if the user can redact others with error: \(error)")
|
||||||
|
return .failure(.sdkError(error))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func canUserRedactOwn(userID: String) -> Result<Bool, RoomProxyError> {
|
||||||
|
do {
|
||||||
|
return try .success(powerLevels.canUserRedactOwn(userId: userID))
|
||||||
|
} catch {
|
||||||
|
MXLog.error("Failed checking if the user can redact self with error: \(error)")
|
||||||
|
return .failure(.sdkError(error))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func canUserKick(userID: String) -> Result<Bool, RoomProxyError> {
|
||||||
|
do {
|
||||||
|
return try .success(powerLevels.canUserKick(userId: userID))
|
||||||
|
} catch {
|
||||||
|
MXLog.error("Failed checking if the user can kick with error: \(error)")
|
||||||
|
return .failure(.sdkError(error))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func canUserBan(userID: String) -> Result<Bool, RoomProxyError> {
|
||||||
|
do {
|
||||||
|
return try .success(powerLevels.canUserBan(userId: userID))
|
||||||
|
} catch {
|
||||||
|
MXLog.error("Failed checking if the user can ban with error: \(error)")
|
||||||
|
return .failure(.sdkError(error))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func canUserTriggerRoomNotification(userID: String) -> Result<Bool, RoomProxyError> {
|
||||||
|
do {
|
||||||
|
return try .success(powerLevels.canUserTriggerRoomNotification(userId: userID))
|
||||||
|
} catch {
|
||||||
|
MXLog.error("Failed checking if the user can trigger room notification with error: \(error)")
|
||||||
|
return .failure(.sdkError(error))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func canUserPinOrUnpin(userID: String) -> Result<Bool, RoomProxyError> {
|
||||||
|
do {
|
||||||
|
return try .success(powerLevels.canUserPinUnpin(userId: userID))
|
||||||
|
} catch {
|
||||||
|
MXLog.error("Failed checking if the user can pin or unnpin: \(error)")
|
||||||
|
return .failure(.sdkError(error))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func canUserJoinCall(userID: String) -> Result<Bool, RoomProxyError> {
|
||||||
|
do {
|
||||||
|
return try .success(powerLevels.canUserSendState(userId: userID, stateEvent: .callMember))
|
||||||
|
} catch {
|
||||||
|
MXLog.error("Failed checking if the user can trigger room notification with error: \(error)")
|
||||||
|
return .failure(.sdkError(error))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -152,20 +152,11 @@ protocol JoinedRoomProxyProtocol: RoomProxyProtocol {
|
|||||||
|
|
||||||
// MARK: - Power Levels
|
// MARK: - Power Levels
|
||||||
|
|
||||||
func powerLevels() async -> Result<RoomPowerLevels, RoomProxyError>
|
func powerLevels() async -> Result<RoomPowerLevelsProxyProtocol, RoomProxyError>
|
||||||
func applyPowerLevelChanges(_ changes: RoomPowerLevelChanges) async -> Result<Void, RoomProxyError>
|
func applyPowerLevelChanges(_ changes: RoomPowerLevelChanges) async -> Result<Void, RoomProxyError>
|
||||||
func resetPowerLevels() async -> Result<RoomPowerLevels, RoomProxyError>
|
func resetPowerLevels() async -> Result<Void, RoomProxyError>
|
||||||
func suggestedRole(for userID: String) async -> Result<RoomMemberRole, RoomProxyError>
|
func suggestedRole(for userID: String) async -> Result<RoomMemberRole, RoomProxyError>
|
||||||
func updatePowerLevelsForUsers(_ updates: [(userID: String, powerLevel: Int64)]) async -> Result<Void, RoomProxyError>
|
func updatePowerLevelsForUsers(_ updates: [(userID: String, powerLevel: Int64)]) async -> Result<Void, RoomProxyError>
|
||||||
func canUser(userID: String, sendMessage messageType: MessageLikeEventType) async -> Result<Bool, RoomProxyError>
|
|
||||||
func canUser(userID: String, sendStateEvent event: StateEventType) async -> Result<Bool, RoomProxyError>
|
|
||||||
func canUserInvite(userID: String) async -> Result<Bool, RoomProxyError>
|
|
||||||
func canUserRedactOther(userID: String) async -> Result<Bool, RoomProxyError>
|
|
||||||
func canUserRedactOwn(userID: String) async -> Result<Bool, RoomProxyError>
|
|
||||||
func canUserKick(userID: String) async -> Result<Bool, RoomProxyError>
|
|
||||||
func canUserBan(userID: String) async -> Result<Bool, RoomProxyError>
|
|
||||||
func canUserTriggerRoomNotification(userID: String) async -> Result<Bool, RoomProxyError>
|
|
||||||
func canUserPinOrUnpin(userID: String) async -> Result<Bool, RoomProxyError>
|
|
||||||
|
|
||||||
// MARK: - Moderation
|
// MARK: - Moderation
|
||||||
|
|
||||||
@@ -175,9 +166,7 @@ protocol JoinedRoomProxyProtocol: RoomProxyProtocol {
|
|||||||
|
|
||||||
// MARK: - Element Call
|
// MARK: - Element Call
|
||||||
|
|
||||||
func canUserJoinCall(userID: String) async -> Result<Bool, RoomProxyError>
|
|
||||||
func elementCallWidgetDriver(deviceID: String) -> ElementCallWidgetDriverProtocol
|
func elementCallWidgetDriver(deviceID: String) -> ElementCallWidgetDriverProtocol
|
||||||
|
|
||||||
func sendCallNotificationIfNeeded() async -> Result<Void, RoomProxyError>
|
func sendCallNotificationIfNeeded() async -> Result<Void, RoomProxyError>
|
||||||
|
|
||||||
// MARK: - Permalinks
|
// MARK: - Permalinks
|
||||||
|
|||||||
@@ -356,7 +356,11 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
func testCanEditAvatar() async {
|
func testCanEditAvatar() async {
|
||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockBob, .mockAlice]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockBob, .mockAlice]
|
||||||
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: false, isPublic: false, members: mockedMembers))
|
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: false, isPublic: false, members: mockedMembers))
|
||||||
roomProxyMock.canUserUserIDSendStateEventClosure = { _, event in
|
|
||||||
|
let powerLevelsMock = RoomPowerLevelsProxyMock(configuration: .init())
|
||||||
|
roomProxyMock.powerLevelsReturnValue = .success(powerLevelsMock)
|
||||||
|
|
||||||
|
powerLevelsMock.canUserUserIDSendStateEventClosure = { _, event in
|
||||||
.success(event == .roomAvatar)
|
.success(event == .roomAvatar)
|
||||||
}
|
}
|
||||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||||
@@ -380,7 +384,11 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
func testCanEditName() async {
|
func testCanEditName() async {
|
||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockBob, .mockAlice]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockBob, .mockAlice]
|
||||||
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: false, isPublic: false, members: mockedMembers))
|
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: false, isPublic: false, members: mockedMembers))
|
||||||
roomProxyMock.canUserUserIDSendStateEventClosure = { _, event in
|
|
||||||
|
let powerLevelsMock = RoomPowerLevelsProxyMock(configuration: .init())
|
||||||
|
roomProxyMock.powerLevelsReturnValue = .success(powerLevelsMock)
|
||||||
|
|
||||||
|
powerLevelsMock.canUserUserIDSendStateEventClosure = { _, event in
|
||||||
.success(event == .roomName)
|
.success(event == .roomName)
|
||||||
}
|
}
|
||||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||||
@@ -404,7 +412,11 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
|
|||||||
func testCanEditTopic() async {
|
func testCanEditTopic() async {
|
||||||
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockBob, .mockAlice]
|
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockBob, .mockAlice]
|
||||||
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: false, isPublic: false, members: mockedMembers))
|
roomProxyMock = JoinedRoomProxyMock(.init(name: "Test", isDirect: false, isPublic: false, members: mockedMembers))
|
||||||
roomProxyMock.canUserUserIDSendStateEventClosure = { _, event in
|
|
||||||
|
let powerLevelsMock = RoomPowerLevelsProxyMock(configuration: .init())
|
||||||
|
roomProxyMock.powerLevelsReturnValue = .success(powerLevelsMock)
|
||||||
|
|
||||||
|
powerLevelsMock.canUserUserIDSendStateEventClosure = { _, event in
|
||||||
.success(event == .roomTopic)
|
.success(event == .roomTopic)
|
||||||
}
|
}
|
||||||
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock,
|
||||||
|
|||||||
@@ -13,16 +13,16 @@ import XCTest
|
|||||||
class RoomPermissionsTests: XCTestCase {
|
class RoomPermissionsTests: XCTestCase {
|
||||||
func testFromRust() {
|
func testFromRust() {
|
||||||
// Given a set of power level changes with various values.
|
// Given a set of power level changes with various values.
|
||||||
let powerLevels = RoomPowerLevels(ban: 100,
|
let powerLevels = RoomPowerLevelsValues(ban: 100,
|
||||||
invite: 100,
|
invite: 100,
|
||||||
kick: 100,
|
kick: 100,
|
||||||
redact: 50,
|
redact: 50,
|
||||||
eventsDefault: 50,
|
eventsDefault: 50,
|
||||||
stateDefault: 50,
|
stateDefault: 50,
|
||||||
usersDefault: 0,
|
usersDefault: 0,
|
||||||
roomName: 0,
|
roomName: 0,
|
||||||
roomAvatar: 0,
|
roomAvatar: 0,
|
||||||
roomTopic: 0)
|
roomTopic: 0)
|
||||||
|
|
||||||
// When creating room permissions from them.
|
// When creating room permissions from them.
|
||||||
let permissions = RoomPermissions(powerLevels: powerLevels)
|
let permissions = RoomPermissions(powerLevels: powerLevels)
|
||||||
|
|||||||
@@ -167,8 +167,12 @@ class RoomScreenViewModelTests: XCTestCase {
|
|||||||
var configuration = JoinedRoomProxyMockConfiguration(id: "TestID", name: "StartingName", avatarURL: nil, hasOngoingCall: false)
|
var configuration = JoinedRoomProxyMockConfiguration(id: "TestID", name: "StartingName", avatarURL: nil, hasOngoingCall: false)
|
||||||
let infoSubject = CurrentValueSubject<RoomInfoProxy, Never>(.init(roomInfo: RoomInfo(configuration)))
|
let infoSubject = CurrentValueSubject<RoomInfoProxy, Never>(.init(roomInfo: RoomInfo(configuration)))
|
||||||
let roomProxyMock = JoinedRoomProxyMock(configuration)
|
let roomProxyMock = JoinedRoomProxyMock(configuration)
|
||||||
|
|
||||||
|
let powerLevelsMock = RoomPowerLevelsProxyMock(configuration: .init())
|
||||||
|
roomProxyMock.powerLevelsReturnValue = .success(powerLevelsMock)
|
||||||
|
|
||||||
// setup the room proxy actions publisher
|
// setup the room proxy actions publisher
|
||||||
roomProxyMock.canUserJoinCallUserIDReturnValue = .success(false)
|
powerLevelsMock.canUserJoinCallUserIDReturnValue = .success(false)
|
||||||
roomProxyMock.underlyingInfoPublisher = infoSubject.asCurrentValuePublisher()
|
roomProxyMock.underlyingInfoPublisher = infoSubject.asCurrentValuePublisher()
|
||||||
let viewModel = RoomScreenViewModel(clientProxy: ClientProxyMock(),
|
let viewModel = RoomScreenViewModel(clientProxy: ClientProxyMock(),
|
||||||
roomProxy: roomProxyMock,
|
roomProxy: roomProxyMock,
|
||||||
@@ -193,7 +197,7 @@ class RoomScreenViewModelTests: XCTestCase {
|
|||||||
configuration.name = "NewName"
|
configuration.name = "NewName"
|
||||||
configuration.avatarURL = .mockMXCAvatar
|
configuration.avatarURL = .mockMXCAvatar
|
||||||
configuration.hasOngoingCall = true
|
configuration.hasOngoingCall = true
|
||||||
roomProxyMock.canUserJoinCallUserIDReturnValue = .success(true)
|
powerLevelsMock.canUserJoinCallUserIDReturnValue = .success(true)
|
||||||
|
|
||||||
deferred = deferFulfillment(viewModel.context.$viewState) { viewState in
|
deferred = deferFulfillment(viewModel.context.$viewState) { viewState in
|
||||||
viewState.roomTitle == "NewName" &&
|
viewState.roomTitle == "NewName" &&
|
||||||
|
|||||||
@@ -517,7 +517,10 @@ class TimelineViewModelTests: XCTestCase {
|
|||||||
}
|
}
|
||||||
try await deferred.fulfill()
|
try await deferred.fulfill()
|
||||||
|
|
||||||
roomProxyMock.canUserPinOrUnpinUserIDReturnValue = .success(false)
|
let powerLevelsMock = RoomPowerLevelsProxyMock(configuration: .init())
|
||||||
|
powerLevelsMock.canUserPinOrUnpinUserIDReturnValue = .success(false)
|
||||||
|
roomProxyMock.powerLevelsReturnValue = .success(powerLevelsMock)
|
||||||
|
|
||||||
deferred = deferFulfillment(viewModel.context.$viewState) { value in
|
deferred = deferFulfillment(viewModel.context.$viewState) { value in
|
||||||
!value.canCurrentUserPin
|
!value.canCurrentUserPin
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -65,7 +65,7 @@ packages:
|
|||||||
# Element/Matrix dependencies
|
# Element/Matrix dependencies
|
||||||
MatrixRustSDK:
|
MatrixRustSDK:
|
||||||
url: https://github.com/element-hq/matrix-rust-components-swift
|
url: https://github.com/element-hq/matrix-rust-components-swift
|
||||||
exactVersion: 25.06.18
|
exactVersion: 25.06.20
|
||||||
# path: ../matrix-rust-sdk
|
# path: ../matrix-rust-sdk
|
||||||
Compound:
|
Compound:
|
||||||
url: https://github.com/element-hq/compound-ios
|
url: https://github.com/element-hq/compound-ios
|
||||||
|
|||||||
Reference in New Issue
Block a user