Rename Provider Items to Item Proxies. (#205)

This commit is contained in:
Doug 2022-09-22 11:18:18 +01:00 committed by GitHub
parent a807301746
commit b9f8fb0b6f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 88 additions and 84 deletions

View File

@ -3,7 +3,7 @@
archiveVersion = 1; archiveVersion = 1;
classes = { classes = {
}; };
objectVersion = 52; objectVersion = 51;
objects = { objects = {
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
@ -110,6 +110,7 @@
41DFDD212D1BE57CA50D783B /* SwiftyBeaver in Frameworks */ = {isa = PBXBuildFile; productRef = FD43A50D9B75C9D6D30F006B /* SwiftyBeaver */; }; 41DFDD212D1BE57CA50D783B /* SwiftyBeaver in Frameworks */ = {isa = PBXBuildFile; productRef = FD43A50D9B75C9D6D30F006B /* SwiftyBeaver */; };
438FB9BC535BC95948AA5F34 /* SettingsViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B2F9D5C39A4494D19F33E38 /* SettingsViewModelProtocol.swift */; }; 438FB9BC535BC95948AA5F34 /* SettingsViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B2F9D5C39A4494D19F33E38 /* SettingsViewModelProtocol.swift */; };
43FD77998F33C32718C51450 /* TemplateCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBD460ED7ED1E03B85DEA25C /* TemplateCoordinator.swift */; }; 43FD77998F33C32718C51450 /* TemplateCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBD460ED7ED1E03B85DEA25C /* TemplateCoordinator.swift */; };
440123E29E2F9B001A775BBE /* TimelineItemProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D505843AB66822EB91F0DF0 /* TimelineItemProxy.swift */; };
447E8580A0A2569E32529E17 /* MockRoomTimelineProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D6094DEAAEB388E1AE118C6 /* MockRoomTimelineProvider.swift */; }; 447E8580A0A2569E32529E17 /* MockRoomTimelineProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D6094DEAAEB388E1AE118C6 /* MockRoomTimelineProvider.swift */; };
462813B93C39DF93B1249403 /* RoundedToastView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFABDF2E19D349DAAAC18C65 /* RoundedToastView.swift */; }; 462813B93C39DF93B1249403 /* RoundedToastView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFABDF2E19D349DAAAC18C65 /* RoundedToastView.swift */; };
46562110EE202E580A5FFD9C /* RoomScreenViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93CF7B19FFCF8EFBE0A8696A /* RoomScreenViewModelTests.swift */; }; 46562110EE202E580A5FFD9C /* RoomScreenViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93CF7B19FFCF8EFBE0A8696A /* RoomScreenViewModelTests.swift */; };
@ -137,7 +138,6 @@
54C774874BED4A8FAD1F22FE /* AnalyticsConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77B3D4950F1707E66E4A45A /* AnalyticsConfiguration.swift */; }; 54C774874BED4A8FAD1F22FE /* AnalyticsConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D77B3D4950F1707E66E4A45A /* AnalyticsConfiguration.swift */; };
563A05B43207D00A6B698211 /* OIDCService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9010EE0CC913D095887EF36E /* OIDCService.swift */; }; 563A05B43207D00A6B698211 /* OIDCService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9010EE0CC913D095887EF36E /* OIDCService.swift */; };
56F0A22972A3BB519DA2261C /* HomeScreenViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24F5530B2212862FA4BEFF2D /* HomeScreenViewModelProtocol.swift */; }; 56F0A22972A3BB519DA2261C /* HomeScreenViewModelProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24F5530B2212862FA4BEFF2D /* HomeScreenViewModelProtocol.swift */; };
5706B6600CCCFE254F7D2495 /* Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA2CA6D7090404B1074E887F /* Task.swift */; };
59C41313AED7566C3AC51163 /* RoomSummary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29A953B6C0C431DBF4DD00B4 /* RoomSummary.swift */; }; 59C41313AED7566C3AC51163 /* RoomSummary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29A953B6C0C431DBF4DD00B4 /* RoomSummary.swift */; };
5B2C4C17888FC095ED6880B2 /* SplashViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 48971F1FFD7FC5C466889FC7 /* SplashViewController.xib */; }; 5B2C4C17888FC095ED6880B2 /* SplashViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 48971F1FFD7FC5C466889FC7 /* SplashViewController.xib */; };
5C8AFBF168A41E20835F3B86 /* LoginScreenUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DB34B0C74CD242FED9DD069 /* LoginScreenUITests.swift */; }; 5C8AFBF168A41E20835F3B86 /* LoginScreenUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DB34B0C74CD242FED9DD069 /* LoginScreenUITests.swift */; };
@ -245,7 +245,6 @@
9E8AE387FD03E4F1C1B8815A /* SessionVerificationStateMachine.swift in Sources */ = {isa = PBXBuildFile; fileRef = C06FCD42EEFEFC220F14EAC5 /* SessionVerificationStateMachine.swift */; }; 9E8AE387FD03E4F1C1B8815A /* SessionVerificationStateMachine.swift in Sources */ = {isa = PBXBuildFile; fileRef = C06FCD42EEFEFC220F14EAC5 /* SessionVerificationStateMachine.swift */; };
A00DFC1DD3567B1EDC9F8D16 /* SplashScreenUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 325A2B3278875554DDEB8A9B /* SplashScreenUITests.swift */; }; A00DFC1DD3567B1EDC9F8D16 /* SplashScreenUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 325A2B3278875554DDEB8A9B /* SplashScreenUITests.swift */; };
A0A0D2A9564BDA3FDE2E360F /* FormattedBodyText.swift in Sources */ = {isa = PBXBuildFile; fileRef = F73FF1A33198F5FAE9D34B1F /* FormattedBodyText.swift */; }; A0A0D2A9564BDA3FDE2E360F /* FormattedBodyText.swift in Sources */ = {isa = PBXBuildFile; fileRef = F73FF1A33198F5FAE9D34B1F /* FormattedBodyText.swift */; };
A0A26E4F713596856470EF1A /* RoomTimelineProviderItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9ABAECB0CA5FF8F8E6F10DD7 /* RoomTimelineProviderItem.swift */; };
A32517FB1CA0BBCE2BC75249 /* BugReportCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD6C07DA7D3FF193F7419F55 /* BugReportCoordinator.swift */; }; A32517FB1CA0BBCE2BC75249 /* BugReportCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD6C07DA7D3FF193F7419F55 /* BugReportCoordinator.swift */; };
A371629728E597C5FCA3C2B2 /* Analytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73FC861755C6388F62B9280A /* Analytics.swift */; }; A371629728E597C5FCA3C2B2 /* Analytics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73FC861755C6388F62B9280A /* Analytics.swift */; };
A37EED79941AD3B7140B3822 /* UIDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 287FC98AF2664EAD79C0D902 /* UIDevice.swift */; }; A37EED79941AD3B7140B3822 /* UIDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 287FC98AF2664EAD79C0D902 /* UIDevice.swift */; };
@ -322,6 +321,7 @@
E01373F2043E76393A0CE073 /* AnalyticsPromptViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A11B74ACE8D71747E1044A9C /* AnalyticsPromptViewModel.swift */; }; E01373F2043E76393A0CE073 /* AnalyticsPromptViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A11B74ACE8D71747E1044A9C /* AnalyticsPromptViewModel.swift */; };
E0A4DCA633D174EB43AD599F /* BackgroundTaskProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CA028DCD4157F9A1F999827 /* BackgroundTaskProtocol.swift */; }; E0A4DCA633D174EB43AD599F /* BackgroundTaskProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CA028DCD4157F9A1F999827 /* BackgroundTaskProtocol.swift */; };
E1DF24D085572A55C9758A2D /* Bundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6E89E530A8E92EC44301CA1 /* Bundle.swift */; }; E1DF24D085572A55C9758A2D /* Bundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6E89E530A8E92EC44301CA1 /* Bundle.swift */; };
E290C78E7F09F47FD2662986 /* Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = A40C19719687984FD9478FBE /* Task.swift */; };
E3CA565A4B9704F191B191F0 /* JoinedRoomSize+MemberCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBF9AEA706926DD0DA2B954C /* JoinedRoomSize+MemberCount.swift */; }; E3CA565A4B9704F191B191F0 /* JoinedRoomSize+MemberCount.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBF9AEA706926DD0DA2B954C /* JoinedRoomSize+MemberCount.swift */; };
E47CD939D8480657D4B706C6 /* AnalyticsPromptCheckmarkItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA7B2E9CC5DC3B76ADC35A43 /* AnalyticsPromptCheckmarkItem.swift */; }; E47CD939D8480657D4B706C6 /* AnalyticsPromptCheckmarkItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA7B2E9CC5DC3B76ADC35A43 /* AnalyticsPromptCheckmarkItem.swift */; };
E481C8FDCB6C089963C95344 /* DTCoreText in Frameworks */ = {isa = PBXBuildFile; productRef = 527578916BD388A09F5A8036 /* DTCoreText */; }; E481C8FDCB6C089963C95344 /* DTCoreText in Frameworks */ = {isa = PBXBuildFile; productRef = 527578916BD388A09F5A8036 /* DTCoreText */; };
@ -459,6 +459,7 @@
2CCBDE671A613B3EB70794C4 /* SoftLogoutScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoftLogoutScreen.swift; sourceTree = "<group>"; }; 2CCBDE671A613B3EB70794C4 /* SoftLogoutScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoftLogoutScreen.swift; sourceTree = "<group>"; };
2CF9FE7E0CF9F40D1509E63A /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = bg; path = bg.lproj/Localizable.stringsdict; sourceTree = "<group>"; }; 2CF9FE7E0CF9F40D1509E63A /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = bg; path = bg.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
2D256FEE2F1AF1E51D39B622 /* LoginTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginTests.swift; sourceTree = "<group>"; }; 2D256FEE2F1AF1E51D39B622 /* LoginTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginTests.swift; sourceTree = "<group>"; };
2D505843AB66822EB91F0DF0 /* TimelineItemProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineItemProxy.swift; sourceTree = "<group>"; };
2EEB64CC6F3DF5B68736A6B4 /* AlertInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertInfo.swift; sourceTree = "<group>"; }; 2EEB64CC6F3DF5B68736A6B4 /* AlertInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertInfo.swift; sourceTree = "<group>"; };
2F1B28C596DE541DA0AFD16C /* lo */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = lo; path = lo.lproj/Localizable.stringsdict; sourceTree = "<group>"; }; 2F1B28C596DE541DA0AFD16C /* lo */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = lo; path = lo.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
31B01468022EC826CB2FD2C0 /* LoginModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginModels.swift; sourceTree = "<group>"; }; 31B01468022EC826CB2FD2C0 /* LoginModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginModels.swift; sourceTree = "<group>"; };
@ -628,7 +629,7 @@
8D6094DEAAEB388E1AE118C6 /* MockRoomTimelineProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockRoomTimelineProvider.swift; sourceTree = "<group>"; }; 8D6094DEAAEB388E1AE118C6 /* MockRoomTimelineProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockRoomTimelineProvider.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>"; };
8DC2C9E0E15C79BBDA80F0A2 /* TimelineStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineStyle.swift; sourceTree = "<group>"; }; 8DC2C9E0E15C79BBDA80F0A2 /* TimelineStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineStyle.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>"; };
8F7D42E66E939B709C1EC390 /* MockRoomSummaryProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockRoomSummaryProvider.swift; sourceTree = "<group>"; }; 8F7D42E66E939B709C1EC390 /* MockRoomSummaryProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockRoomSummaryProvider.swift; sourceTree = "<group>"; };
9010EE0CC913D095887EF36E /* OIDCService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OIDCService.swift; sourceTree = "<group>"; }; 9010EE0CC913D095887EF36E /* OIDCService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OIDCService.swift; sourceTree = "<group>"; };
90733775209F4D4D366A268F /* RootRouterType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootRouterType.swift; sourceTree = "<group>"; }; 90733775209F4D4D366A268F /* RootRouterType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootRouterType.swift; sourceTree = "<group>"; };
@ -651,7 +652,6 @@
997783054A2E95F9E624217E /* kaa */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = kaa; path = kaa.lproj/Localizable.strings; sourceTree = "<group>"; }; 997783054A2E95F9E624217E /* kaa */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = kaa; path = kaa.lproj/Localizable.strings; sourceTree = "<group>"; };
99DE232F24EAD72A3DF7EF1A /* kab */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = kab; path = kab.lproj/Localizable.stringsdict; sourceTree = "<group>"; }; 99DE232F24EAD72A3DF7EF1A /* kab */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = kab; path = kab.lproj/Localizable.stringsdict; sourceTree = "<group>"; };
9A68BCE6438873D2661D93D0 /* BugReportServiceProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BugReportServiceProtocol.swift; sourceTree = "<group>"; }; 9A68BCE6438873D2661D93D0 /* BugReportServiceProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BugReportServiceProtocol.swift; sourceTree = "<group>"; };
9ABAECB0CA5FF8F8E6F10DD7 /* RoomTimelineProviderItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomTimelineProviderItem.swift; sourceTree = "<group>"; };
9B577F829C693B8DFB7014FD /* RedactedRoomTimelineItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RedactedRoomTimelineItem.swift; sourceTree = "<group>"; }; 9B577F829C693B8DFB7014FD /* RedactedRoomTimelineItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RedactedRoomTimelineItem.swift; sourceTree = "<group>"; };
9C4048041C1A6B20CB97FD18 /* TestMeasurementParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestMeasurementParser.swift; sourceTree = "<group>"; }; 9C4048041C1A6B20CB97FD18 /* TestMeasurementParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestMeasurementParser.swift; sourceTree = "<group>"; };
9C5E81214D27A6B898FC397D /* ElementX.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = ElementX.entitlements; sourceTree = "<group>"; }; 9C5E81214D27A6B898FC397D /* ElementX.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = ElementX.entitlements; sourceTree = "<group>"; };
@ -667,6 +667,7 @@
A1ED7E89865201EE7D53E6DA /* SeparatorRoomTimelineItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeparatorRoomTimelineItem.swift; sourceTree = "<group>"; }; A1ED7E89865201EE7D53E6DA /* SeparatorRoomTimelineItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeparatorRoomTimelineItem.swift; sourceTree = "<group>"; };
A2B6433F516F1E6DFA0E2D89 /* vls */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vls; path = vls.lproj/Localizable.strings; sourceTree = "<group>"; }; A2B6433F516F1E6DFA0E2D89 /* vls */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vls; path = vls.lproj/Localizable.strings; sourceTree = "<group>"; };
A30A1758E2B73EF38E7C42F8 /* ServerSelectionModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerSelectionModels.swift; sourceTree = "<group>"; }; A30A1758E2B73EF38E7C42F8 /* ServerSelectionModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerSelectionModels.swift; sourceTree = "<group>"; };
A40C19719687984FD9478FBE /* Task.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Task.swift; sourceTree = "<group>"; };
A436057DBEA1A23CA8CB1FD7 /* UIFont+AttributedStringBuilder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIFont+AttributedStringBuilder.h"; sourceTree = "<group>"; }; A436057DBEA1A23CA8CB1FD7 /* UIFont+AttributedStringBuilder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIFont+AttributedStringBuilder.h"; sourceTree = "<group>"; };
A443FAE2EE820A5790C35C8D /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = et; path = et.lproj/Localizable.strings; sourceTree = "<group>"; }; A443FAE2EE820A5790C35C8D /* et */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = et; path = et.lproj/Localizable.strings; sourceTree = "<group>"; };
A4756C5A8C8649AD6C10C615 /* MockUserSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockUserSession.swift; sourceTree = "<group>"; }; A4756C5A8C8649AD6C10C615 /* MockUserSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockUserSession.swift; sourceTree = "<group>"; };
@ -820,7 +821,6 @@
F77C060C2ACC4CB7336A29E7 /* EmoteRoomTimelineItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmoteRoomTimelineItem.swift; sourceTree = "<group>"; }; F77C060C2ACC4CB7336A29E7 /* EmoteRoomTimelineItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmoteRoomTimelineItem.swift; sourceTree = "<group>"; };
F9E785D5137510481733A3E8 /* TextRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextRoomTimelineView.swift; sourceTree = "<group>"; }; F9E785D5137510481733A3E8 /* TextRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextRoomTimelineView.swift; sourceTree = "<group>"; };
FA154570F693D93513E584C1 /* RoomMessageFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMessageFactory.swift; sourceTree = "<group>"; }; FA154570F693D93513E584C1 /* RoomMessageFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomMessageFactory.swift; sourceTree = "<group>"; };
FA2CA6D7090404B1074E887F /* Task.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Task.swift; sourceTree = "<group>"; };
FAB10E673916D2B8D21FD197 /* TemplateModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TemplateModels.swift; sourceTree = "<group>"; }; FAB10E673916D2B8D21FD197 /* TemplateModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TemplateModels.swift; sourceTree = "<group>"; };
FDB9C37196A4C79F24CE80C6 /* KeychainControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainControllerTests.swift; sourceTree = "<group>"; }; FDB9C37196A4C79F24CE80C6 /* KeychainControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainControllerTests.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
@ -1092,9 +1092,9 @@
children = ( children = (
B6E89E530A8E92EC44301CA1 /* Bundle.swift */, B6E89E530A8E92EC44301CA1 /* Bundle.swift */,
A9FAFE1C2149E6AC8156ED2B /* Collection.swift */, A9FAFE1C2149E6AC8156ED2B /* Collection.swift */,
FA2CA6D7090404B1074E887F /* Task.swift */,
E26747B3154A5DBC3A7E24A5 /* Image.swift */, E26747B3154A5DBC3A7E24A5 /* Image.swift */,
40B21E611DADDEF00307E7AC /* String.swift */, 40B21E611DADDEF00307E7AC /* String.swift */,
A40C19719687984FD9478FBE /* Task.swift */,
287FC98AF2664EAD79C0D902 /* UIDevice.swift */, 287FC98AF2664EAD79C0D902 /* UIDevice.swift */,
227AC5D71A4CE43512062243 /* URL.swift */, 227AC5D71A4CE43512062243 /* URL.swift */,
); );
@ -1862,8 +1862,8 @@
24B0C97D2F560BCB72BE73B1 /* RoomTimelineController.swift */, 24B0C97D2F560BCB72BE73B1 /* RoomTimelineController.swift */,
CC7CCC6DE5FA623E31BA8546 /* RoomTimelineControllerProtocol.swift */, CC7CCC6DE5FA623E31BA8546 /* RoomTimelineControllerProtocol.swift */,
66F2402D738694F98729A441 /* RoomTimelineProvider.swift */, 66F2402D738694F98729A441 /* RoomTimelineProvider.swift */,
9ABAECB0CA5FF8F8E6F10DD7 /* RoomTimelineProviderItem.swift */,
095AED4CF56DFF3EB7BB84C8 /* RoomTimelineProviderProtocol.swift */, 095AED4CF56DFF3EB7BB84C8 /* RoomTimelineProviderProtocol.swift */,
2D505843AB66822EB91F0DF0 /* TimelineItemProxy.swift */,
5A7A7D6D373D411C8C48B881 /* TimeLineItemContent */, 5A7A7D6D373D411C8C48B881 /* TimeLineItemContent */,
95BE1C7CB2C80344FF0BE724 /* TimelineItems */, 95BE1C7CB2C80344FF0BE724 /* TimelineItems */,
); );
@ -2347,7 +2347,6 @@
DCB781BD227CA958809AFADF /* Coordinator.swift in Sources */, DCB781BD227CA958809AFADF /* Coordinator.swift in Sources */,
C4F69156C31A447FEFF2A47C /* DTHTMLElement+AttributedStringBuilder.swift in Sources */, C4F69156C31A447FEFF2A47C /* DTHTMLElement+AttributedStringBuilder.swift in Sources */,
EE8491AD81F47DF3C192497B /* DecorationTimelineItemProtocol.swift in Sources */, EE8491AD81F47DF3C192497B /* DecorationTimelineItemProtocol.swift in Sources */,
5706B6600CCCFE254F7D2495 /* Task.swift in Sources */,
FE4593FC2A02AAF92E089565 /* ElementAnimations.swift in Sources */, FE4593FC2A02AAF92E089565 /* ElementAnimations.swift in Sources */,
06E93B2E3B32740B40F47CC5 /* ElementNavigationController.swift in Sources */, 06E93B2E3B32740B40F47CC5 /* ElementNavigationController.swift in Sources */,
9738F894DB1BD383BE05767A /* ElementSettings.swift in Sources */, 9738F894DB1BD383BE05767A /* ElementSettings.swift in Sources */,
@ -2444,7 +2443,6 @@
C8E82786DE1B6A400DA9BA25 /* RoomTimelineItemProperties.swift in Sources */, C8E82786DE1B6A400DA9BA25 /* RoomTimelineItemProperties.swift in Sources */,
1AE4AEA0FA8DEF52671832E0 /* RoomTimelineItemProtocol.swift in Sources */, 1AE4AEA0FA8DEF52671832E0 /* RoomTimelineItemProtocol.swift in Sources */,
9BD3A773186291560DF92B62 /* RoomTimelineProvider.swift in Sources */, 9BD3A773186291560DF92B62 /* RoomTimelineProvider.swift in Sources */,
A0A26E4F713596856470EF1A /* RoomTimelineProviderItem.swift in Sources */,
77D7DAA41AAB36800C1F2E2D /* RoomTimelineProviderProtocol.swift in Sources */, 77D7DAA41AAB36800C1F2E2D /* RoomTimelineProviderProtocol.swift in Sources */,
5D430CDE11EAC3E8E6B80A66 /* RoomTimelineViewFactory.swift in Sources */, 5D430CDE11EAC3E8E6B80A66 /* RoomTimelineViewFactory.swift in Sources */,
297CD0A27C87B0C50FF192EE /* RoomTimelineViewFactoryProtocol.swift in Sources */, 297CD0A27C87B0C50FF192EE /* RoomTimelineViewFactoryProtocol.swift in Sources */,
@ -2491,6 +2489,7 @@
2F94054F50E312AF30BE07F3 /* String.swift in Sources */, 2F94054F50E312AF30BE07F3 /* String.swift in Sources */,
A7D48E44D485B143AADDB77D /* Strings+Untranslated.swift in Sources */, A7D48E44D485B143AADDB77D /* Strings+Untranslated.swift in Sources */,
066A1E9B94723EE9F3038044 /* Strings.swift in Sources */, 066A1E9B94723EE9F3038044 /* Strings.swift in Sources */,
E290C78E7F09F47FD2662986 /* Task.swift in Sources */,
43FD77998F33C32718C51450 /* TemplateCoordinator.swift in Sources */, 43FD77998F33C32718C51450 /* TemplateCoordinator.swift in Sources */,
63C9AF0FB8278AF1C0388A0C /* TemplateModels.swift in Sources */, 63C9AF0FB8278AF1C0388A0C /* TemplateModels.swift in Sources */,
1555A7643D85187D4851040C /* TemplateScreen.swift in Sources */, 1555A7643D85187D4851040C /* TemplateScreen.swift in Sources */,
@ -2503,6 +2502,7 @@
01CB8ACFA5E143E89C168CA8 /* TimelineItemContextMenu.swift in Sources */, 01CB8ACFA5E143E89C168CA8 /* TimelineItemContextMenu.swift in Sources */,
4D970CB606276717B43E2332 /* TimelineItemList.swift in Sources */, 4D970CB606276717B43E2332 /* TimelineItemList.swift in Sources */,
F508683B76EF7B23BB2CBD6D /* TimelineItemPlainStylerView.swift in Sources */, F508683B76EF7B23BB2CBD6D /* TimelineItemPlainStylerView.swift in Sources */,
440123E29E2F9B001A775BBE /* TimelineItemProxy.swift in Sources */,
9B582B3EEFEA615D4A6FBF1A /* TimelineReactionsView.swift in Sources */, 9B582B3EEFEA615D4A6FBF1A /* TimelineReactionsView.swift in Sources */,
ABF3FAB234AD3565B214309B /* TimelineSenderAvatarView.swift in Sources */, ABF3FAB234AD3565B214309B /* TimelineSenderAvatarView.swift in Sources */,
69BCBB4FB2DC3D61A28D3FD8 /* TimelineStyle.swift in Sources */, 69BCBB4FB2DC3D61A28D3FD8 /* TimelineStyle.swift in Sources */,

