|  |  |  | /* global , Whisper, storage */ | 
					
						
							|  |  |  | /* global textsecure: false */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* eslint-disable more/no-then */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // eslint-disable-next-line func-names
 | 
					
						
							|  |  |  | (function() { | 
					
						
							|  |  |  |   'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   window.Whisper = window.Whisper || {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const blockedNumbers = new Whisper.BlockedNumberCollection(); | 
					
						
							|  |  |  |   window.getBlockedNumbers = () => blockedNumbers; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   window.BlockedNumberController = { | 
					
						
							|  |  |  |     reset() { | 
					
						
							|  |  |  |       this.unblockAll(); | 
					
						
							|  |  |  |       blockedNumbers.reset([]); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     refresh() { | 
					
						
							|  |  |  |       window.log.info('BlockedNumberController: starting initial fetch'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       if (!storage) { | 
					
						
							|  |  |  |         throw new Error( | 
					
						
							|  |  |  |           'BlockedNumberController: Could not load blocked numbers' | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // Add the numbers to the collection
 | 
					
						
							|  |  |  |       const numbers = storage.getBlockedNumbers(); | 
					
						
							|  |  |  |       blockedNumbers.reset(numbers.map(number => ({ number }))); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     block(number) { | 
					
						
							|  |  |  |       const ourNumber = textsecure.storage.user.getNumber(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // Make sure we don't block ourselves
 | 
					
						
							|  |  |  |       if (ourNumber === number) { | 
					
						
							|  |  |  |         window.log.info('BlockedNumberController: Cannot block yourself!'); | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       storage.addBlockedNumber(number); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // Make sure we don't add duplicates
 | 
					
						
							|  |  |  |       if (blockedNumbers.getModel(number)) { | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       blockedNumbers.add({ number }); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     unblock(number) { | 
					
						
							|  |  |  |       storage.removeBlockedNumber(number); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // Remove the model from our collection
 | 
					
						
							|  |  |  |       const model = blockedNumbers.getModel(number); | 
					
						
							|  |  |  |       if (model) { | 
					
						
							|  |  |  |         blockedNumbers.remove(model); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     unblockAll() { | 
					
						
							|  |  |  |       const numbers = blockedNumbers.map(m => m.get('number')); | 
					
						
							|  |  |  |       numbers.forEach(n => this.unblock(n)); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     isBlocked(number) { | 
					
						
							|  |  |  |       return storage.isBlocked(number); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | })(); |