Reset storyReplyContext whenever a story expires

This commit is contained in:
Josh Perez 2022-10-11 16:32:00 -04:00 committed by GitHub
parent 25bc16300c
commit e80d9d1f30
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 55 additions and 2 deletions

View file

@ -342,7 +342,9 @@ export class MessageModel extends window.Backbone.Model<MessageAttributesType> {
); );
} }
async hydrateStoryContext(inMemoryMessage?: MessageModel): Promise<void> { async hydrateStoryContext(
inMemoryMessage?: MessageModel | null
): Promise<void> {
const storyId = this.get('storyId'); const storyId = this.get('storyId');
if (!storyId) { if (!storyId) {
return; return;
@ -352,7 +354,10 @@ export class MessageModel extends window.Backbone.Model<MessageAttributesType> {
return; return;
} }
const message = inMemoryMessage || (await getMessageById(storyId)); const message =
inMemoryMessage === undefined
? await getMessageById(storyId)
: inMemoryMessage;
if (!message) { if (!message) {
const conversation = this.getConversation(); const conversation = this.getConversation();

View file

@ -3,6 +3,7 @@
import type { MessageAttributesType } from '../model-types.d'; import type { MessageAttributesType } from '../model-types.d';
import { deletePackReference } from '../types/Stickers'; import { deletePackReference } from '../types/Stickers';
import { isStory } from '../messages/helpers';
export async function cleanupMessage( export async function cleanupMessage(
message: MessageAttributesType message: MessageAttributesType
@ -17,6 +18,53 @@ export async function cleanupMessage(
window.MessageController.unregister(id); window.MessageController.unregister(id);
await deleteMessageData(message); await deleteMessageData(message);
if (isStory(message)) {
await fixupStoryReplies(conversationId, id);
}
}
async function fixupStoryReplies(
conversationId: string,
storyId: string,
pagination?: {
messageId: string;
receivedAt: number;
}
): Promise<void> {
const { messageId, receivedAt } = pagination || {};
const replies = await window.Signal.Data.getOlderMessagesByConversation(
conversationId,
{
includeStoryReplies: false,
receivedAt,
storyId,
}
);
if (!replies.length) {
return;
}
const lastMessage = replies[replies.length - 1];
const lastMessageId = lastMessage.id;
const lastReceivedAt = lastMessage.received_at;
if (messageId === lastMessageId) {
return;
}
replies.forEach(reply => {
const model = window.MessageController.register(reply.id, reply);
model.unset('storyReplyContext');
model.hydrateStoryContext(null);
});
return fixupStoryReplies(conversationId, storyId, {
messageId: lastMessageId,
receivedAt: lastReceivedAt,
});
} }
export async function deleteMessageData( export async function deleteMessageData(