From d215e1b9beb3e48548e8d1ec1d5eefe14cb87435 Mon Sep 17 00:00:00 2001 From: ayumi-signal <143036029+ayumi-signal@users.noreply.github.com> Date: Thu, 1 Feb 2024 16:52:44 -0800 Subject: [PATCH] Fix initial direct call from unknown contacts --- ts/models/conversations.ts | 5 +++-- ts/services/calling.ts | 5 ++++- ts/util/isConversationAccepted.ts | 9 ++++++++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/ts/models/conversations.ts b/ts/models/conversations.ts index 8d193453a2..37e55ad4bb 100644 --- a/ts/models/conversations.ts +++ b/ts/models/conversations.ts @@ -88,6 +88,7 @@ import { } from '../services/notifications'; import { storageServiceUploadJob } from '../services/storage'; import { getSendOptions } from '../util/getSendOptions'; +import type { IsConversationAcceptedOptionsType } from '../util/isConversationAccepted'; import { isConversationAccepted } from '../util/isConversationAccepted'; import { getNumber, @@ -2801,8 +2802,8 @@ export class ConversationModel extends window.Backbone * Determine if this conversation should be considered "accepted" in terms * of message requests */ - getAccepted(): boolean { - return isConversationAccepted(this.attributes); + getAccepted(options?: IsConversationAcceptedOptionsType): boolean { + return isConversationAccepted(this.attributes, options); } onMemberVerifiedChange(): void { diff --git a/ts/services/calling.ts b/ts/services/calling.ts index 18cf8f7685..1e3bc83a85 100644 --- a/ts/services/calling.ts +++ b/ts/services/calling.ts @@ -1682,7 +1682,10 @@ export class CallingClass { return; } - if (callingMessage.offer && !conversation.getAccepted()) { + if ( + callingMessage.offer && + !conversation.getAccepted({ ignoreEmptyConvo: true }) + ) { log.info( 'Conversation was not approved by user; rejecting call message.' ); diff --git a/ts/util/isConversationAccepted.ts b/ts/util/isConversationAccepted.ts index 989dc6bb2f..61cd8ac6c2 100644 --- a/ts/util/isConversationAccepted.ts +++ b/ts/util/isConversationAccepted.ts @@ -6,13 +6,19 @@ import { SignalService as Proto } from '../protobuf'; import { isDirectConversation, isMe } from './whatTypeOfConversation'; import { isInSystemContacts } from './isInSystemContacts'; +export type IsConversationAcceptedOptionsType = { + ignoreEmptyConvo: boolean; +}; + /** * Determine if this conversation should be considered "accepted" in terms * of message requests */ export function isConversationAccepted( conversationAttrs: ConversationAttributesType, - { ignoreEmptyConvo = false } = {} + { ignoreEmptyConvo }: IsConversationAcceptedOptionsType = { + ignoreEmptyConvo: false, + } ): boolean { if (isMe(conversationAttrs)) { return true; @@ -36,6 +42,7 @@ export function isConversationAccepted( (conversationAttrs.messageCountBeforeMessageRequests || 0) > 0; const hasNoMessages = (conversationAttrs.messageCount || 0) === 0; + // We don't want to show the message request UI in an empty conversation. const isEmptyPrivateConvo = hasNoMessages && isDirectConversation(conversationAttrs) &&