From edca6e0db941fee50c82df7a75393b2fc8470990 Mon Sep 17 00:00:00 2001 From: Sasha Weiss Date: Wed, 12 Feb 2025 12:10:08 -0800 Subject: [PATCH] More permissive sticker-attachment rendering --- .../CVItemViewModelImpl.swift | 10 -------- .../Components/CVComponentState.swift | 23 ++++--------------- .../Components/CVComponentSticker.swift | 3 --- .../Stickers/MessageStickerManager.swift | 3 ++- .../Stickers/StickerMetadata+TSResource.swift | 2 +- .../ConversationView/CVItemViewModel.swift | 1 - 6 files changed, 8 insertions(+), 34 deletions(-) diff --git a/Signal/ConversationView/CVItemViewModelImpl.swift b/Signal/ConversationView/CVItemViewModelImpl.swift index 3e1788608f..68a0d83bcf 100644 --- a/Signal/ConversationView/CVItemViewModelImpl.swift +++ b/Signal/ConversationView/CVItemViewModelImpl.swift @@ -39,12 +39,6 @@ public class CVComponentStateWrapper: NSObject, CVItemViewModel { return componentState.stickerAttachment } - public var stickerInfo: StickerInfo? { - AssertIsOnMainThread() - - return componentState.stickerInfo - } - public var linkPreview: OWSLinkPreview? { AssertIsOnMainThread() @@ -317,10 +311,6 @@ public extension CVComponentState { sticker?.attachmentStream?.attachmentStream } - var stickerInfo: StickerInfo? { - sticker?.stickerMetadata?.stickerInfo - } - var linkPreviewModel: OWSLinkPreview? { linkPreview?.linkPreview } diff --git a/Signal/ConversationView/Components/CVComponentState.swift b/Signal/ConversationView/Components/CVComponentState.swift index 3979e56eb1..d08cd38786 100644 --- a/Signal/ConversationView/Components/CVComponentState.swift +++ b/Signal/ConversationView/Components/CVComponentState.swift @@ -1305,24 +1305,11 @@ fileprivate extension CVComponentState.Builder { throw OWSAssertionError("Missing sticker attachment.") } if let attachmentStream = attachment.asReferencedStream { - switch attachmentStream.attachmentStream.contentType { - case .image(let pixelSize), .animatedImage(let pixelSize): - guard pixelSize.isNonEmpty else { - fallthrough - } - default: - throw OWSAssertionError("Invalid sticker.") - } - let stickerType = StickerManager.stickerType(forContentType: attachmentStream.attachment.mimeType) - guard - let stickerMetadata = attachmentStream.attachmentStream.asStickerMetadata( - stickerInfo: messageSticker.info, - stickerType: stickerType, - emojiString: messageSticker.emoji - ) - else { - throw OWSAssertionError("Invalid sticker.") - } + let stickerMetadata = attachmentStream.attachmentStream.asStickerMetadata( + stickerInfo: messageSticker.info, + stickerType: StickerManager.stickerType(forContentType: attachmentStream.attachment.mimeType), + emojiString: messageSticker.emoji + ) self.sticker = .available( stickerMetadata: stickerMetadata, attachmentStream: attachmentStream diff --git a/Signal/ConversationView/Components/CVComponentSticker.swift b/Signal/ConversationView/Components/CVComponentSticker.swift index 6e61657d82..abb2c47a44 100644 --- a/Signal/ConversationView/Components/CVComponentSticker.swift +++ b/Signal/ConversationView/Components/CVComponentSticker.swift @@ -20,9 +20,6 @@ public class CVComponentSticker: CVComponentBase, CVComponent { private var attachmentPointer: ReferencedAttachmentPointer? { sticker.attachmentPointer } - private var stickerInfo: StickerInfo? { - stickerMetadata?.stickerInfo - } init(itemModel: CVItemModel, sticker: CVComponentState.Sticker) { self.sticker = sticker diff --git a/SignalServiceKit/Messages/Stickers/MessageStickerManager.swift b/SignalServiceKit/Messages/Stickers/MessageStickerManager.swift index 1a812903de..7b09dbf240 100644 --- a/SignalServiceKit/Messages/Stickers/MessageStickerManager.swift +++ b/SignalServiceKit/Messages/Stickers/MessageStickerManager.swift @@ -82,8 +82,9 @@ public class MessageStickerManagerImpl: MessageStickerManager { tx: DBWriteTransaction ) throws -> OwnedAttachmentBuilder { do { + // If the content type is missing or generic, assume it's a webp. let proto: SSKProtoAttachmentPointer - if dataProto.contentType == MimeType.applicationOctetStream.rawValue { + if dataProto.contentType == nil || dataProto.contentType == MimeType.applicationOctetStream.rawValue { let builder = dataProto.asBuilder() builder.setContentType(MimeType.imageWebp.rawValue) proto = builder.buildInfallibly() diff --git a/SignalServiceKit/Messages/Stickers/StickerMetadata+TSResource.swift b/SignalServiceKit/Messages/Stickers/StickerMetadata+TSResource.swift index ded6893571..bfedd2e270 100644 --- a/SignalServiceKit/Messages/Stickers/StickerMetadata+TSResource.swift +++ b/SignalServiceKit/Messages/Stickers/StickerMetadata+TSResource.swift @@ -11,7 +11,7 @@ extension AttachmentStream { stickerInfo: StickerInfo, stickerType: StickerType, emojiString: String? - ) -> (any StickerMetadata)? { + ) -> any StickerMetadata { return EncryptedStickerMetadata.from( attachment: self, stickerInfo: stickerInfo, diff --git a/SignalUI/ConversationView/CVItemViewModel.swift b/SignalUI/ConversationView/CVItemViewModel.swift index bc170327e4..e120ae6495 100644 --- a/SignalUI/ConversationView/CVItemViewModel.swift +++ b/SignalUI/ConversationView/CVItemViewModel.swift @@ -9,7 +9,6 @@ public protocol CVItemViewModel: AnyObject { var interaction: TSInteraction { get } var contactShare: ContactShareViewModel? { get } var linkPreview: OWSLinkPreview? { get } - var stickerInfo: StickerInfo? { get } var stickerAttachment: AttachmentStream? { get } var stickerMetadata: (any StickerMetadata)? { get } var isGiftBadge: Bool { get }