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.
		
		
		
		
		
			
		
			
	
	
		
			66 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
		
		
			
		
	
	
			66 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
| 
											7 years ago
										 | // eslint-disable-next-line func-names
 | ||
|  | (function() { | ||
|  |   'use strict'; | ||
|  | 
 | ||
|  |   window.Whisper = window.Whisper || {}; | ||
|  | 
 | ||
|  |   const messageLookup = Object.create(null); | ||
|  | 
 | ||
|  |   const SECOND = 1000; | ||
|  |   const MINUTE = SECOND * 60; | ||
|  |   const FIVE_MINUTES = MINUTE * 5; | ||
|  |   const HOUR = MINUTE * 60; | ||
|  | 
 | ||
|  |   function register(id, message) { | ||
|  |     const existing = messageLookup[id]; | ||
|  |     if (existing) { | ||
|  |       messageLookup[id] = { | ||
|  |         message: existing.message, | ||
|  |         timestamp: Date.now(), | ||
|  |       }; | ||
|  |       return existing.message; | ||
|  |     } | ||
|  | 
 | ||
|  |     messageLookup[id] = { | ||
|  |       message, | ||
|  |       timestamp: Date.now(), | ||
|  |     }; | ||
|  | 
 | ||
|  |     return message; | ||
|  |   } | ||
|  | 
 | ||
|  |   function unregister(id) { | ||
|  |     delete messageLookup[id]; | ||
|  |   } | ||
|  | 
 | ||
|  |   function cleanup() { | ||
|  |     const messages = Object.values(messageLookup); | ||
|  |     const now = Date.now(); | ||
|  | 
 | ||
|  |     for (let i = 0, max = messages.length; i < max; i += 1) { | ||
|  |       const { message, timestamp } = messages[i]; | ||
|  |       const conversation = message.getConversation(); | ||
|  | 
 | ||
|  |       if ( | ||
|  |         now - timestamp > FIVE_MINUTES && | ||
|  |         (!conversation || !conversation.messageCollection.length) | ||
|  |       ) { | ||
|  |         delete messageLookup[message.id]; | ||
|  |       } | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   function _get() { | ||
|  |     return messageLookup; | ||
|  |   } | ||
|  | 
 | ||
|  |   setInterval(cleanup, HOUR); | ||
|  | 
 | ||
|  |   window.MessageController = { | ||
|  |     register, | ||
|  |     unregister, | ||
|  |     cleanup, | ||
|  |     _get, | ||
|  |   }; | ||
|  | })(); |