|  |  |  | const electron = require('electron'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const Errors = require('../js/modules/types/errors'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const { app, dialog, clipboard } = electron; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // We're using hard-coded strings in this file because it needs to be ready
 | 
					
						
							|  |  |  | //   to report errors before we do anything in the app. Also, we expect users to directly
 | 
					
						
							|  |  |  | //   paste this text into search engines to find the bugs on GitHub.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function handleError(prefix, error) { | 
					
						
							|  |  |  |   console.error(`${prefix}:`, Errors.toLogFormat(error)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (app.isReady()) { | 
					
						
							|  |  |  |     // title field is not shown on macOS, so we don't use it
 | 
					
						
							|  |  |  |     const buttonIndex = dialog.showMessageBox({ | 
					
						
							|  |  |  |       buttons: ['OK', 'Copy error'], | 
					
						
							|  |  |  |       defaultId: 0, | 
					
						
							|  |  |  |       detail: error.stack, | 
					
						
							|  |  |  |       message: prefix, | 
					
						
							|  |  |  |       noLink: true, | 
					
						
							|  |  |  |       type: 'error', | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (buttonIndex === 1) { | 
					
						
							|  |  |  |       clipboard.writeText(`${prefix}\n${error.stack}`); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } else { | 
					
						
							|  |  |  |     dialog.showErrorBox(prefix, error.stack); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   app.quit(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | exports.addHandler = () => { | 
					
						
							|  |  |  |   process.on('uncaughtException', error => { | 
					
						
							|  |  |  |     handleError('Unhandled Error', error); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   process.on('unhandledRejection', error => { | 
					
						
							|  |  |  |     handleError('Unhandled Promise Rejection', error); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | }; |