Simplify message deduplication

This commit is contained in:
trevor-signal
2026-03-03 16:04:04 -05:00
committed by GitHub
parent 864b4f2bfb
commit f1c285f58e
7 changed files with 212 additions and 135 deletions

View File

@@ -4,11 +4,9 @@
import lodash from 'lodash';
import { LRUCache } from 'lru-cache';
import { createLogger } from '../logging/log.std.js';
import { MessageModel } from '../models/messages.preload.js';
import { DataReader, DataWriter } from '../sql/Client.preload.js';
import { getMessageConversation } from '../util/getMessageConversation.dom.js';
import { getSenderIdentifier } from '../util/getSenderIdentifier.dom.js';
import { upgradeMessageSchema } from '../util/migrations.preload.js';
import { isNotNil } from '../util/isNotNil.std.js';
import { isStory } from '../messages/helpers.std.js';
@@ -23,8 +21,6 @@ import { getSelectedConversationId } from '../state/selectors/nav.std.js';
const { throttle } = lodash;
const log = createLogger('MessageCache');
const MAX_THROTTLED_REDUX_UPDATERS = 200;
export class MessageCache {
static install(): MessageCache {
@@ -35,7 +31,6 @@ export class MessageCache {
#state = {
messages: new Map<string, MessageModel>(),
messageIdsBySender: new Map<string, string>(),
messageIdsBySentAt: new Map<number, Array<string>>(),
lastAccessedAt: new Map<string, number>(),
};
@@ -72,16 +67,6 @@ export class MessageCache {
return message;
}
// Finds a message in the cache by sender identifier
public findBySender(senderIdentifier: string): MessageModel | undefined {
const id = this.#state.messageIdsBySender.get(senderIdentifier);
if (!id) {
return undefined;
}
return this.getById(id);
}
// Finds a message in the cache by Id
public getById(id: string): MessageModel | undefined {
const message = this.#state.messages.get(id);
@@ -109,7 +94,6 @@ export class MessageCache {
return inMemory;
}
log.info(`findBySentAt(${sentAt}): db lookup needed`);
const allOnDisk = await DataReader.getMessagesBySentAt(sentAt);
const onDisk = allOnDisk
.map(message => this.register(new MessageModel(message)))
@@ -220,10 +204,6 @@ export class MessageCache {
return;
}
this.#state.messageIdsBySender.delete(
getSenderIdentifier(message.attributes)
);
const { id, sent_at: sentAt } = message.attributes;
const previousIdsBySentAt = this.#state.messageIdsBySentAt.get(sentAt);
@@ -236,10 +216,6 @@ export class MessageCache {
}
this.#state.lastAccessedAt.set(id, Date.now());
this.#state.messageIdsBySender.set(
getSenderIdentifier(message.attributes),
id
);
this.#throttledUpdateRedux(message.attributes);
}
@@ -270,10 +246,6 @@ export class MessageCache {
this.#state.messages.set(message.id, message);
this.#state.lastAccessedAt.set(message.id, Date.now());
this.#state.messageIdsBySentAt.set(sentAt, Array.from(nextIdsBySentAtSet));
this.#state.messageIdsBySender.set(
getSenderIdentifier(message.attributes),
id
);
}
#removeMessage(messageId: string): void {
@@ -299,9 +271,6 @@ export class MessageCache {
this.#state.messages.delete(messageId);
this.#state.lastAccessedAt.delete(messageId);
this.#state.messageIdsBySender.delete(
getSenderIdentifier(message.attributes)
);
}
#updateRedux(attributes: MessageAttributesType) {