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
		
	
| // 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,
 | |
|   };
 | |
| })();
 |