fix: skip recent deleted message empty react changes
							parent
							
								
									0cc7994c12
								
							
						
					
					
						commit
						ad03fbd497
					
				@ -0,0 +1,32 @@
 | 
			
		||||
import { RingBuffer } from '../../../utils/RingBuffer';
 | 
			
		||||
 | 
			
		||||
const rollingDeletedMessageIds: Map<string, RingBuffer<number>> = new Map();
 | 
			
		||||
 | 
			
		||||
// keep 2000 deleted message ids in memory
 | 
			
		||||
const perRoomRollingRemovedIds = 2000;
 | 
			
		||||
 | 
			
		||||
const addMessageDeletedId = (conversationId: string, messageDeletedId: number) => {
 | 
			
		||||
  if (!rollingDeletedMessageIds.has(conversationId)) {
 | 
			
		||||
    rollingDeletedMessageIds.set(conversationId, new RingBuffer<number>(perRoomRollingRemovedIds));
 | 
			
		||||
  }
 | 
			
		||||
  const ringBuffer = rollingDeletedMessageIds.get(conversationId);
 | 
			
		||||
  if (!ringBuffer) {
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  ringBuffer.add(messageDeletedId);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const hasMessageDeletedId = (conversationId: string, messageDeletedId: number) => {
 | 
			
		||||
  if (!rollingDeletedMessageIds.has(conversationId)) {
 | 
			
		||||
    return false;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  const messageIdWasDeletedRecently = rollingDeletedMessageIds
 | 
			
		||||
    ?.get(conversationId)
 | 
			
		||||
    ?.has(messageDeletedId);
 | 
			
		||||
 | 
			
		||||
  return messageIdWasDeletedRecently;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const sogsRollingDeletions = { addMessageDeletedId, hasMessageDeletedId };
 | 
			
		||||
@ -0,0 +1,31 @@
 | 
			
		||||
export class RingBuffer<T> {
 | 
			
		||||
  private buffer: Array<T> = [];
 | 
			
		||||
  private readonly capacity: number;
 | 
			
		||||
 | 
			
		||||
  constructor(capacity: number) {
 | 
			
		||||
    this.capacity = capacity;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public getCapacity(): number {
 | 
			
		||||
    return this.capacity;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public add(item: T) {
 | 
			
		||||
    this.buffer.push(item);
 | 
			
		||||
    this.crop();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public has(item: T) {
 | 
			
		||||
    return this.buffer.includes(item);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public clear() {
 | 
			
		||||
    this.buffer = [];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private crop() {
 | 
			
		||||
    while (this.buffer.length > this.capacity) {
 | 
			
		||||
      this.buffer.shift();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
					Loading…
					
					
				
		Reference in New Issue