|  |  |  | /* global i18n: false */ | 
					
						
							|  |  |  | /* global Whisper: false */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* eslint-disable no-new */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // eslint-disable-next-line func-names
 | 
					
						
							|  |  |  | (function() { | 
					
						
							|  |  |  |   'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   window.Whisper = window.Whisper || {}; | 
					
						
							|  |  |  |   const { Database } = window.Whisper; | 
					
						
							|  |  |  |   const { Logs } = window.Signal; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const CLEAR_DATA_STEPS = { | 
					
						
							|  |  |  |     CHOICE: 1, | 
					
						
							|  |  |  |     DELETING: 2, | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  |   window.Whisper.ClearDataView = Whisper.View.extend({ | 
					
						
							|  |  |  |     templateName: 'clear-data', | 
					
						
							|  |  |  |     className: 'full-screen-flow overlay', | 
					
						
							|  |  |  |     events: { | 
					
						
							|  |  |  |       'click .cancel': 'onCancel', | 
					
						
							|  |  |  |       'click .delete-all-data': 'onDeleteAllData', | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     initialize() { | 
					
						
							|  |  |  |       this.step = CLEAR_DATA_STEPS.CHOICE; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     onCancel() { | 
					
						
							|  |  |  |       this.remove(); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     async onDeleteAllData() { | 
					
						
							|  |  |  |       window.log.info('Deleting everything!'); | 
					
						
							|  |  |  |       this.step = CLEAR_DATA_STEPS.DELETING; | 
					
						
							|  |  |  |       this.render(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       try { | 
					
						
							|  |  |  |         await Database.clear(); | 
					
						
							|  |  |  |         await Database.close(); | 
					
						
							|  |  |  |         window.log.info( | 
					
						
							|  |  |  |           'All database connections closed. Starting database drop.' | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |         await Database.drop(); | 
					
						
							|  |  |  |       } catch (error) { | 
					
						
							|  |  |  |         window.log.error( | 
					
						
							|  |  |  |           'Something went wrong deleting IndexedDB data then dropping database.' | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       this.clearAllData(); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     async clearAllData() { | 
					
						
							|  |  |  |       try { | 
					
						
							|  |  |  |         await Logs.deleteAll(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // SQLCipher
 | 
					
						
							|  |  |  |         await window.Signal.Data.removeAll(); | 
					
						
							|  |  |  |         await window.Signal.Data.close(); | 
					
						
							|  |  |  |         await window.Signal.Data.removeDB(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         await window.Signal.Data.removeOtherData(); | 
					
						
							|  |  |  |       } catch (error) { | 
					
						
							|  |  |  |         window.log.error( | 
					
						
							|  |  |  |           'Something went wrong deleting all data:', | 
					
						
							|  |  |  |           error && error.stack ? error.stack : error | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       window.restart(); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     render_attributes() { | 
					
						
							|  |  |  |       return { | 
					
						
							|  |  |  |         isStep1: this.step === CLEAR_DATA_STEPS.CHOICE, | 
					
						
							|  |  |  |         header: i18n('deleteAllDataHeader'), | 
					
						
							|  |  |  |         body: i18n('deleteAllDataBody'), | 
					
						
							|  |  |  |         cancelButton: i18n('cancel'), | 
					
						
							|  |  |  |         deleteButton: i18n('deleteAllDataButton'), | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         isStep2: this.step === CLEAR_DATA_STEPS.DELETING, | 
					
						
							|  |  |  |         deleting: i18n('deleteAllDataProgress'), | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | })(); |