Don't enqueue viewed receipt jobs for outgoing messages

This commit is contained in:
Evan Hahn 2021-11-03 12:02:26 -05:00 committed by GitHub
parent 7f9beef055
commit 562d15dd14
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 41 additions and 20 deletions

View File

@ -51,7 +51,7 @@ export class ViewedReceiptsJobQueue extends JobQueue<ViewedReceiptsJobData> {
}
try {
await sendViewedReceipt(data.viewedReceipt);
await sendViewedReceipt(data.viewedReceipt, log);
} catch (err: unknown) {
await handleCommonJobRequestError({ err, log, timeRemaining });
}

View File

@ -2,25 +2,43 @@
// SPDX-License-Identifier: AGPL-3.0-only
import type { ConversationAttributesType } from '../model-types.d';
import type { LoggerType } from '../types/Logging';
import { getSendOptions } from './getSendOptions';
import { handleMessageSend } from './handleMessageSend';
import { isConversationAccepted } from './isConversationAccepted';
export async function sendViewedReceipt({
messageId,
senderE164,
senderUuid,
timestamp,
}: Readonly<{
messageId: string;
senderE164?: string;
senderUuid?: string;
timestamp: number;
}>): Promise<void> {
export async function sendViewedReceipt(
{
messageId,
senderE164,
senderUuid,
timestamp,
}: Readonly<{
messageId: string;
senderE164?: string;
senderUuid?: string;
timestamp: number;
}>,
log: LoggerType
): Promise<void> {
if (!window.storage.get('read-receipt-setting')) {
return;
}
// We introduced a bug in `75f0cd50beff73885ebae92e4ac977de9f56d6c9` where we'd enqueue
// jobs that had no sender information. These jobs cannot possibly succeed. This
// removes them from the queue to avoid constantly retrying something.
//
// We should be able to safely remove this check after the fix has been present for
// awhile. Probably ~40 days from when this is first deployed (30 days to unlink + 10
// days of buffer).
if (!senderE164 && !senderUuid) {
log.error(
'sendViewedReceipt: no sender E164 or UUID. Cannot possibly complete this job. Giving up'
);
return;
}
const conversationId = window.ConversationController.ensureContactIds({
e164: senderE164,
uuid: senderUuid,

View File

@ -45,6 +45,7 @@ import * as Bytes from '../Bytes';
import {
canReply,
getAttachmentsForMessage,
isIncoming,
isOutgoing,
isTapToView,
} from '../state/selectors/message';
@ -919,14 +920,16 @@ export class ConversationView extends window.Backbone.View<ConversationModel> {
message.set(markViewed(message.attributes, Date.now()));
viewedReceiptsJobQueue.add({
viewedReceipt: {
messageId,
senderE164,
senderUuid,
timestamp,
},
});
if (isIncoming(message.attributes)) {
viewedReceiptsJobQueue.add({
viewedReceipt: {
messageId,
senderE164,
senderUuid,
timestamp,
},
});
}
viewSyncJobQueue.add({
viewSyncs: [