Expire poll terminate chat events

This commit is contained in:
trevor-signal
2025-11-12 11:02:36 -05:00
committed by GitHub
parent 7dd865904e
commit fe2a012bc8
12 changed files with 195 additions and 32 deletions

View File

@@ -23,6 +23,7 @@ import { strictAssert } from '../util/assert.std.js';
import { getMessageIdForLogging } from '../util/idForLogging.preload.js';
import { drop } from '../util/drop.std.js';
import { maybeNotify } from '../messages/maybeNotify.preload.js';
import type { DurationInSeconds } from '../util/durations/duration-in-seconds.std.js';
const log = createLogger('Polls');
@@ -53,6 +54,8 @@ export type PollTerminateAttributesType = {
targetTimestamp: number;
timestamp: number;
receivedAtDate: number;
expireTimer: DurationInSeconds | undefined;
expirationStartTimestamp: number | undefined;
};
const pollVoteCache = new Map<string, PollVoteAttributesType>();
@@ -578,6 +581,8 @@ export async function handlePollTerminate(
terminatorId: terminate.fromConversationId,
timestamp: terminate.timestamp,
isMeTerminating: isMe(author.attributes),
expireTimer: terminate.expireTimer,
expirationStartTimestamp: terminate.expirationStartTimestamp,
});
window.reduxActions.conversations.markOpenConversationRead(conversation.id);

View File

@@ -10,7 +10,10 @@ import { StartupQueue } from '../util/StartupQueue.std.js';
import { drop } from '../util/drop.std.js';
import { getMessageIdForLogging } from '../util/idForLogging.preload.js';
import { getMessageSentTimestamp } from '../util/getMessageSentTimestamp.std.js';
import { isIncoming } from '../state/selectors/message.preload.js';
import {
isIncoming,
isPollTerminate,
} from '../state/selectors/message.preload.js';
import { isMessageUnread } from '../util/isMessageUnread.std.js';
import { notificationService } from '../services/notifications.preload.js';
import { queueUpdateMessage } from '../util/messageBatcher.preload.js';
@@ -175,8 +178,10 @@ export async function onSync(sync: ReadSyncAttributesType): Promise<void> {
serviceId: item.sourceServiceId,
reason: logId,
});
return isIncoming(item) && sender?.id === readSync.senderId;
return (
(isIncoming(item) || isPollTerminate(item)) &&
sender?.id === readSync.senderId
);
});
if (!found) {