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.
		
		
		
		
		
			
		
			
				
	
	
		
			73 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
| /*
 | |
|  * vim: ts=4:sw=4:expandtab
 | |
|  */
 | |
| 
 | |
| 
 | |
| ;(function () {
 | |
|     'use strict';
 | |
|     window.textsecure = window.textsecure || {};
 | |
| 
 | |
|     function SyncRequest(sender, receiver) {
 | |
|         if (!(sender instanceof textsecure.MessageSender) || !(receiver instanceof textsecure.MessageReceiver)) {
 | |
|             throw new Error('Tried to construct a SyncRequest without MessageSender and MessageReceiver');
 | |
|         }
 | |
|         this.receiver = receiver;
 | |
| 
 | |
|         this.oncontact = this.onContactSyncComplete.bind(this);
 | |
|         receiver.addEventListener('contactsync', this.oncontact);
 | |
| 
 | |
|         this.ongroup = this.onGroupSyncComplete.bind(this);
 | |
|         receiver.addEventListener('groupsync', this.ongroup);
 | |
| 
 | |
|         sender.sendRequestContactSyncMessage().then(function() {
 | |
|             sender.sendRequestGroupSyncMessage();
 | |
|         });
 | |
|         this.timeout = setTimeout(this.onTimeout.bind(this), 60000);
 | |
|     }
 | |
| 
 | |
|     SyncRequest.prototype = new textsecure.EventTarget();
 | |
|     SyncRequest.prototype.extend({
 | |
|         constructor: SyncRequest,
 | |
|         onContactSyncComplete: function() {
 | |
|             this.contactSync = true;
 | |
|             this.update();
 | |
|         },
 | |
|         onGroupSyncComplete: function() {
 | |
|             this.groupSync = true;
 | |
|             this.update();
 | |
|         },
 | |
|         update: function() {
 | |
|             if (this.contactSync && this.groupSync) {
 | |
|                 this.dispatchEvent(new Event('success'));
 | |
|                 this.cleanup();
 | |
|             }
 | |
|         },
 | |
|         onTimeout: function() {
 | |
|             if (this.contactSync || this.groupSync) {
 | |
|                 this.dispatchEvent(new Event('success'));
 | |
|             } else {
 | |
|                 this.dispatchEvent(new Event('timeout'));
 | |
|             }
 | |
|             this.cleanup();
 | |
|         },
 | |
|         cleanup: function() {
 | |
|             clearTimeout(this.timeout);
 | |
|             this.receiver.removeEventListener('contactsync', this.oncontact);
 | |
|             this.receiver.removeEventListener('groupSync', this.ongroup);
 | |
|             delete this.listeners;
 | |
|         }
 | |
|     });
 | |
| 
 | |
|     textsecure.SyncRequest = function(sender, receiver) {
 | |
|         var syncRequest = new SyncRequest(sender, receiver);
 | |
|         this.addEventListener    = syncRequest.addEventListener.bind(syncRequest);
 | |
|         this.removeEventListener = syncRequest.removeEventListener.bind(syncRequest);
 | |
|     };
 | |
| 
 | |
|     textsecure.SyncRequest.prototype = {
 | |
|         constructor: textsecure.SyncRequest
 | |
|     };
 | |
| 
 | |
| 
 | |
| }());
 |