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.
49 lines
1.2 KiB
TypeScript
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;
|
|
}
|