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