Don't enqueue viewed receipt jobs for outgoing messages
This commit is contained in:
parent
7f9beef055
commit
562d15dd14
3 changed files with 41 additions and 20 deletions
|
@ -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 });
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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: [
|
||||
|
|
Loading…
Add table
Reference in a new issue