Files
Desktop/ts/util/isVoiceMessagePlayed.std.ts
2025-11-20 10:52:17 -08:00

55 lines
1.3 KiB
TypeScript

// Copyright 2025 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import type { ReadonlyMessageAttributesType } from '../model-types.d.ts';
import { isIncoming, isOutgoing } from '../messages/helpers.std.js';
import { ReadStatus } from '../messages/MessageReadStatus.std.js';
import {
isSent,
isViewed,
isMessageJustForMe,
getHighestSuccessfulRecipientStatus,
} from '../messages/MessageSendState.std.js';
export function isVoiceMessagePlayed(
message: Pick<
ReadonlyMessageAttributesType,
'type' | 'isErased' | 'errors' | 'readStatus' | 'sendStateByConversationId'
>,
ourConversationId: string | undefined
): boolean {
if (message.isErased) {
return false;
}
if (message.errors != null && message.errors.length > 0) {
return false;
}
if (isIncoming(message)) {
return message.readStatus === ReadStatus.Viewed;
}
if (isOutgoing(message)) {
const { sendStateByConversationId = {} } = message;
if (isMessageJustForMe(sendStateByConversationId, ourConversationId)) {
return isSent(
getHighestSuccessfulRecipientStatus(
sendStateByConversationId,
undefined
)
);
}
return isViewed(
getHighestSuccessfulRecipientStatus(
sendStateByConversationId,
ourConversationId
)
);
}
return false;
}