|  |  |  | /* global window: false */ | 
					
						
							|  |  |  | /* global callWorker: false */ | 
					
						
							|  |  |  | /* global textsecure: false */ | 
					
						
							|  |  |  | /* global Event: false */ | 
					
						
							|  |  |  | /* global dcodeIO: false */ | 
					
						
							|  |  |  | /* global lokiPublicChatAPI: false */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* eslint-disable more/no-then */ | 
					
						
							|  |  |  | /* eslint-disable no-unreachable */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let openGroupBound = false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function MessageReceiver() { | 
					
						
							|  |  |  |   this.pending = Promise.resolve(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // only do this once to prevent duplicates
 | 
					
						
							|  |  |  |   if (lokiPublicChatAPI) { | 
					
						
							|  |  |  |     window.log.info('Binding open group events handler', openGroupBound); | 
					
						
							|  |  |  |     if (!openGroupBound) { | 
					
						
							|  |  |  |       openGroupBound = true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } else { | 
					
						
							|  |  |  |     window.log.warn('Can not handle open group data, API is not available'); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | MessageReceiver.stringToArrayBuffer = string => | 
					
						
							|  |  |  |   Promise.resolve(dcodeIO.ByteBuffer.wrap(string, 'binary').toArrayBuffer()); | 
					
						
							|  |  |  | MessageReceiver.arrayBufferToString = arrayBuffer => | 
					
						
							|  |  |  |   Promise.resolve(dcodeIO.ByteBuffer.wrap(arrayBuffer).toString('binary')); | 
					
						
							|  |  |  | MessageReceiver.arrayBufferToStringBase64 = arrayBuffer => | 
					
						
							|  |  |  |   callWorker('arrayBufferToStringBase64', arrayBuffer); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | MessageReceiver.prototype = new textsecure.EventTarget(); | 
					
						
							|  |  |  | MessageReceiver.prototype.extend({ | 
					
						
							|  |  |  |   constructor: MessageReceiver, | 
					
						
							|  |  |  |   connect() { | 
					
						
							|  |  |  |     if (this.calledClose) { | 
					
						
							|  |  |  |       return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (this.hasConnected) { | 
					
						
							|  |  |  |       const ev = new Event('reconnect'); | 
					
						
							|  |  |  |       this.dispatchEvent(ev); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     this.hasConnected = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // start polling all open group rooms you have registered
 | 
					
						
							|  |  |  |     // if not registered yet, they'll get started when they're created
 | 
					
						
							|  |  |  |     if (lokiPublicChatAPI) { | 
					
						
							|  |  |  |       lokiPublicChatAPI.open(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Ensures that an immediate 'empty' event from the websocket will fire only after
 | 
					
						
							|  |  |  |     //   all cached envelopes are processed.
 | 
					
						
							|  |  |  |     this.incoming = [this.pending]; | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  |   stopProcessing() { | 
					
						
							|  |  |  |     window.log.info('MessageReceiver: stopProcessing requested'); | 
					
						
							|  |  |  |     this.stoppingProcessing = true; | 
					
						
							|  |  |  |     return this.close(); | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  |   shutdown() {}, | 
					
						
							|  |  |  |   async close() { | 
					
						
							|  |  |  |     window.log.info('MessageReceiver.close()'); | 
					
						
							|  |  |  |     this.calledClose = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // stop polling all open group rooms
 | 
					
						
							|  |  |  |     if (lokiPublicChatAPI) { | 
					
						
							|  |  |  |       await lokiPublicChatAPI.close(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  |   onopen() {}, | 
					
						
							|  |  |  |   onerror() {}, | 
					
						
							|  |  |  |   onclose() {}, | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | window.textsecure = window.textsecure || {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | textsecure.MessageReceiver = function MessageReceiverWrapper() { | 
					
						
							|  |  |  |   const messageReceiver = new MessageReceiver(); | 
					
						
							|  |  |  |   this.addEventListener = messageReceiver.addEventListener.bind(messageReceiver); | 
					
						
							|  |  |  |   this.removeEventListener = messageReceiver.removeEventListener.bind(messageReceiver); | 
					
						
							|  |  |  |   this.close = messageReceiver.close.bind(messageReceiver); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   this.stopProcessing = messageReceiver.stopProcessing.bind(messageReceiver); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   messageReceiver.connect(); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | textsecure.MessageReceiver.prototype = { | 
					
						
							|  |  |  |   constructor: textsecure.MessageReceiver, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | textsecure.MessageReceiver.stringToArrayBuffer = MessageReceiver.stringToArrayBuffer; | 
					
						
							|  |  |  | textsecure.MessageReceiver.arrayBufferToString = MessageReceiver.arrayBufferToString; | 
					
						
							|  |  |  | textsecure.MessageReceiver.arrayBufferToStringBase64 = MessageReceiver.arrayBufferToStringBase64; |