You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
session-desktop/ts/session/apis/open_group_api/sogsv3/sogsRollingDeletions.ts

49 lines
1.2 KiB
TypeScript

import { RingBuffer } from '../../../utils/RingBuffer';
const rollingDeletedMessageIds: Map<string, RingBuffer<number>> = new Map();
const addMessageDeletedId = (conversationId: string, messageDeletedId: number) => {
if (!rollingDeletedMessageIds.has(conversationId)) {
rollingDeletedMessageIds.set(
conversationId,
new RingBuffer<number>(sogsRollingDeletions.getPerRoomCount())
);
}
const ringBuffer = rollingDeletedMessageIds.get(conversationId);
if (!ringBuffer) {
return;
}
ringBuffer.insert(messageDeletedId);
};
const hasMessageDeletedId = (conversationId: string, messageDeletedId: number) => {
if (!rollingDeletedMessageIds.has(conversationId)) {
return false;
}
const messageIdWasDeletedRecently = rollingDeletedMessageIds
?.get(conversationId)
?.has(messageDeletedId);
return messageIdWasDeletedRecently;
};
/**
* emptyMessageDeleteIds should only be used for testing purposes.
*/
const emptyMessageDeleteIds = () => {
rollingDeletedMessageIds.clear();
};
export const sogsRollingDeletions = {
addMessageDeletedId,
hasMessageDeletedId,
emptyMessageDeleteIds,
getPerRoomCount,
};
// keep 2000 deleted message ids in memory
function getPerRoomCount() {
return 2000;
}