Path: blob/main/Signal/util/TSMessage+RenderableContent.swift
1 views
//
// Copyright 2024 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
public import SignalServiceKit
extension TSMessage {
/// Dangerous to use for uninserted messages; exposed only in the Signal target because most rendering
/// uses already-inserted messages, obviating the concern.
/// There are some exceptions to this, such as mock messages we insert for purely UI previewing purposes.
public func hasRenderableContent(tx: DBReadTransaction) -> Bool {
guard let rowId = self.sqliteRowId else {
owsAssertDebug(((self as? MockIncomingMessage) != nil) || ((self as? MockOutgoingMessage) != nil), "Checking renderable content for uninserted message")
return TSMessageBuilder.hasRenderableContent(
hasNonemptyBody: body?.nilIfEmpty != nil,
hasBodyAttachmentsOrOversizeText: false,
hasLinkPreview: linkPreview != nil,
hasQuotedReply: quotedMessage != nil,
hasContactShare: contactShare != nil,
hasSticker: messageSticker != nil,
hasGiftBadge: giftBadge != nil,
isStoryReply: isStoryReply,
isPaymentMessage: self is OWSPaymentMessage || self is OWSArchivedPaymentMessage,
storyReactionEmoji: storyReactionEmoji,
isPoll: isPoll,
)
}
return insertedMessageHasRenderableContent(rowId: rowId, tx: tx)
}
}