Include authorUuid when sending replies

Co-authored-by: Josh Perez <60019601+josh-signal@users.noreply.github.com>
This commit is contained in:
automated-signal 2022-03-11 15:38:38 -08:00 committed by GitHub
parent c4e1322398
commit 7db801478c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 61 additions and 36 deletions

View File

@ -19,7 +19,7 @@ import {
} from '../../state/selectors/message';
import type { AttachmentType } from '../../textsecure/SendMessage';
import type { LinkPreviewType } from '../../types/message/LinkPreviews';
import type { BodyRangesType } from '../../types/Util';
import type { BodyRangesType, StoryContextType } from '../../types/Util';
import type { WhatIsThis } from '../../window.d';
import type { LoggerType } from '../../types/Logging';
import type {
@ -141,7 +141,7 @@ export async function sendNormalMessage(
preview,
quote,
sticker,
storyContextTimestamp,
storyContext,
} = await getMessageSendData({ log, message });
let messageSendPromise: Promise<CallbackResultType | void>;
@ -254,7 +254,7 @@ export async function sendNormalMessage(
groupId: undefined,
profileKey,
options: sendOptions,
storyContextTimestamp,
storyContext,
});
}
@ -402,7 +402,7 @@ async function getMessageSendData({
preview: Array<LinkPreviewType>;
quote: WhatIsThis;
sticker: WhatIsThis;
storyContextTimestamp?: number;
storyContext?: StoryContextType;
}> {
const {
loadAttachmentData,
@ -426,18 +426,22 @@ async function getMessageSendData({
messageTimestamp = Date.now();
}
const [attachmentsWithData, preview, quote, sticker] = await Promise.all([
// We don't update the caches here because (1) we expect the caches to be populated
// on initial send, so they should be there in the 99% case (2) if you're retrying
// a failed message across restarts, we don't touch the cache for simplicity. If
// sends are failing, let's not add the complication of a cache.
Promise.all((message.get('attachments') ?? []).map(loadAttachmentData)),
message.cachedOutgoingPreviewData ||
loadPreviewData(message.get('preview')),
message.cachedOutgoingQuoteData || loadQuoteData(message.get('quote')),
message.cachedOutgoingStickerData ||
loadStickerData(message.get('sticker')),
]);
const storyId = message.get('storyId');
const [attachmentsWithData, preview, quote, sticker, storyMessage] =
await Promise.all([
// We don't update the caches here because (1) we expect the caches to be populated
// on initial send, so they should be there in the 99% case (2) if you're retrying
// a failed message across restarts, we don't touch the cache for simplicity. If
// sends are failing, let's not add the complication of a cache.
Promise.all((message.get('attachments') ?? []).map(loadAttachmentData)),
message.cachedOutgoingPreviewData ||
loadPreviewData(message.get('preview')),
message.cachedOutgoingQuoteData || loadQuoteData(message.get('quote')),
message.cachedOutgoingStickerData ||
loadStickerData(message.get('sticker')),
storyId ? getMessageById(storyId) : undefined,
]);
const { body, attachments } = window.Whisper.Message.getLongMessageAttachment(
{
@ -457,8 +461,11 @@ async function getMessageSendData({
preview,
quote,
sticker,
storyContextTimestamp: message.get('storyId')
? message.get('sent_at')
storyContext: storyMessage
? {
authorUuid: storyMessage.get('sourceUuid'),
timestamp: storyMessage.get('sent_at'),
}
: undefined,
};
}

View File

@ -204,6 +204,12 @@ export async function sendReaction(
return;
}
let storyMessage: MessageModel | undefined;
const storyId = message.get('storyId');
if (storyId) {
storyMessage = await getMessageById(storyId);
}
log.info('sending direct reaction message');
promise = window.textsecure.messaging.sendMessageToIdentifier({
identifier: recipientIdentifiersWithoutMe[0],
@ -220,7 +226,12 @@ export async function sendReaction(
groupId: undefined,
profileKey,
options: sendOptions,
storyContextTimestamp: message.get('sent_at'),
storyContext: storyMessage
? {
authorUuid: storyMessage.get('sourceUuid'),
timestamp: storyMessage.get('sent_at'),
}
: undefined,
});
} else {
log.info('sending group reaction message');

View File

@ -160,7 +160,7 @@ function reactToStory(
function replyToStory(
conversationId: string,
message: string,
messageBody: string,
mentions: Array<BodyRangeType>,
timestamp: number,
story: StoryViewType
@ -169,7 +169,7 @@ function replyToStory(
if (conversation) {
conversation.enqueueMessageForSend(
message,
messageBody,
[],
undefined,
undefined,

View File

@ -59,7 +59,7 @@ import {
SendMessageProtoError,
HTTPError,
} from './Errors';
import type { BodyRangesType } from '../types/Util';
import type { BodyRangesType, StoryContextType } from '../types/Util';
import type {
LinkPreviewImage,
LinkPreviewMetadata,
@ -193,7 +193,7 @@ export type MessageOptionsType = {
timestamp: number;
mentions?: BodyRangesType;
groupCallUpdate?: GroupCallUpdateType;
storyContextTimestamp?: number;
storyContext?: StoryContextType;
};
export type GroupSendOptionsType = {
attachments?: Array<AttachmentType>;
@ -211,7 +211,7 @@ export type GroupSendOptionsType = {
timestamp: number;
mentions?: BodyRangesType;
groupCallUpdate?: GroupCallUpdateType;
storyContextTimestamp?: number;
storyContext?: StoryContextType;
};
class Message {
@ -256,7 +256,7 @@ class Message {
groupCallUpdate?: GroupCallUpdateType;
storyContextTimestamp?: number;
storyContext?: StoryContextType;
constructor(options: MessageOptionsType) {
this.attachments = options.attachments || [];
@ -276,7 +276,7 @@ class Message {
this.deletedForEveryoneTimestamp = options.deletedForEveryoneTimestamp;
this.mentions = options.mentions;
this.groupCallUpdate = options.groupCallUpdate;
this.storyContextTimestamp = options.storyContextTimestamp;
this.storyContext = options.storyContext;
if (!(this.recipients instanceof Array)) {
throw new Error('Invalid recipient list');
@ -477,14 +477,14 @@ class Message {
proto.groupCallUpdate = groupCallUpdate;
}
if (this.storyContextTimestamp) {
if (this.storyContext) {
const { StoryContext } = Proto.DataMessage;
const storyContext = new StoryContext();
storyContext.authorUuid = String(
window.textsecure.storage.user.getCheckedUuid()
);
storyContext.sentTimestamp = this.storyContextTimestamp;
if (this.storyContext.authorUuid) {
storyContext.authorUuid = this.storyContext.authorUuid;
}
storyContext.sentTimestamp = this.storyContext.timestamp;
proto.storyContext = storyContext;
}
@ -798,7 +798,7 @@ export default class MessageSender {
quote,
reaction,
sticker,
storyContextTimestamp,
storyContext,
timestamp,
} = options;
@ -853,7 +853,7 @@ export default class MessageSender {
reaction,
recipients,
sticker,
storyContextTimestamp,
storyContext,
timestamp,
};
}
@ -1043,7 +1043,7 @@ export default class MessageSender {
groupId,
profileKey,
options,
storyContextTimestamp,
storyContext,
}: Readonly<{
identifier: string;
messageText: string | undefined;
@ -1058,7 +1058,7 @@ export default class MessageSender {
contentHint: number;
groupId: string | undefined;
profileKey?: Uint8Array;
storyContextTimestamp?: number;
storyContext?: StoryContextType;
options?: SendOptionsType;
}>): Promise<CallbackResultType> {
return this.sendMessage({
@ -1074,7 +1074,7 @@ export default class MessageSender {
deletedForEveryoneTimestamp,
expireTimer,
profileKey,
storyContextTimestamp,
storyContext,
},
contentHint,
groupId,

View File

@ -1,6 +1,8 @@
// Copyright 2018-2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import type { UUIDStringType } from './UUID';
export type BodyRangeType = {
start: number;
length: number;
@ -11,6 +13,11 @@ export type BodyRangeType = {
export type BodyRangesType = Array<BodyRangeType>;
export type StoryContextType = {
authorUuid?: UUIDStringType;
timestamp: number;
};
export type RenderTextCallbackType = (options: {
text: string;
key: number;