mirror of
https://github.com/signalapp/Signal-iOS.git
synced 2025-12-05 01:10:41 +00:00
Add view-once messages to backups
This commit is contained in:
@@ -2743,6 +2743,36 @@
|
||||
E18C4A7729EF2ECC007534D4 /* SignalAccountTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = E18C4A7629EF2ECC007534D4 /* SignalAccountTest.swift */; };
|
||||
E1A090382A4B909B00F2BE8B /* RecipientHidingManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1A090372A4B909B00F2BE8B /* RecipientHidingManager.swift */; };
|
||||
E1B32F842CA6162A002141F4 /* LinkPreviewCallLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1CFAAA22C9DD2B1003145C3 /* LinkPreviewCallLink.swift */; };
|
||||
E1B628DA2CCC59E600C4DC7F /* chat_item_view_once_11.binproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628D22CCC59E600C4DC7F /* chat_item_view_once_11.binproto */; };
|
||||
E1B628DB2CCC59E600C4DC7F /* chat_item_view_once_01.binproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628BE2CCC59E600C4DC7F /* chat_item_view_once_01.binproto */; };
|
||||
E1B628DC2CCC59E600C4DC7F /* chat_item_view_once_14.binproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628D82CCC59E600C4DC7F /* chat_item_view_once_14.binproto */; };
|
||||
E1B628DD2CCC59E600C4DC7F /* chat_item_view_once_02.txtproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628C12CCC59E600C4DC7F /* chat_item_view_once_02.txtproto */; };
|
||||
E1B628DE2CCC59E600C4DC7F /* chat_item_view_once_07.txtproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628CB2CCC59E600C4DC7F /* chat_item_view_once_07.txtproto */; };
|
||||
E1B628DF2CCC59E600C4DC7F /* chat_item_view_once_07.binproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628CA2CCC59E600C4DC7F /* chat_item_view_once_07.binproto */; };
|
||||
E1B628E02CCC59E600C4DC7F /* chat_item_view_once_06.binproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628C82CCC59E600C4DC7F /* chat_item_view_once_06.binproto */; };
|
||||
E1B628E12CCC59E600C4DC7F /* chat_item_view_once_01.txtproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628BF2CCC59E600C4DC7F /* chat_item_view_once_01.txtproto */; };
|
||||
E1B628E22CCC59E600C4DC7F /* chat_item_view_once_10.txtproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628D12CCC59E600C4DC7F /* chat_item_view_once_10.txtproto */; };
|
||||
E1B628E32CCC59E600C4DC7F /* chat_item_view_once_00.binproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628BC2CCC59E600C4DC7F /* chat_item_view_once_00.binproto */; };
|
||||
E1B628E42CCC59E600C4DC7F /* chat_item_view_once_00.txtproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628BD2CCC59E600C4DC7F /* chat_item_view_once_00.txtproto */; };
|
||||
E1B628E52CCC59E600C4DC7F /* chat_item_view_once_12.txtproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628D52CCC59E600C4DC7F /* chat_item_view_once_12.txtproto */; };
|
||||
E1B628E62CCC59E600C4DC7F /* chat_item_view_once_06.txtproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628C92CCC59E600C4DC7F /* chat_item_view_once_06.txtproto */; };
|
||||
E1B628E72CCC59E600C4DC7F /* chat_item_view_once_02.binproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628C02CCC59E600C4DC7F /* chat_item_view_once_02.binproto */; };
|
||||
E1B628E82CCC59E600C4DC7F /* chat_item_view_once_05.binproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628C62CCC59E600C4DC7F /* chat_item_view_once_05.binproto */; };
|
||||
E1B628E92CCC59E600C4DC7F /* chat_item_view_once_11.txtproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628D32CCC59E600C4DC7F /* chat_item_view_once_11.txtproto */; };
|
||||
E1B628EA2CCC59E600C4DC7F /* chat_item_view_once_12.binproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628D42CCC59E600C4DC7F /* chat_item_view_once_12.binproto */; };
|
||||
E1B628EB2CCC59E600C4DC7F /* chat_item_view_once_04.binproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628C42CCC59E600C4DC7F /* chat_item_view_once_04.binproto */; };
|
||||
E1B628EC2CCC59E600C4DC7F /* chat_item_view_once_05.txtproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628C72CCC59E600C4DC7F /* chat_item_view_once_05.txtproto */; };
|
||||
E1B628ED2CCC59E600C4DC7F /* chat_item_view_once_13.binproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628D62CCC59E600C4DC7F /* chat_item_view_once_13.binproto */; };
|
||||
E1B628EE2CCC59E600C4DC7F /* chat_item_view_once_09.txtproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628CF2CCC59E600C4DC7F /* chat_item_view_once_09.txtproto */; };
|
||||
E1B628EF2CCC59E600C4DC7F /* chat_item_view_once_03.binproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628C22CCC59E600C4DC7F /* chat_item_view_once_03.binproto */; };
|
||||
E1B628F02CCC59E600C4DC7F /* chat_item_view_once_08.txtproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628CD2CCC59E600C4DC7F /* chat_item_view_once_08.txtproto */; };
|
||||
E1B628F12CCC59E600C4DC7F /* chat_item_view_once_10.binproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628D02CCC59E600C4DC7F /* chat_item_view_once_10.binproto */; };
|
||||
E1B628F22CCC59E600C4DC7F /* chat_item_view_once_04.txtproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628C52CCC59E600C4DC7F /* chat_item_view_once_04.txtproto */; };
|
||||
E1B628F32CCC59E600C4DC7F /* chat_item_view_once_03.txtproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628C32CCC59E600C4DC7F /* chat_item_view_once_03.txtproto */; };
|
||||
E1B628F42CCC59E600C4DC7F /* chat_item_view_once_08.binproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628CC2CCC59E600C4DC7F /* chat_item_view_once_08.binproto */; };
|
||||
E1B628F52CCC59E600C4DC7F /* chat_item_view_once_13.txtproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628D72CCC59E600C4DC7F /* chat_item_view_once_13.txtproto */; };
|
||||
E1B628F62CCC59E600C4DC7F /* chat_item_view_once_09.binproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628CE2CCC59E600C4DC7F /* chat_item_view_once_09.binproto */; };
|
||||
E1B628F72CCC59E600C4DC7F /* chat_item_view_once_14.txtproto in Resources */ = {isa = PBXBuildFile; fileRef = E1B628D92CCC59E600C4DC7F /* chat_item_view_once_14.txtproto */; };
|
||||
E1C2A54B2A8FCB0D00AEC4DA /* DeleteSystemContactViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1C2A54A2A8FCB0D00AEC4DA /* DeleteSystemContactViewController.swift */; };
|
||||
E1D827DA2BDC1F7B0022C1AF /* ReactionBurstManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1D827D82BDC1F6B0022C1AF /* ReactionBurstManagerTests.swift */; };
|
||||
E44AD4E624E98F440035D7B8 /* PhotoCaptureDismiss.swift in Sources */ = {isa = PBXBuildFile; fileRef = E44AD4E524E98F430035D7B8 /* PhotoCaptureDismiss.swift */; };
|
||||
@@ -6423,6 +6453,36 @@
|
||||
E18C4A7629EF2ECC007534D4 /* SignalAccountTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignalAccountTest.swift; sourceTree = "<group>"; };
|
||||
E1A090372A4B909B00F2BE8B /* RecipientHidingManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecipientHidingManager.swift; sourceTree = "<group>"; };
|
||||
E1A0AD8B16E13FDD0071E604 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; };
|
||||
E1B628BC2CCC59E600C4DC7F /* chat_item_view_once_00.binproto */ = {isa = PBXFileReference; lastKnownFileType = file; path = chat_item_view_once_00.binproto; sourceTree = "<group>"; };
|
||||
E1B628BD2CCC59E600C4DC7F /* chat_item_view_once_00.txtproto */ = {isa = PBXFileReference; lastKnownFileType = text; path = chat_item_view_once_00.txtproto; sourceTree = "<group>"; };
|
||||
E1B628BE2CCC59E600C4DC7F /* chat_item_view_once_01.binproto */ = {isa = PBXFileReference; lastKnownFileType = file; path = chat_item_view_once_01.binproto; sourceTree = "<group>"; };
|
||||
E1B628BF2CCC59E600C4DC7F /* chat_item_view_once_01.txtproto */ = {isa = PBXFileReference; lastKnownFileType = text; path = chat_item_view_once_01.txtproto; sourceTree = "<group>"; };
|
||||
E1B628C02CCC59E600C4DC7F /* chat_item_view_once_02.binproto */ = {isa = PBXFileReference; lastKnownFileType = file; path = chat_item_view_once_02.binproto; sourceTree = "<group>"; };
|
||||
E1B628C12CCC59E600C4DC7F /* chat_item_view_once_02.txtproto */ = {isa = PBXFileReference; lastKnownFileType = text; path = chat_item_view_once_02.txtproto; sourceTree = "<group>"; };
|
||||
E1B628C22CCC59E600C4DC7F /* chat_item_view_once_03.binproto */ = {isa = PBXFileReference; lastKnownFileType = file; path = chat_item_view_once_03.binproto; sourceTree = "<group>"; };
|
||||
E1B628C32CCC59E600C4DC7F /* chat_item_view_once_03.txtproto */ = {isa = PBXFileReference; lastKnownFileType = text; path = chat_item_view_once_03.txtproto; sourceTree = "<group>"; };
|
||||
E1B628C42CCC59E600C4DC7F /* chat_item_view_once_04.binproto */ = {isa = PBXFileReference; lastKnownFileType = file; path = chat_item_view_once_04.binproto; sourceTree = "<group>"; };
|
||||
E1B628C52CCC59E600C4DC7F /* chat_item_view_once_04.txtproto */ = {isa = PBXFileReference; lastKnownFileType = text; path = chat_item_view_once_04.txtproto; sourceTree = "<group>"; };
|
||||
E1B628C62CCC59E600C4DC7F /* chat_item_view_once_05.binproto */ = {isa = PBXFileReference; lastKnownFileType = file; path = chat_item_view_once_05.binproto; sourceTree = "<group>"; };
|
||||
E1B628C72CCC59E600C4DC7F /* chat_item_view_once_05.txtproto */ = {isa = PBXFileReference; lastKnownFileType = text; path = chat_item_view_once_05.txtproto; sourceTree = "<group>"; };
|
||||
E1B628C82CCC59E600C4DC7F /* chat_item_view_once_06.binproto */ = {isa = PBXFileReference; lastKnownFileType = file; path = chat_item_view_once_06.binproto; sourceTree = "<group>"; };
|
||||
E1B628C92CCC59E600C4DC7F /* chat_item_view_once_06.txtproto */ = {isa = PBXFileReference; lastKnownFileType = text; path = chat_item_view_once_06.txtproto; sourceTree = "<group>"; };
|
||||
E1B628CA2CCC59E600C4DC7F /* chat_item_view_once_07.binproto */ = {isa = PBXFileReference; lastKnownFileType = file; path = chat_item_view_once_07.binproto; sourceTree = "<group>"; };
|
||||
E1B628CB2CCC59E600C4DC7F /* chat_item_view_once_07.txtproto */ = {isa = PBXFileReference; lastKnownFileType = text; path = chat_item_view_once_07.txtproto; sourceTree = "<group>"; };
|
||||
E1B628CC2CCC59E600C4DC7F /* chat_item_view_once_08.binproto */ = {isa = PBXFileReference; lastKnownFileType = file; path = chat_item_view_once_08.binproto; sourceTree = "<group>"; };
|
||||
E1B628CD2CCC59E600C4DC7F /* chat_item_view_once_08.txtproto */ = {isa = PBXFileReference; lastKnownFileType = text; path = chat_item_view_once_08.txtproto; sourceTree = "<group>"; };
|
||||
E1B628CE2CCC59E600C4DC7F /* chat_item_view_once_09.binproto */ = {isa = PBXFileReference; lastKnownFileType = file; path = chat_item_view_once_09.binproto; sourceTree = "<group>"; };
|
||||
E1B628CF2CCC59E600C4DC7F /* chat_item_view_once_09.txtproto */ = {isa = PBXFileReference; lastKnownFileType = text; path = chat_item_view_once_09.txtproto; sourceTree = "<group>"; };
|
||||
E1B628D02CCC59E600C4DC7F /* chat_item_view_once_10.binproto */ = {isa = PBXFileReference; lastKnownFileType = file; path = chat_item_view_once_10.binproto; sourceTree = "<group>"; };
|
||||
E1B628D12CCC59E600C4DC7F /* chat_item_view_once_10.txtproto */ = {isa = PBXFileReference; lastKnownFileType = text; path = chat_item_view_once_10.txtproto; sourceTree = "<group>"; };
|
||||
E1B628D22CCC59E600C4DC7F /* chat_item_view_once_11.binproto */ = {isa = PBXFileReference; lastKnownFileType = file; path = chat_item_view_once_11.binproto; sourceTree = "<group>"; };
|
||||
E1B628D32CCC59E600C4DC7F /* chat_item_view_once_11.txtproto */ = {isa = PBXFileReference; lastKnownFileType = text; path = chat_item_view_once_11.txtproto; sourceTree = "<group>"; };
|
||||
E1B628D42CCC59E600C4DC7F /* chat_item_view_once_12.binproto */ = {isa = PBXFileReference; lastKnownFileType = file; path = chat_item_view_once_12.binproto; sourceTree = "<group>"; };
|
||||
E1B628D52CCC59E600C4DC7F /* chat_item_view_once_12.txtproto */ = {isa = PBXFileReference; lastKnownFileType = text; path = chat_item_view_once_12.txtproto; sourceTree = "<group>"; };
|
||||
E1B628D62CCC59E600C4DC7F /* chat_item_view_once_13.binproto */ = {isa = PBXFileReference; lastKnownFileType = file; path = chat_item_view_once_13.binproto; sourceTree = "<group>"; };
|
||||
E1B628D72CCC59E600C4DC7F /* chat_item_view_once_13.txtproto */ = {isa = PBXFileReference; lastKnownFileType = text; path = chat_item_view_once_13.txtproto; sourceTree = "<group>"; };
|
||||
E1B628D82CCC59E600C4DC7F /* chat_item_view_once_14.binproto */ = {isa = PBXFileReference; lastKnownFileType = file; path = chat_item_view_once_14.binproto; sourceTree = "<group>"; };
|
||||
E1B628D92CCC59E600C4DC7F /* chat_item_view_once_14.txtproto */ = {isa = PBXFileReference; lastKnownFileType = text; path = chat_item_view_once_14.txtproto; sourceTree = "<group>"; };
|
||||
E1C2A54A2A8FCB0D00AEC4DA /* DeleteSystemContactViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeleteSystemContactViewController.swift; sourceTree = "<group>"; };
|
||||
E1CFAAA22C9DD2B1003145C3 /* LinkPreviewCallLink.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LinkPreviewCallLink.swift; sourceTree = "<group>"; };
|
||||
E1D827D82BDC1F6B0022C1AF /* ReactionBurstManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReactionBurstManagerTests.swift; sourceTree = "<group>"; };
|
||||
@@ -11612,6 +11672,36 @@
|
||||
D90AA2C42CC9616A00021CB0 /* chat_item_thread_merge_update_00.txtproto */,
|
||||
D90AA2C52CC9616A00021CB0 /* chat_item_thread_merge_update_01.binproto */,
|
||||
D90AA2C62CC9616A00021CB0 /* chat_item_thread_merge_update_01.txtproto */,
|
||||
E1B628BC2CCC59E600C4DC7F /* chat_item_view_once_00.binproto */,
|
||||
E1B628BD2CCC59E600C4DC7F /* chat_item_view_once_00.txtproto */,
|
||||
E1B628BE2CCC59E600C4DC7F /* chat_item_view_once_01.binproto */,
|
||||
E1B628BF2CCC59E600C4DC7F /* chat_item_view_once_01.txtproto */,
|
||||
E1B628C02CCC59E600C4DC7F /* chat_item_view_once_02.binproto */,
|
||||
E1B628C12CCC59E600C4DC7F /* chat_item_view_once_02.txtproto */,
|
||||
E1B628C22CCC59E600C4DC7F /* chat_item_view_once_03.binproto */,
|
||||
E1B628C32CCC59E600C4DC7F /* chat_item_view_once_03.txtproto */,
|
||||
E1B628C42CCC59E600C4DC7F /* chat_item_view_once_04.binproto */,
|
||||
E1B628C52CCC59E600C4DC7F /* chat_item_view_once_04.txtproto */,
|
||||
E1B628C62CCC59E600C4DC7F /* chat_item_view_once_05.binproto */,
|
||||
E1B628C72CCC59E600C4DC7F /* chat_item_view_once_05.txtproto */,
|
||||
E1B628C82CCC59E600C4DC7F /* chat_item_view_once_06.binproto */,
|
||||
E1B628C92CCC59E600C4DC7F /* chat_item_view_once_06.txtproto */,
|
||||
E1B628CA2CCC59E600C4DC7F /* chat_item_view_once_07.binproto */,
|
||||
E1B628CB2CCC59E600C4DC7F /* chat_item_view_once_07.txtproto */,
|
||||
E1B628CC2CCC59E600C4DC7F /* chat_item_view_once_08.binproto */,
|
||||
E1B628CD2CCC59E600C4DC7F /* chat_item_view_once_08.txtproto */,
|
||||
E1B628CE2CCC59E600C4DC7F /* chat_item_view_once_09.binproto */,
|
||||
E1B628CF2CCC59E600C4DC7F /* chat_item_view_once_09.txtproto */,
|
||||
E1B628D02CCC59E600C4DC7F /* chat_item_view_once_10.binproto */,
|
||||
E1B628D12CCC59E600C4DC7F /* chat_item_view_once_10.txtproto */,
|
||||
E1B628D22CCC59E600C4DC7F /* chat_item_view_once_11.binproto */,
|
||||
E1B628D32CCC59E600C4DC7F /* chat_item_view_once_11.txtproto */,
|
||||
E1B628D42CCC59E600C4DC7F /* chat_item_view_once_12.binproto */,
|
||||
E1B628D52CCC59E600C4DC7F /* chat_item_view_once_12.txtproto */,
|
||||
E1B628D62CCC59E600C4DC7F /* chat_item_view_once_13.binproto */,
|
||||
E1B628D72CCC59E600C4DC7F /* chat_item_view_once_13.txtproto */,
|
||||
E1B628D82CCC59E600C4DC7F /* chat_item_view_once_14.binproto */,
|
||||
E1B628D92CCC59E600C4DC7F /* chat_item_view_once_14.txtproto */,
|
||||
D90AA3052CC9616A00021CB0 /* recipient_contacts_00.binproto */,
|
||||
D90AA3062CC9616A00021CB0 /* recipient_contacts_00.txtproto */,
|
||||
D90AA3072CC9616A00021CB0 /* recipient_contacts_01.binproto */,
|
||||
@@ -15058,6 +15148,36 @@
|
||||
D90AA4A02CC9616B00021CB0 /* chat_item_thread_merge_update_00.txtproto in Resources */,
|
||||
D90AA5CC2CC9616B00021CB0 /* chat_item_thread_merge_update_01.binproto in Resources */,
|
||||
D90AA5902CC9616B00021CB0 /* chat_item_thread_merge_update_01.txtproto in Resources */,
|
||||
E1B628E32CCC59E600C4DC7F /* chat_item_view_once_00.binproto in Resources */,
|
||||
E1B628E42CCC59E600C4DC7F /* chat_item_view_once_00.txtproto in Resources */,
|
||||
E1B628DB2CCC59E600C4DC7F /* chat_item_view_once_01.binproto in Resources */,
|
||||
E1B628E12CCC59E600C4DC7F /* chat_item_view_once_01.txtproto in Resources */,
|
||||
E1B628E72CCC59E600C4DC7F /* chat_item_view_once_02.binproto in Resources */,
|
||||
E1B628DD2CCC59E600C4DC7F /* chat_item_view_once_02.txtproto in Resources */,
|
||||
E1B628EF2CCC59E600C4DC7F /* chat_item_view_once_03.binproto in Resources */,
|
||||
E1B628F32CCC59E600C4DC7F /* chat_item_view_once_03.txtproto in Resources */,
|
||||
E1B628EB2CCC59E600C4DC7F /* chat_item_view_once_04.binproto in Resources */,
|
||||
E1B628F22CCC59E600C4DC7F /* chat_item_view_once_04.txtproto in Resources */,
|
||||
E1B628E82CCC59E600C4DC7F /* chat_item_view_once_05.binproto in Resources */,
|
||||
E1B628EC2CCC59E600C4DC7F /* chat_item_view_once_05.txtproto in Resources */,
|
||||
E1B628E02CCC59E600C4DC7F /* chat_item_view_once_06.binproto in Resources */,
|
||||
E1B628E62CCC59E600C4DC7F /* chat_item_view_once_06.txtproto in Resources */,
|
||||
E1B628DF2CCC59E600C4DC7F /* chat_item_view_once_07.binproto in Resources */,
|
||||
E1B628DE2CCC59E600C4DC7F /* chat_item_view_once_07.txtproto in Resources */,
|
||||
E1B628F42CCC59E600C4DC7F /* chat_item_view_once_08.binproto in Resources */,
|
||||
E1B628F02CCC59E600C4DC7F /* chat_item_view_once_08.txtproto in Resources */,
|
||||
E1B628F62CCC59E600C4DC7F /* chat_item_view_once_09.binproto in Resources */,
|
||||
E1B628EE2CCC59E600C4DC7F /* chat_item_view_once_09.txtproto in Resources */,
|
||||
E1B628F12CCC59E600C4DC7F /* chat_item_view_once_10.binproto in Resources */,
|
||||
E1B628E22CCC59E600C4DC7F /* chat_item_view_once_10.txtproto in Resources */,
|
||||
E1B628DA2CCC59E600C4DC7F /* chat_item_view_once_11.binproto in Resources */,
|
||||
E1B628E92CCC59E600C4DC7F /* chat_item_view_once_11.txtproto in Resources */,
|
||||
E1B628EA2CCC59E600C4DC7F /* chat_item_view_once_12.binproto in Resources */,
|
||||
E1B628E52CCC59E600C4DC7F /* chat_item_view_once_12.txtproto in Resources */,
|
||||
E1B628ED2CCC59E600C4DC7F /* chat_item_view_once_13.binproto in Resources */,
|
||||
E1B628F52CCC59E600C4DC7F /* chat_item_view_once_13.txtproto in Resources */,
|
||||
E1B628DC2CCC59E600C4DC7F /* chat_item_view_once_14.binproto in Resources */,
|
||||
E1B628F72CCC59E600C4DC7F /* chat_item_view_once_14.txtproto in Resources */,
|
||||
D90AA4742CC9616B00021CB0 /* recipient_contacts_00.binproto in Resources */,
|
||||
D90AA3C42CC9616B00021CB0 /* recipient_contacts_00.txtproto in Resources */,
|
||||
D90AA3AB2CC9616B00021CB0 /* recipient_contacts_01.binproto in Resources */,
|
||||
|
||||
@@ -344,7 +344,7 @@ public class MessageBackupChatItemArchiverImpl: MessageBackupChatItemArchiver {
|
||||
switch chatItem.item {
|
||||
case nil:
|
||||
return restoreFrameError(.invalidProtoData(.chatItemMissingItem))
|
||||
case .standardMessage, .contactMessage, .giftBadge, .paymentNotification, .remoteDeletedMessage, .stickerMessage:
|
||||
case .standardMessage, .contactMessage, .giftBadge, .viewOnceMessage, .paymentNotification, .remoteDeletedMessage, .stickerMessage:
|
||||
return restoreFrameError(.invalidProtoData(.directionlessChatItemNotUpdateMessage))
|
||||
case .updateMessage:
|
||||
restoreInteractionResult = chatUpdateMessageArchiver.restoreChatItem(
|
||||
|
||||
@@ -283,9 +283,7 @@ extension MessageBackupTSIncomingMessageArchiver: MessageBackupTSMessageEditHist
|
||||
serverGuid: nil,
|
||||
wasReceivedByUD: incomingDetails.sealedSender,
|
||||
isSmsMessageRestoredFromBackup: chatItem.sms,
|
||||
// TODO: [Backups] pass along if this is view once after proto field is added
|
||||
isViewOnceMessage: false,
|
||||
// TODO: [Backups] restore viewed view-once messages after proto field is added
|
||||
isViewOnceComplete: false,
|
||||
wasRemotelyDeleted: false,
|
||||
storyAuthorAci: nil,
|
||||
@@ -320,6 +318,14 @@ extension MessageBackupTSIncomingMessageArchiver: MessageBackupTSMessageEditHist
|
||||
messageBuilder.messageSticker = stickerMessage.sticker
|
||||
case .giftBadge(let giftBadge):
|
||||
messageBuilder.giftBadge = giftBadge.giftBadge
|
||||
case .viewOnceMessage(let viewOnceMessage):
|
||||
messageBuilder.isViewOnceMessage = true
|
||||
switch viewOnceMessage.state {
|
||||
case .unviewed:
|
||||
messageBuilder.isViewOnceComplete = false
|
||||
case .complete:
|
||||
messageBuilder.isViewOnceComplete = true
|
||||
}
|
||||
}
|
||||
|
||||
return messageBuilder.build()
|
||||
|
||||
@@ -66,12 +66,23 @@ extension MessageBackup {
|
||||
let giftBadge: OWSGiftBadge
|
||||
}
|
||||
|
||||
struct ViewOnceMessage {
|
||||
enum State {
|
||||
case complete
|
||||
case unviewed(BackupProto_MessageAttachment)
|
||||
}
|
||||
let state: State
|
||||
|
||||
fileprivate let reactions: [BackupProto_Reaction]
|
||||
}
|
||||
|
||||
case archivedPayment(Payment)
|
||||
case remoteDeleteTombstone
|
||||
case text(Text)
|
||||
case contactShare(ContactShare)
|
||||
case stickerMessage(StickerMessage)
|
||||
case giftBadge(GiftBadge)
|
||||
case viewOnceMessage(ViewOnceMessage)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -153,6 +164,12 @@ class MessageBackupTSMessageContentsArchiver: MessageBackupProtoArchiver {
|
||||
giftBadge,
|
||||
context: context
|
||||
)
|
||||
} else if message.isViewOnceMessage {
|
||||
return archiveViewOnceMessage(
|
||||
message,
|
||||
messageRowId: messageRowId,
|
||||
context: context
|
||||
)
|
||||
} else {
|
||||
return archiveStandardMessageContents(
|
||||
message,
|
||||
@@ -690,6 +707,64 @@ class MessageBackupTSMessageContentsArchiver: MessageBackupProtoArchiver {
|
||||
return .success(.giftBadge(giftBadgeProto))
|
||||
}
|
||||
|
||||
// MARK: -
|
||||
|
||||
private func archiveViewOnceMessage(
|
||||
_ message: TSMessage,
|
||||
messageRowId: Int64,
|
||||
context: MessageBackup.RecipientArchivingContext
|
||||
) -> ArchiveInteractionResult<ChatItemType> {
|
||||
var partialErrors = [ArchiveFrameError]()
|
||||
|
||||
var proto = BackupProto_ViewOnceMessage()
|
||||
|
||||
if !message.isViewOnceComplete {
|
||||
let attachmentResult = attachmentsArchiver.archiveBodyAttachments(
|
||||
messageId: message.uniqueInteractionId,
|
||||
messageRowId: messageRowId,
|
||||
context: context
|
||||
)
|
||||
switch attachmentResult.bubbleUp(ChatItemType.self, partialErrors: &partialErrors) {
|
||||
case .continue(let value):
|
||||
guard let first = value.first else {
|
||||
return .messageFailure(partialErrors + [.archiveFrameError(
|
||||
.unviewedViewOnceMessageMissingAttachment,
|
||||
message.uniqueInteractionId
|
||||
)])
|
||||
}
|
||||
if value.count > 1 {
|
||||
partialErrors.append(.archiveFrameError(
|
||||
.unviewedViewOnceMessageTooManyAttachments(value.count),
|
||||
message.uniqueInteractionId
|
||||
))
|
||||
}
|
||||
proto.attachment = first
|
||||
case .bubbleUpError(let errorResult):
|
||||
return errorResult
|
||||
}
|
||||
}
|
||||
|
||||
let reactions: [BackupProto_Reaction]
|
||||
let reactionsResult = reactionArchiver.archiveReactions(
|
||||
message,
|
||||
context: context
|
||||
)
|
||||
switch reactionsResult.bubbleUp(ChatItemType.self, partialErrors: &partialErrors) {
|
||||
case .continue(let values):
|
||||
reactions = values
|
||||
case .bubbleUpError(let errorResult):
|
||||
return errorResult
|
||||
}
|
||||
proto.reactions = reactions
|
||||
|
||||
if partialErrors.isEmpty {
|
||||
return .success(.viewOnceMessage(proto))
|
||||
} else {
|
||||
return .partialFailure(.viewOnceMessage(proto), partialErrors)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// MARK: - Restoring
|
||||
|
||||
/// Parses the proto structure of message contents into
|
||||
@@ -749,6 +824,13 @@ class MessageBackupTSMessageContentsArchiver: MessageBackupProtoArchiver {
|
||||
chatItemId: chatItemId,
|
||||
context: context
|
||||
)
|
||||
case .viewOnceMessage(let viewOnceMessage):
|
||||
return restoreViewOnceMessage(
|
||||
viewOnceMessage,
|
||||
chatItemId: chatItemId,
|
||||
chatThread: chatThread,
|
||||
context: context
|
||||
)
|
||||
case .updateMessage:
|
||||
return .messageFailure([.restoreFrameError(
|
||||
.developerError(OWSAssertionError("Chat update has no contents to restore!")),
|
||||
@@ -866,6 +948,26 @@ class MessageBackupTSMessageContentsArchiver: MessageBackupProtoArchiver {
|
||||
thread: thread,
|
||||
context: context
|
||||
))
|
||||
case .viewOnceMessage(let viewOnceMessage):
|
||||
downstreamObjectResults.append(reactionArchiver.restoreReactions(
|
||||
viewOnceMessage.reactions,
|
||||
chatItemId: chatItemId,
|
||||
message: message,
|
||||
context: context.recipientContext
|
||||
))
|
||||
switch viewOnceMessage.state {
|
||||
case .unviewed(let attachment):
|
||||
downstreamObjectResults.append(attachmentsArchiver.restoreBodyAttachments(
|
||||
[attachment],
|
||||
chatItemId: chatItemId,
|
||||
messageRowId: messageRowId,
|
||||
message: message,
|
||||
thread: thread,
|
||||
context: context
|
||||
))
|
||||
case .complete:
|
||||
break
|
||||
}
|
||||
case .remoteDeleteTombstone, .giftBadge:
|
||||
// Nothing downstream to restore.
|
||||
break
|
||||
@@ -1458,6 +1560,26 @@ class MessageBackupTSMessageContentsArchiver: MessageBackupProtoArchiver {
|
||||
giftBadge: giftBadge
|
||||
)))
|
||||
}
|
||||
|
||||
// MARK: -
|
||||
|
||||
private func restoreViewOnceMessage(
|
||||
_ viewOnceMessage: BackupProto_ViewOnceMessage,
|
||||
chatItemId: MessageBackup.ChatItemId,
|
||||
chatThread: MessageBackup.ChatThread,
|
||||
context: MessageBackup.ChatItemRestoringContext
|
||||
) -> RestoreInteractionResult<MessageBackup.RestoredMessageContents> {
|
||||
let state: MessageBackup.RestoredMessageContents.ViewOnceMessage.State
|
||||
if viewOnceMessage.hasAttachment {
|
||||
state = .unviewed(viewOnceMessage.attachment)
|
||||
} else {
|
||||
state = .complete
|
||||
}
|
||||
return .success(.viewOnceMessage(.init(
|
||||
state: state,
|
||||
reactions: viewOnceMessage.reactions
|
||||
)))
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: -
|
||||
|
||||
@@ -469,9 +469,7 @@ extension MessageBackupTSOutgoingMessageArchiver: MessageBackupTSMessageEditHist
|
||||
isVoiceMessage: false,
|
||||
groupMetaMessage: .unspecified,
|
||||
isSmsMessageRestoredFromBackup: chatItem.sms,
|
||||
// TODO: [Backups] pass along if this is view once after proto field is added
|
||||
isViewOnceMessage: false,
|
||||
// TODO: [Backups] restore viewed view-once messages after proto field is added
|
||||
isViewOnceComplete: false,
|
||||
wasRemotelyDeleted: false,
|
||||
changeActionsProtoData: nil,
|
||||
@@ -509,6 +507,14 @@ extension MessageBackupTSOutgoingMessageArchiver: MessageBackupTSMessageEditHist
|
||||
outgoingMessageBuilder.messageSticker = stickerMessage.sticker
|
||||
case .giftBadge(let giftBadge):
|
||||
outgoingMessageBuilder.giftBadge = giftBadge.giftBadge
|
||||
case .viewOnceMessage(let viewOnceMessage):
|
||||
outgoingMessageBuilder.isViewOnceMessage = true
|
||||
switch viewOnceMessage.state {
|
||||
case .unviewed:
|
||||
outgoingMessageBuilder.isViewOnceComplete = false
|
||||
case .complete:
|
||||
outgoingMessageBuilder.isViewOnceComplete = true
|
||||
}
|
||||
}
|
||||
|
||||
return TSOutgoingMessage(
|
||||
|
||||
@@ -177,6 +177,12 @@ extension MessageBackup {
|
||||
/// We failed to read the ``StoryContextAssociatedData``. Note that it can
|
||||
/// be nil (missing); this is a SQL error when we tried to read.
|
||||
case unableToReadStoryContextAssociatedData(Error)
|
||||
|
||||
/// An unviewed view-once message is missing its attachment.
|
||||
case unviewedViewOnceMessageMissingAttachment
|
||||
/// An unviewed view-once message has more than one attachment.
|
||||
/// Associated value provides the number of attachments.
|
||||
case unviewedViewOnceMessageTooManyAttachments(Int)
|
||||
}
|
||||
|
||||
private let type: ErrorType
|
||||
@@ -267,7 +273,9 @@ extension MessageBackup {
|
||||
.learnedProfileUpdateInvalidE164,
|
||||
.learnedProfileUpdateMissingAuthor,
|
||||
.editHistoryFailedToFetch,
|
||||
.unableToReadStoryContextAssociatedData:
|
||||
.unableToReadStoryContextAssociatedData,
|
||||
.unviewedViewOnceMessageMissingAttachment,
|
||||
.unviewedViewOnceMessageTooManyAttachments:
|
||||
// Log any others as we see them.
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -1534,6 +1534,14 @@ public struct BackupProto_ChatItem: @unchecked Sendable {
|
||||
set {_uniqueStorage()._item = .giftBadge(newValue)}
|
||||
}
|
||||
|
||||
public var viewOnceMessage: BackupProto_ViewOnceMessage {
|
||||
get {
|
||||
if case .viewOnceMessage(let v)? = _storage._item {return v}
|
||||
return BackupProto_ViewOnceMessage()
|
||||
}
|
||||
set {_uniqueStorage()._item = .viewOnceMessage(newValue)}
|
||||
}
|
||||
|
||||
public var unknownFields = SwiftProtobuf.UnknownStorage()
|
||||
|
||||
public enum OneOf_DirectionalDetails: Equatable, Sendable {
|
||||
@@ -1551,6 +1559,7 @@ public struct BackupProto_ChatItem: @unchecked Sendable {
|
||||
case updateMessage(BackupProto_ChatUpdateMessage)
|
||||
case paymentNotification(BackupProto_PaymentNotification)
|
||||
case giftBadge(BackupProto_GiftBadge)
|
||||
case viewOnceMessage(BackupProto_ViewOnceMessage)
|
||||
|
||||
}
|
||||
|
||||
@@ -2213,6 +2222,30 @@ public struct BackupProto_GiftBadge: @unchecked Sendable {
|
||||
public init() {}
|
||||
}
|
||||
|
||||
public struct BackupProto_ViewOnceMessage: Sendable {
|
||||
// SwiftProtobuf.Message conformance is added in an extension below. See the
|
||||
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
|
||||
// methods supported on all messages.
|
||||
|
||||
/// Will be null for viewed messages
|
||||
public var attachment: BackupProto_MessageAttachment {
|
||||
get {return _attachment ?? BackupProto_MessageAttachment()}
|
||||
set {_attachment = newValue}
|
||||
}
|
||||
/// Returns true if `attachment` has been explicitly set.
|
||||
public var hasAttachment: Bool {return self._attachment != nil}
|
||||
/// Clears the value of `attachment`. Subsequent reads from it will return its default value.
|
||||
public mutating func clearAttachment() {self._attachment = nil}
|
||||
|
||||
public var reactions: [BackupProto_Reaction] = []
|
||||
|
||||
public var unknownFields = SwiftProtobuf.UnknownStorage()
|
||||
|
||||
public init() {}
|
||||
|
||||
fileprivate var _attachment: BackupProto_MessageAttachment? = nil
|
||||
}
|
||||
|
||||
public struct BackupProto_ContactAttachment: @unchecked Sendable {
|
||||
// SwiftProtobuf.Message conformance is added in an extension below. See the
|
||||
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
|
||||
@@ -7312,6 +7345,7 @@ extension BackupProto_ChatItem: SwiftProtobuf.Message, SwiftProtobuf._MessageImp
|
||||
15: .same(proto: "updateMessage"),
|
||||
16: .same(proto: "paymentNotification"),
|
||||
17: .same(proto: "giftBadge"),
|
||||
18: .same(proto: "viewOnceMessage"),
|
||||
]
|
||||
|
||||
fileprivate class _StorageClass {
|
||||
@@ -7502,6 +7536,19 @@ extension BackupProto_ChatItem: SwiftProtobuf.Message, SwiftProtobuf._MessageImp
|
||||
_storage._item = .giftBadge(v)
|
||||
}
|
||||
}()
|
||||
case 18: try {
|
||||
var v: BackupProto_ViewOnceMessage?
|
||||
var hadOneofValue = false
|
||||
if let current = _storage._item {
|
||||
hadOneofValue = true
|
||||
if case .viewOnceMessage(let m) = current {v = m}
|
||||
}
|
||||
try decoder.decodeSingularMessageField(value: &v)
|
||||
if let v = v {
|
||||
if hadOneofValue {try decoder.handleConflictingOneOf()}
|
||||
_storage._item = .viewOnceMessage(v)
|
||||
}
|
||||
}()
|
||||
default: break
|
||||
}
|
||||
}
|
||||
@@ -7579,6 +7626,10 @@ extension BackupProto_ChatItem: SwiftProtobuf.Message, SwiftProtobuf._MessageImp
|
||||
guard case .giftBadge(let v)? = _storage._item else { preconditionFailure() }
|
||||
try visitor.visitSingularMessageField(value: v, fieldNumber: 17)
|
||||
}()
|
||||
case .viewOnceMessage?: try {
|
||||
guard case .viewOnceMessage(let v)? = _storage._item else { preconditionFailure() }
|
||||
try visitor.visitSingularMessageField(value: v, fieldNumber: 18)
|
||||
}()
|
||||
case nil: break
|
||||
}
|
||||
}
|
||||
@@ -8608,6 +8659,48 @@ extension BackupProto_GiftBadge.State: SwiftProtobuf._ProtoNameProviding {
|
||||
]
|
||||
}
|
||||
|
||||
extension BackupProto_ViewOnceMessage: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
||||
public static let protoMessageName: String = _protobuf_package + ".ViewOnceMessage"
|
||||
public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
|
||||
1: .same(proto: "attachment"),
|
||||
2: .same(proto: "reactions"),
|
||||
]
|
||||
|
||||
public mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
|
||||
while let fieldNumber = try decoder.nextFieldNumber() {
|
||||
// The use of inline closures is to circumvent an issue where the compiler
|
||||
// allocates stack space for every case branch when no optimizations are
|
||||
// enabled. https://github.com/apple/swift-protobuf/issues/1034
|
||||
switch fieldNumber {
|
||||
case 1: try { try decoder.decodeSingularMessageField(value: &self._attachment) }()
|
||||
case 2: try { try decoder.decodeRepeatedMessageField(value: &self.reactions) }()
|
||||
default: break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
||||
// The use of inline closures is to circumvent an issue where the compiler
|
||||
// allocates stack space for every if/case branch local when no optimizations
|
||||
// are enabled. https://github.com/apple/swift-protobuf/issues/1034 and
|
||||
// https://github.com/apple/swift-protobuf/issues/1182
|
||||
try { if let v = self._attachment {
|
||||
try visitor.visitSingularMessageField(value: v, fieldNumber: 1)
|
||||
} }()
|
||||
if !self.reactions.isEmpty {
|
||||
try visitor.visitRepeatedMessageField(value: self.reactions, fieldNumber: 2)
|
||||
}
|
||||
try unknownFields.traverse(visitor: &visitor)
|
||||
}
|
||||
|
||||
public static func ==(lhs: BackupProto_ViewOnceMessage, rhs: BackupProto_ViewOnceMessage) -> Bool {
|
||||
if lhs._attachment != rhs._attachment {return false}
|
||||
if lhs.reactions != rhs.reactions {return false}
|
||||
if lhs.unknownFields != rhs.unknownFields {return false}
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
extension BackupProto_ContactAttachment: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
||||
public static let protoMessageName: String = _protobuf_package + ".ContactAttachment"
|
||||
public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
|
||||
|
||||
@@ -346,6 +346,7 @@ message ChatItem {
|
||||
ChatUpdateMessage updateMessage = 15;
|
||||
PaymentNotification paymentNotification = 16;
|
||||
GiftBadge giftBadge = 17;
|
||||
ViewOnceMessage viewOnceMessage = 18;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -474,6 +475,12 @@ message GiftBadge {
|
||||
State state = 2;
|
||||
}
|
||||
|
||||
message ViewOnceMessage {
|
||||
// Will be null for viewed messages
|
||||
MessageAttachment attachment = 1;
|
||||
repeated Reaction reactions = 2;
|
||||
}
|
||||
|
||||
message ContactAttachment {
|
||||
message Name {
|
||||
optional string givenName = 1;
|
||||
|
||||
@@ -80,6 +80,7 @@ class MessageBackupIntegrationTests: XCTestCase {
|
||||
case chatItemStandardMessageWithQuote
|
||||
case chatItemStickerMessage
|
||||
case chatItemThreadMerge
|
||||
case chatItemViewOnceMessage
|
||||
|
||||
case recipient
|
||||
case recipientContact
|
||||
@@ -176,6 +177,8 @@ class MessageBackupIntegrationTests: XCTestCase {
|
||||
return binprotoName.contains("chat_item_sticker_message_")
|
||||
case .chatItemThreadMerge:
|
||||
return binprotoName.contains("chat_item_thread_merge_")
|
||||
case .chatItemViewOnceMessage:
|
||||
return binprotoName.contains("chat_item_view_once_")
|
||||
case .recipient:
|
||||
return binprotoName.contains("recipient_")
|
||||
case .recipientContact:
|
||||
|
||||
Reference in New Issue
Block a user