Files
Desktop/ts/util/isVoiceMessagePlayed.std.ts
T
2026-06-01 09:35:04 -04:00

60 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.ts';
import { ReadStatus } from '../messages/MessageReadStatus.std.ts';
import {
isSent,
isViewed,
isNoteToSelf,
getHighestSuccessfulRecipientStatus,
} from '../messages/MessageSendState.std.ts';
export function isVoiceMessagePlayed(
message: Pick<
ReadonlyMessageAttributesType,
| 'conversationId'
| '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 (isNoteToSelf({ message, ourConversationId })) {
return isSent(
getHighestSuccessfulRecipientStatus(
sendStateByConversationId,
undefined
)
);
}
return isViewed(
getHighestSuccessfulRecipientStatus(
sendStateByConversationId,
ourConversationId
)
);
}
return false;
}