mirror of
https://github.com/signalapp/Signal-Desktop.git
synced 2026-04-26 03:18:17 +01:00
Use minimal replacement class for MessageModel
This commit is contained in:
97
ts/util/isMessageEmpty.ts
Normal file
97
ts/util/isMessageEmpty.ts
Normal file
@@ -0,0 +1,97 @@
|
||||
// Copyright 2024 Signal Messenger, LLC
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
import { messageHasPaymentEvent } from '../messages/helpers';
|
||||
import type { MessageAttributesType } from '../model-types';
|
||||
import {
|
||||
hasErrors,
|
||||
isCallHistory,
|
||||
isChatSessionRefreshed,
|
||||
isConversationMerge,
|
||||
isDeliveryIssue,
|
||||
isEndSession,
|
||||
isExpirationTimerUpdate,
|
||||
isGiftBadge,
|
||||
isGroupUpdate,
|
||||
isGroupV2Change,
|
||||
isKeyChange,
|
||||
isPhoneNumberDiscovery,
|
||||
isProfileChange,
|
||||
isTapToView,
|
||||
isTitleTransitionNotification,
|
||||
isUniversalTimerNotification,
|
||||
isUnsupportedMessage,
|
||||
isVerifiedChange,
|
||||
} from '../state/selectors/message';
|
||||
|
||||
export function isMessageEmpty(attributes: MessageAttributesType): boolean {
|
||||
// Core message types - we check for all four because they can each stand alone
|
||||
const hasBody = Boolean(attributes.body);
|
||||
const hasAttachment = (attributes.attachments || []).length > 0;
|
||||
const hasEmbeddedContact = (attributes.contact || []).length > 0;
|
||||
const isSticker = Boolean(attributes.sticker);
|
||||
|
||||
// Rendered sync messages
|
||||
const isCallHistoryValue = isCallHistory(attributes);
|
||||
const isChatSessionRefreshedValue = isChatSessionRefreshed(attributes);
|
||||
const isDeliveryIssueValue = isDeliveryIssue(attributes);
|
||||
const isGiftBadgeValue = isGiftBadge(attributes);
|
||||
const isGroupUpdateValue = isGroupUpdate(attributes);
|
||||
const isGroupV2ChangeValue = isGroupV2Change(attributes);
|
||||
const isEndSessionValue = isEndSession(attributes);
|
||||
const isExpirationTimerUpdateValue = isExpirationTimerUpdate(attributes);
|
||||
const isVerifiedChangeValue = isVerifiedChange(attributes);
|
||||
|
||||
// Placeholder messages
|
||||
const isUnsupportedMessageValue = isUnsupportedMessage(attributes);
|
||||
const isTapToViewValue = isTapToView(attributes);
|
||||
|
||||
// Errors
|
||||
const hasErrorsValue = hasErrors(attributes);
|
||||
|
||||
// Locally-generated notifications
|
||||
const isKeyChangeValue = isKeyChange(attributes);
|
||||
const isProfileChangeValue = isProfileChange(attributes);
|
||||
const isUniversalTimerNotificationValue =
|
||||
isUniversalTimerNotification(attributes);
|
||||
const isConversationMergeValue = isConversationMerge(attributes);
|
||||
const isPhoneNumberDiscoveryValue = isPhoneNumberDiscovery(attributes);
|
||||
const isTitleTransitionNotificationValue =
|
||||
isTitleTransitionNotification(attributes);
|
||||
|
||||
const isPayment = messageHasPaymentEvent(attributes);
|
||||
|
||||
// Note: not all of these message types go through message.handleDataMessage
|
||||
|
||||
const hasSomethingToDisplay =
|
||||
// Core message types
|
||||
hasBody ||
|
||||
hasAttachment ||
|
||||
hasEmbeddedContact ||
|
||||
isSticker ||
|
||||
isPayment ||
|
||||
// Rendered sync messages
|
||||
isCallHistoryValue ||
|
||||
isChatSessionRefreshedValue ||
|
||||
isDeliveryIssueValue ||
|
||||
isGiftBadgeValue ||
|
||||
isGroupUpdateValue ||
|
||||
isGroupV2ChangeValue ||
|
||||
isEndSessionValue ||
|
||||
isExpirationTimerUpdateValue ||
|
||||
isVerifiedChangeValue ||
|
||||
// Placeholder messages
|
||||
isUnsupportedMessageValue ||
|
||||
isTapToViewValue ||
|
||||
// Errors
|
||||
hasErrorsValue ||
|
||||
// Locally-generated notifications
|
||||
isKeyChangeValue ||
|
||||
isProfileChangeValue ||
|
||||
isUniversalTimerNotificationValue ||
|
||||
isConversationMergeValue ||
|
||||
isPhoneNumberDiscoveryValue ||
|
||||
isTitleTransitionNotificationValue;
|
||||
|
||||
return !hasSomethingToDisplay;
|
||||
}
|
||||
Reference in New Issue
Block a user