2021-03-04 16:44:57 -05:00
|
|
|
// Copyright 2021 Signal Messenger, LLC
|
|
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
|
2024-07-24 13:14:11 -07:00
|
|
|
import type { ReadonlyMessageAttributesType } from '../model-types.d';
|
2021-03-04 16:44:57 -05:00
|
|
|
import { createBatcher } from './batcher';
|
|
|
|
import { createWaitBatcher } from './waitBatcher';
|
2024-07-22 11:16:33 -07:00
|
|
|
import { DataWriter } from '../sql/Client';
|
2021-09-17 14:27:53 -04:00
|
|
|
import * as log from '../logging/log';
|
2025-01-10 08:18:32 +10:00
|
|
|
import { postSaveUpdates } from './cleanup';
|
|
|
|
import { MessageModel } from '../models/messages';
|
2021-03-04 16:44:57 -05:00
|
|
|
|
2024-07-24 13:14:11 -07:00
|
|
|
const updateMessageBatcher = createBatcher<ReadonlyMessageAttributesType>({
|
2021-03-25 17:00:03 -07:00
|
|
|
name: 'messageBatcher.updateMessageBatcher',
|
2021-03-30 09:56:03 -07:00
|
|
|
wait: 75,
|
2021-03-04 16:44:57 -05:00
|
|
|
maxSize: 50,
|
2024-07-24 13:14:11 -07:00
|
|
|
processBatch: async (messageAttrs: Array<ReadonlyMessageAttributesType>) => {
|
2021-09-17 14:27:53 -04:00
|
|
|
log.info('updateMessageBatcher', messageAttrs.length);
|
2023-12-15 13:04:08 -05:00
|
|
|
|
|
|
|
// Grab the latest from the cache in case they've changed
|
|
|
|
const messagesToSave = messageAttrs.map(
|
2025-01-10 08:18:32 +10:00
|
|
|
message => window.MessageCache.getById(message.id)?.attributes ?? message
|
2023-12-15 13:04:08 -05:00
|
|
|
);
|
|
|
|
|
2024-07-22 11:16:33 -07:00
|
|
|
await DataWriter.saveMessages(messagesToSave, {
|
2023-08-10 18:43:33 +02:00
|
|
|
ourAci: window.textsecure.storage.user.getCheckedAci(),
|
2025-01-10 08:18:32 +10:00
|
|
|
postSaveUpdates,
|
2021-12-20 13:04:02 -08:00
|
|
|
});
|
2021-03-04 16:44:57 -05:00
|
|
|
},
|
|
|
|
});
|
|
|
|
|
2021-03-10 22:21:21 -05:00
|
|
|
let shouldBatch = true;
|
|
|
|
|
2024-07-24 13:14:11 -07:00
|
|
|
export function queueUpdateMessage(
|
|
|
|
messageAttr: ReadonlyMessageAttributesType
|
|
|
|
): void {
|
2021-03-10 22:21:21 -05:00
|
|
|
if (shouldBatch) {
|
|
|
|
updateMessageBatcher.add(messageAttr);
|
|
|
|
} else {
|
2024-07-22 11:16:33 -07:00
|
|
|
void DataWriter.saveMessage(messageAttr, {
|
2023-08-10 18:43:33 +02:00
|
|
|
ourAci: window.textsecure.storage.user.getCheckedAci(),
|
2025-01-10 08:18:32 +10:00
|
|
|
postSaveUpdates,
|
2021-12-20 13:04:02 -08:00
|
|
|
});
|
2021-03-10 22:21:21 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export function setBatchingStrategy(keepBatching = false): void {
|
|
|
|
shouldBatch = keepBatching;
|
|
|
|
}
|
|
|
|
|
2024-07-24 13:14:11 -07:00
|
|
|
export const saveNewMessageBatcher =
|
|
|
|
createWaitBatcher<ReadonlyMessageAttributesType>({
|
|
|
|
name: 'messageBatcher.saveNewMessageBatcher',
|
|
|
|
wait: 75,
|
|
|
|
maxSize: 30,
|
|
|
|
processBatch: async (
|
|
|
|
messageAttrs: Array<ReadonlyMessageAttributesType>
|
|
|
|
) => {
|
|
|
|
log.info('saveNewMessageBatcher', messageAttrs.length);
|
2023-12-15 13:04:08 -05:00
|
|
|
|
2024-07-24 13:14:11 -07:00
|
|
|
// Grab the latest from the cache in case they've changed
|
|
|
|
const messagesToSave = messageAttrs.map(
|
2025-01-10 08:18:32 +10:00
|
|
|
message =>
|
|
|
|
window.MessageCache.register(new MessageModel(message))?.attributes ??
|
|
|
|
message
|
2024-07-24 13:14:11 -07:00
|
|
|
);
|
2023-12-15 13:04:08 -05:00
|
|
|
|
2024-07-24 13:14:11 -07:00
|
|
|
await DataWriter.saveMessages(messagesToSave, {
|
|
|
|
forceSave: true,
|
|
|
|
ourAci: window.textsecure.storage.user.getCheckedAci(),
|
2025-01-10 08:18:32 +10:00
|
|
|
postSaveUpdates,
|
2024-07-24 13:14:11 -07:00
|
|
|
});
|
|
|
|
},
|
|
|
|
});
|