From ea0986b676c4fbb2d50ef3370d98b33e1b2be0a0 Mon Sep 17 00:00:00 2001 From: Max Radermacher Date: Wed, 6 Jul 2022 10:54:41 -0700 Subject: [PATCH] Parse gift badges on incoming sync messages This allows outgoing gift messages from other devices to be shown. --- SignalServiceKit/src/Devices/OWSRecordTranscriptJob.m | 3 ++- .../DeviceSyncing/OWSIncomingSentMessageTranscript.h | 2 ++ .../DeviceSyncing/OWSIncomingSentMessageTranscript.m | 2 ++ .../src/Messages/Interactions/TSOutgoingMessage.swift | 6 ++++-- SignalServiceKit/src/TestUtils/Factories.swift | 8 +++++++- 5 files changed, 17 insertions(+), 4 deletions(-) diff --git a/SignalServiceKit/src/Devices/OWSRecordTranscriptJob.m b/SignalServiceKit/src/Devices/OWSRecordTranscriptJob.m index 90d58f91c5..54dd93efff 100644 --- a/SignalServiceKit/src/Devices/OWSRecordTranscriptJob.m +++ b/SignalServiceKit/src/Devices/OWSRecordTranscriptJob.m @@ -120,7 +120,8 @@ NS_ASSUME_NONNULL_BEGIN additionalRecipients:nil storyAuthorAddress:transcript.storyAuthorAddress storyTimestamp:transcript.storyTimestamp - storyReactionEmoji:nil] buildWithTransaction:transaction]; + storyReactionEmoji:nil + giftBadge:transcript.giftBadge] buildWithTransaction:transaction]; SignalServiceAddress *_Nullable localAddress = self.tsAccountManager.localAddress; if (localAddress == nil) { diff --git a/SignalServiceKit/src/Messages/DeviceSyncing/OWSIncomingSentMessageTranscript.h b/SignalServiceKit/src/Messages/DeviceSyncing/OWSIncomingSentMessageTranscript.h index 05eb0896bd..3fcfe046cf 100644 --- a/SignalServiceKit/src/Messages/DeviceSyncing/OWSIncomingSentMessageTranscript.h +++ b/SignalServiceKit/src/Messages/DeviceSyncing/OWSIncomingSentMessageTranscript.h @@ -8,6 +8,7 @@ NS_ASSUME_NONNULL_BEGIN @class MessageBodyRanges; @class MessageSticker; @class OWSContact; +@class OWSGiftBadge; @class OWSLinkPreview; @class SDSAnyWriteTransaction; @class SSKProtoAttachmentPointer; @@ -47,6 +48,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, readonly, nullable) TSQuotedMessage *quotedMessage; @property (nonatomic, readonly, nullable) OWSContact *contact; @property (nonatomic, readonly, nullable) OWSLinkPreview *linkPreview; +@property (nonatomic, readonly, nullable) OWSGiftBadge *giftBadge; @property (nonatomic, readonly, nullable) MessageSticker *messageSticker; @property (nonatomic, readonly) BOOL isRecipientUpdate; @property (nonatomic, readonly) BOOL isViewOnceMessage; diff --git a/SignalServiceKit/src/Messages/DeviceSyncing/OWSIncomingSentMessageTranscript.m b/SignalServiceKit/src/Messages/DeviceSyncing/OWSIncomingSentMessageTranscript.m index 6d5209c007..a44292079d 100644 --- a/SignalServiceKit/src/Messages/DeviceSyncing/OWSIncomingSentMessageTranscript.m +++ b/SignalServiceKit/src/Messages/DeviceSyncing/OWSIncomingSentMessageTranscript.m @@ -209,6 +209,8 @@ NS_ASSUME_NONNULL_BEGIN OWSLogError(@"linkPreviewError: %@", linkPreviewError); } + _giftBadge = [OWSGiftBadge maybeBuildFromDataMessage:_dataMessage]; + NSError *stickerError; _messageSticker = [MessageSticker buildValidatedMessageStickerWithDataMessage:_dataMessage transaction:transaction diff --git a/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.swift b/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.swift index 3fb5b6c42a..f46c659744 100644 --- a/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.swift +++ b/SignalServiceKit/src/Messages/Interactions/TSOutgoingMessage.swift @@ -100,7 +100,8 @@ public class TSOutgoingMessageBuilder: TSMessageBuilder { additionalRecipients: [SignalServiceAddress]?, storyAuthorAddress: SignalServiceAddress?, storyTimestamp: NSNumber?, - storyReactionEmoji: String?) -> TSOutgoingMessageBuilder { + storyReactionEmoji: String?, + giftBadge: OWSGiftBadge?) -> TSOutgoingMessageBuilder { return TSOutgoingMessageBuilder(thread: thread, timestamp: timestamp, messageBody: messageBody, @@ -119,7 +120,8 @@ public class TSOutgoingMessageBuilder: TSMessageBuilder { additionalRecipients: additionalRecipients, storyAuthorAddress: storyAuthorAddress, storyTimestamp: storyTimestamp?.uint64Value, - storyReactionEmoji: storyReactionEmoji) + storyReactionEmoji: storyReactionEmoji, + giftBadge: giftBadge) } private var hasBuilt = false diff --git a/SignalServiceKit/src/TestUtils/Factories.swift b/SignalServiceKit/src/TestUtils/Factories.swift index eb8deab89f..3fa2702180 100644 --- a/SignalServiceKit/src/TestUtils/Factories.swift +++ b/SignalServiceKit/src/TestUtils/Factories.swift @@ -142,7 +142,8 @@ public class OutgoingMessageFactory: NSObject, Factory { additionalRecipients: additionalRecipientsBuilder(), storyAuthorAddress: storyAuthorAddressBuilder(), storyTimestamp: storyTimestampBuilder(), - storyReactionEmoji: storyReactionEmojiBuilder()).build(transaction: transaction) + storyReactionEmoji: storyReactionEmojiBuilder(), + giftBadge: giftBadgeBuilder()).build(transaction: transaction) } @objc @@ -252,6 +253,11 @@ public class OutgoingMessageFactory: NSObject, Factory { return nil } + @objc + public var giftBadgeBuilder: () -> OWSGiftBadge? = { + return nil + } + // MARK: Delivery Receipts @objc