mirror of
https://github.com/signalapp/Signal-Desktop.git
synced 2026-04-21 00:48:19 +01:00
Simplify message deduplication
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user