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;
 | |
| }
 |