View File

@ -25,7 +25,10 @@ struct SomeRoomMessage: RoomMessageProtocol {
} }
struct RoomMessageFactory: RoomMessageFactoryProtocol { struct RoomMessageFactory: RoomMessageFactoryProtocol {
func buildRoomMessageFrom(_ eventItem: EventTimelineItem) -> RoomMessageProtocol { func buildRoomMessageFrom(_ eventItemProxy: EventTimelineItemProxy) -> RoomMessageProtocol {
SomeRoomMessage(id: eventItem.id, body: eventItem.body ?? "", sender: eventItem.sender, originServerTs: eventItem.originServerTs) SomeRoomMessage(id: eventItemProxy.id,
body: eventItemProxy.body ?? "",
sender: eventItemProxy.sender,
originServerTs: eventItemProxy.originServerTs)
} }
} }

View File

@ -18,5 +18,5 @@ import Foundation
import MatrixRustSDK import MatrixRustSDK
protocol RoomMessageFactoryProtocol { protocol RoomMessageFactoryProtocol {
func buildRoomMessageFrom(_ message: EventTimelineItem) -> RoomMessageProtocol func buildRoomMessageFrom(_ eventItemProxy: EventTimelineItemProxy) -> RoomMessageProtocol
} }

View File

@ -163,7 +163,7 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol {
var attributedLastMessage: AttributedString? var attributedLastMessage: AttributedString?
var lastMessageTimestamp: Date? var lastMessageTimestamp: Date?
if let latestRoomMessage = room.latestRoomMessage() { if let latestRoomMessage = room.latestRoomMessage() {
let lastMessage = roomMessageFactory.buildRoomMessageFrom(EventTimelineItem(item: latestRoomMessage)) let lastMessage = roomMessageFactory.buildRoomMessageFrom(EventTimelineItemProxy(item: latestRoomMessage))
if let lastMessageSender = try? AttributedString(markdown: "**\(lastMessage.sender)**") { if let lastMessageSender = try? AttributedString(markdown: "**\(lastMessage.sender)**") {
// Don't include the message body in the markdown otherwise it makes tappable links. // Don't include the message body in the markdown otherwise it makes tappable links.
attributedLastMessage = lastMessageSender + ": " + AttributedString(lastMessage.body) attributedLastMessage = lastMessageSender + ": " + AttributedString(lastMessage.body)

View File

@ -18,7 +18,7 @@ import Combine
struct MockRoomTimelineProvider: RoomTimelineProviderProtocol { struct MockRoomTimelineProvider: RoomTimelineProviderProtocol {
var callbacks = PassthroughSubject<RoomTimelineProviderCallback, Never>() var callbacks = PassthroughSubject<RoomTimelineProviderCallback, Never>()
var items = [RoomTimelineProviderItem]() var itemProxies = [TimelineItemProxy]()
func paginateBackwards(_ count: UInt) async -> Result<Void, RoomTimelineProviderError> { func paginateBackwards(_ count: UInt) async -> Result<Void, RoomTimelineProviderError> {
.failure(.failedPaginatingBackwards) .failure(.failedPaginatingBackwards)

View File

@ -134,21 +134,21 @@ class RoomTimelineController: RoomTimelineControllerProtocol {
private func asyncUpdateTimelineItems() async { private func asyncUpdateTimelineItems() async {
var newTimelineItems = [RoomTimelineItemProtocol]() var newTimelineItems = [RoomTimelineItemProtocol]()
for (index, item) in timelineProvider.items.enumerated() { for (index, itemProxy) in timelineProvider.itemProxies.enumerated() {
if Task.isCancelled { if Task.isCancelled {
return return
} }
let previousItem = timelineProvider.items[safe: index - 1] let previousItemProxy = timelineProvider.itemProxies[safe: index - 1]
let nextItem = timelineProvider.items[safe: index + 1] let nextItemProxy = timelineProvider.itemProxies[safe: index + 1]
let inGroupState = inGroupState(for: item, previousItem: previousItem, nextItem: nextItem) let inGroupState = inGroupState(for: itemProxy, previousItemProxy: previousItemProxy, nextItemProxy: nextItemProxy)
switch item { switch itemProxy {
case .event(let eventItem): case .event(let eventItem):
guard eventItem.isMessage || eventItem.isRedacted else { break } // To be handled in the future guard eventItem.isMessage || eventItem.isRedacted else { break } // To be handled in the future
newTimelineItems.append(await timelineItemFactory.buildTimelineItemFor(eventItem: eventItem, newTimelineItems.append(await timelineItemFactory.buildTimelineItemFor(eventItemProxy: eventItem,
showSenderDetails: inGroupState.shouldShowSenderDetails, showSenderDetails: inGroupState.shouldShowSenderDetails,
inGroupState: inGroupState)) inGroupState: inGroupState))
case .virtual: case .virtual:
@ -172,16 +172,16 @@ class RoomTimelineController: RoomTimelineControllerProtocol {
callbacks.send(.updatedTimelineItems) callbacks.send(.updatedTimelineItems)
} }
private func inGroupState(for item: RoomTimelineProviderItem, private func inGroupState(for itemProxy: TimelineItemProxy,
previousItem: RoomTimelineProviderItem?, previousItemProxy: TimelineItemProxy?,
nextItem: RoomTimelineProviderItem?) -> TimelineItemInGroupState { nextItemProxy: TimelineItemProxy?) -> TimelineItemInGroupState {
guard let previousItem = previousItem else { guard let previousItem = previousItemProxy else {
// no previous item, check next item // no previous item, check next item
guard let nextItem = nextItem else { guard let nextItem = nextItemProxy else {
// no next item neither, this is single // no next item neither, this is single
return .single return .single
} }
guard nextItem.canBeGrouped(with: item) else { guard nextItem.canBeGrouped(with: itemProxy) else {
// there is a next item but can't be grouped, this is single // there is a next item but can't be grouped, this is single
return .single return .single
} }
@ -189,9 +189,9 @@ class RoomTimelineController: RoomTimelineControllerProtocol {
return .beginning return .beginning
} }
guard let nextItem = nextItem else { guard let nextItem = nextItemProxy else {
// no next item // no next item
guard item.canBeGrouped(with: previousItem) else { guard itemProxy.canBeGrouped(with: previousItem) else {
// there is a previous item but can't be grouped, this is single // there is a previous item but can't be grouped, this is single
return .single return .single
} }
@ -199,8 +199,8 @@ class RoomTimelineController: RoomTimelineControllerProtocol {
return .end return .end
} }
guard item.canBeGrouped(with: previousItem) else { guard itemProxy.canBeGrouped(with: previousItem) else {
guard nextItem.canBeGrouped(with: item) else { guard nextItem.canBeGrouped(with: itemProxy) else {
// there is a next item but can't be grouped, this is single // there is a next item but can't be grouped, this is single
return .single return .single
} }
@ -208,7 +208,7 @@ class RoomTimelineController: RoomTimelineControllerProtocol {
return .beginning return .beginning
} }
guard nextItem.canBeGrouped(with: item) else { guard nextItem.canBeGrouped(with: itemProxy) else {
// there is a next item but can't be grouped, this is the end // there is a next item but can't be grouped, this is the end
return .end return .end
} }

View File

@ -36,11 +36,11 @@ class RoomTimelineProvider: RoomTimelineProviderProtocol {
let callbacks = PassthroughSubject<RoomTimelineProviderCallback, Never>() let callbacks = PassthroughSubject<RoomTimelineProviderCallback, Never>()
private(set) var items: [RoomTimelineProviderItem] private(set) var itemProxies: [TimelineItemProxy]
init(roomProxy: RoomProxyProtocol) { init(roomProxy: RoomProxyProtocol) {
self.roomProxy = roomProxy self.roomProxy = roomProxy
items = [] itemProxies = []
} }
func paginateBackwards(_ count: UInt) async -> Result<Void, RoomTimelineProviderError> { func paginateBackwards(_ count: UInt) async -> Result<Void, RoomTimelineProviderError> {
@ -103,41 +103,41 @@ private extension RoomTimelineProvider {
private func replaceItems(_ items: [MatrixRustSDK.TimelineItem]?) { private func replaceItems(_ items: [MatrixRustSDK.TimelineItem]?) {
guard let items = items else { return } guard let items = items else { return }
self.items = items.map(RoomTimelineProviderItem.init) itemProxies = items.map(TimelineItemProxy.init)
} }
private func insertItem(_ data: InsertAtData?) { private func insertItem(_ data: InsertAtData?) {
guard let data = data else { return } guard let data = data else { return }
let item = RoomTimelineProviderItem(item: data.item) let itemProxy = TimelineItemProxy(item: data.item)
items.insert(item, at: Int(data.index)) itemProxies.insert(itemProxy, at: Int(data.index))
} }
private func updateItem(_ data: UpdateAtData?) { private func updateItem(_ data: UpdateAtData?) {
guard let data = data else { return } guard let data = data else { return }
let item = RoomTimelineProviderItem(item: data.item) let itemProxy = TimelineItemProxy(item: data.item)
items[Int(data.index)] = item itemProxies[Int(data.index)] = itemProxy
} }
private func removeItem(at index: UInt32?) { private func removeItem(at index: UInt32?) {
guard let index = index else { return } guard let index = index else { return }
items.remove(at: Int(index)) itemProxies.remove(at: Int(index))
} }
private func moveItem(_ data: MoveData?) { private func moveItem(_ data: MoveData?) {
guard let data = data else { return } guard let data = data else { return }
items.move(fromOffsets: IndexSet(integer: Int(data.oldIndex)), toOffset: Int(data.newIndex)) itemProxies.move(fromOffsets: IndexSet(integer: Int(data.oldIndex)), toOffset: Int(data.newIndex))
} }
private func pushItem(_ item: MatrixRustSDK.TimelineItem?) { private func pushItem(_ item: MatrixRustSDK.TimelineItem?) {
guard let item = item else { return } guard let item = item else { return }
items.append(RoomTimelineProviderItem(item: item)) itemProxies.append(TimelineItemProxy(item: item))
} }
private func popItem() { private func popItem() {
items.removeLast() itemProxies.removeLast()
} }
private func clearAllItems() { private func clearAllItems() {
items.removeAll() itemProxies.removeAll()
} }
} }

View File

@ -32,7 +32,7 @@ enum RoomTimelineProviderError: Error {
protocol RoomTimelineProviderProtocol { protocol RoomTimelineProviderProtocol {
var callbacks: PassthroughSubject<RoomTimelineProviderCallback, Never> { get } var callbacks: PassthroughSubject<RoomTimelineProviderCallback, Never> { get }
var items: [RoomTimelineProviderItem] { get } var itemProxies: [TimelineItemProxy] { get }
func paginateBackwards(_ count: UInt) async -> Result<Void, RoomTimelineProviderError> func paginateBackwards(_ count: UInt) async -> Result<Void, RoomTimelineProviderError>

View File

@ -16,15 +16,15 @@
import MatrixRustSDK import MatrixRustSDK
/// A light wrapper around timeline items returned from Rust for use in `RoomTimelineProvider`. /// A light wrapper around timeline items returned from Rust.
enum RoomTimelineProviderItem { enum TimelineItemProxy {
case event(EventTimelineItem) case event(EventTimelineItemProxy)
case virtual(MatrixRustSDK.VirtualTimelineItem) case virtual(MatrixRustSDK.VirtualTimelineItem)
case other(MatrixRustSDK.TimelineItem) case other(MatrixRustSDK.TimelineItem)
init(item: MatrixRustSDK.TimelineItem) { init(item: MatrixRustSDK.TimelineItem) {
if let eventItem = item.asEvent() { if let eventItem = item.asEvent() {
self = .event(EventTimelineItem(item: eventItem)) self = .event(EventTimelineItemProxy(item: eventItem))
} else if let virtualItem = item.asVirtual() { } else if let virtualItem = item.asVirtual() {
self = .virtual(virtualItem) self = .virtual(virtualItem)
} else { } else {
@ -32,17 +32,17 @@ enum RoomTimelineProviderItem {
} }
} }
func canBeGrouped(with prevItem: RoomTimelineProviderItem) -> Bool { func canBeGrouped(with previousItemProxy: TimelineItemProxy) -> Bool {
guard case let .event(selfEventItem) = self, case let .event(prevEventItem) = prevItem else { guard case let .event(selfEventItemProxy) = self, case let .event(previousEventItemProxy) = previousItemProxy else {
return false return false
} }
// can be improved by adding a date threshold // can be improved by adding a date threshold
return prevEventItem.reactions.isEmpty && selfEventItem.sender == prevEventItem.sender return previousEventItemProxy.reactions.isEmpty && selfEventItemProxy.sender == previousEventItemProxy.sender
} }
} }
/// A light wrapper around event timeline items returned from Rust, used in `RoomTimelineProviderItem`. /// A light wrapper around event timeline items returned from Rust.
struct EventTimelineItem { struct EventTimelineItemProxy {
let item: MatrixRustSDK.EventTimelineItem let item: MatrixRustSDK.EventTimelineItem
init(item: MatrixRustSDK.EventTimelineItem) { init(item: MatrixRustSDK.EventTimelineItem) {

View File

@ -35,35 +35,35 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
self.attributedStringBuilder = attributedStringBuilder self.attributedStringBuilder = attributedStringBuilder
} }
func buildTimelineItemFor(eventItem: EventTimelineItem, func buildTimelineItemFor(eventItemProxy: EventTimelineItemProxy,
showSenderDetails: Bool, showSenderDetails: Bool,
inGroupState: TimelineItemInGroupState) async -> RoomTimelineItemProtocol { inGroupState: TimelineItemInGroupState) async -> RoomTimelineItemProtocol {
let displayName = roomProxy.displayNameForUserId(eventItem.sender) let displayName = roomProxy.displayNameForUserId(eventItemProxy.sender)
let avatarURL = roomProxy.avatarURLStringForUserId(eventItem.sender) let avatarURL = roomProxy.avatarURLStringForUserId(eventItemProxy.sender)
let avatarImage = mediaProvider.imageFromURLString(avatarURL, size: MediaProviderDefaultAvatarSize) let avatarImage = mediaProvider.imageFromURLString(avatarURL, size: MediaProviderDefaultAvatarSize)
let isOutgoing = eventItem.isOwn let isOutgoing = eventItemProxy.isOwn
if eventItem.isRedacted { if eventItemProxy.isRedacted {
return buildRedactedTimelineItemFromEvent(eventItem, isOutgoing, showSenderDetails, inGroupState, displayName, avatarImage) return buildRedactedTimelineItem(eventItemProxy, isOutgoing, showSenderDetails, inGroupState, displayName, avatarImage)
} }
guard let messageContent = eventItem.content.asMessage() else { fatalError("Must be a message for now.") } guard let messageContent = eventItemProxy.content.asMessage() else { fatalError("Must be a message for now.") }
switch messageContent.msgtype() { switch messageContent.msgtype() {
case .text(content: let content): case .text(content: let content):
let message = MessageTimelineItem(item: eventItem.item, content: content) let message = MessageTimelineItem(item: eventItemProxy.item, content: content)
return await buildTextTimelineItemFromMessage(message, isOutgoing, showSenderDetails, inGroupState, displayName, avatarImage) return await buildTextTimelineItemFromMessage(message, isOutgoing, showSenderDetails, inGroupState, displayName, avatarImage)
case .image(content: let content): case .image(content: let content):
let message = MessageTimelineItem(item: eventItem.item, content: content) let message = MessageTimelineItem(item: eventItemProxy.item, content: content)
return await buildImageTimelineItemFromMessage(message, isOutgoing, showSenderDetails, inGroupState, displayName, avatarImage) return await buildImageTimelineItemFromMessage(message, isOutgoing, showSenderDetails, inGroupState, displayName, avatarImage)
case .notice(content: let content): case .notice(content: let content):
let message = MessageTimelineItem(item: eventItem.item, content: content) let message = MessageTimelineItem(item: eventItemProxy.item, content: content)
return await buildNoticeTimelineItemFromMessage(message, isOutgoing, showSenderDetails, inGroupState, displayName, avatarImage) return await buildNoticeTimelineItemFromMessage(message, isOutgoing, showSenderDetails, inGroupState, displayName, avatarImage)
case .emote(content: let content): case .emote(content: let content):
let message = MessageTimelineItem(item: eventItem.item, content: content) let message = MessageTimelineItem(item: eventItemProxy.item, content: content)
return await buildEmoteTimelineItemFromMessage(message, isOutgoing, showSenderDetails, inGroupState, displayName, avatarImage) return await buildEmoteTimelineItemFromMessage(message, isOutgoing, showSenderDetails, inGroupState, displayName, avatarImage)
case .none: case .none:
return await buildFallbackTimelineItem(eventItem, isOutgoing, showSenderDetails, inGroupState, displayName, avatarImage) return await buildFallbackTimelineItem(eventItemProxy, isOutgoing, showSenderDetails, inGroupState, displayName, avatarImage)
} }
} }
@ -71,45 +71,45 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
// swiftformat:disable function_parameter_count // swiftformat:disable function_parameter_count
// swiftlint:disable function_parameter_count // swiftlint:disable function_parameter_count
private func buildRedactedTimelineItemFromEvent(_ event: EventTimelineItem, private func buildRedactedTimelineItem(_ eventItemProxy: EventTimelineItemProxy,
_ isOutgoing: Bool, _ isOutgoing: Bool,
_ showSenderDetails: Bool, _ showSenderDetails: Bool,
_ inGroupState: TimelineItemInGroupState, _ inGroupState: TimelineItemInGroupState,
_ displayName: String?, _ displayName: String?,
_ avatarImage: UIImage?) -> RoomTimelineItemProtocol { _ avatarImage: UIImage?) -> RoomTimelineItemProtocol {
RedactedRoomTimelineItem(id: event.id, RedactedRoomTimelineItem(id: eventItemProxy.id,
text: ElementL10n.eventRedacted, text: ElementL10n.eventRedacted,
timestamp: event.originServerTs.formatted(date: .omitted, time: .shortened), timestamp: eventItemProxy.originServerTs.formatted(date: .omitted, time: .shortened),
shouldShowSenderDetails: showSenderDetails, shouldShowSenderDetails: showSenderDetails,
inGroupState: inGroupState, inGroupState: inGroupState,
isOutgoing: isOutgoing, isOutgoing: isOutgoing,
senderId: event.sender, senderId: eventItemProxy.sender,
senderDisplayName: displayName, senderDisplayName: displayName,
senderAvatar: avatarImage, senderAvatar: avatarImage,
properties: RoomTimelineItemProperties()) properties: RoomTimelineItemProperties())
} }
private func buildFallbackTimelineItem(_ item: EventTimelineItem, private func buildFallbackTimelineItem(_ eventItemProxy: EventTimelineItemProxy,
_ isOutgoing: Bool, _ isOutgoing: Bool,
_ showSenderDetails: Bool, _ showSenderDetails: Bool,
_ inGroupState: TimelineItemInGroupState, _ inGroupState: TimelineItemInGroupState,
_ displayName: String?, _ displayName: String?,
_ avatarImage: UIImage?) async -> RoomTimelineItemProtocol { _ avatarImage: UIImage?) async -> RoomTimelineItemProtocol {
let attributedText = await attributedStringBuilder.fromPlain(item.body) let attributedText = await attributedStringBuilder.fromPlain(eventItemProxy.body)
let attributedComponents = attributedStringBuilder.blockquoteCoalescedComponentsFrom(attributedText) let attributedComponents = attributedStringBuilder.blockquoteCoalescedComponentsFrom(attributedText)
return TextRoomTimelineItem(id: item.id, return TextRoomTimelineItem(id: eventItemProxy.id,
text: item.body ?? "", text: eventItemProxy.body ?? "",
attributedComponents: attributedComponents, attributedComponents: attributedComponents,
timestamp: item.originServerTs.formatted(date: .omitted, time: .shortened), timestamp: eventItemProxy.originServerTs.formatted(date: .omitted, time: .shortened),
shouldShowSenderDetails: showSenderDetails, shouldShowSenderDetails: showSenderDetails,
inGroupState: inGroupState, inGroupState: inGroupState,
isOutgoing: isOutgoing, isOutgoing: isOutgoing,
senderId: item.sender, senderId: eventItemProxy.sender,
senderDisplayName: displayName, senderDisplayName: displayName,
senderAvatar: avatarImage, senderAvatar: avatarImage,
properties: RoomTimelineItemProperties(isEdited: item.content.asMessage()?.isEdited() ?? false, properties: RoomTimelineItemProperties(isEdited: eventItemProxy.content.asMessage()?.isEdited() ?? false,
reactions: aggregateReactions(item.reactions))) reactions: aggregateReactions(eventItemProxy.reactions)))
} }
private func buildTextTimelineItemFromMessage(_ message: MessageTimelineItem<TextMessageContent>, private func buildTextTimelineItemFromMessage(_ message: MessageTimelineItem<TextMessageContent>,

View File

@ -18,7 +18,7 @@ import Foundation
@MainActor @MainActor
protocol RoomTimelineItemFactoryProtocol { protocol RoomTimelineItemFactoryProtocol {
func buildTimelineItemFor(eventItem: EventTimelineItem, func buildTimelineItemFor(eventItemProxy: EventTimelineItemProxy,
showSenderDetails: Bool, showSenderDetails: Bool,
inGroupState: TimelineItemInGroupState) async -> RoomTimelineItemProtocol inGroupState: TimelineItemInGroupState) async -> RoomTimelineItemProtocol
} }

1
changelog.d/162.change Normal file
View File

@ -0,0 +1 @@
Rename RoomTimelineProviderItem to TimelineItemProxy for clarity.