|  |  |  | const { autoUpdater } = require('electron-updater'); | 
					
						
							|  |  |  | const { dialog } = require('electron'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const config = require('./config'); | 
					
						
							|  |  |  | const windowState = require('./window_state'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const hour = 60 * 60; | 
					
						
							|  |  |  | const autoUpdaterInterval = hour * 1000; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const RESTART_BUTTON = 0; | 
					
						
							|  |  |  | const LATER_BUTTON = 1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function autoUpdateDisabled() { | 
					
						
							|  |  |  |   return ( | 
					
						
							|  |  |  |     process.platform === 'linux' || | 
					
						
							|  |  |  |     process.mas || | 
					
						
							|  |  |  |     config.get('disableAutoUpdate') | 
					
						
							|  |  |  |   ); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | async function checkForUpdates() { | 
					
						
							|  |  |  |   try { | 
					
						
							|  |  |  |     await autoUpdater.checkForUpdates(); | 
					
						
							|  |  |  |   } catch (error) { | 
					
						
							|  |  |  |     console.log('checkForUpdates error:', error.stack); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let showingDialog = false; | 
					
						
							|  |  |  | function showUpdateDialog(mainWindow, messages) { | 
					
						
							|  |  |  |   if (showingDialog || !mainWindow) { | 
					
						
							|  |  |  |     return; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   showingDialog = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const options = { | 
					
						
							|  |  |  |     type: 'info', | 
					
						
							|  |  |  |     buttons: [ | 
					
						
							|  |  |  |       messages.autoUpdateRestartButtonLabel.message, | 
					
						
							|  |  |  |       messages.autoUpdateLaterButtonLabel.message, | 
					
						
							|  |  |  |     ], | 
					
						
							|  |  |  |     title: messages.autoUpdateNewVersionTitle.message, | 
					
						
							|  |  |  |     message: messages.autoUpdateNewVersionMessage.message, | 
					
						
							|  |  |  |     detail: messages.autoUpdateNewVersionInstructions.message, | 
					
						
							|  |  |  |     defaultId: LATER_BUTTON, | 
					
						
							|  |  |  |     cancelId: RESTART_BUTTON, | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   dialog.showMessageBox(mainWindow, options, response => { | 
					
						
							|  |  |  |     if (response === RESTART_BUTTON) { | 
					
						
							|  |  |  |       // We delay these update calls because they don't seem to work in this
 | 
					
						
							|  |  |  |       //   callback - but only if the message box has a parent window.
 | 
					
						
							|  |  |  |       // Fixes this bug: https://github.com/signalapp/Signal-Desktop/issues/1864
 | 
					
						
							|  |  |  |       setTimeout(() => { | 
					
						
							|  |  |  |         windowState.markShouldQuit(); | 
					
						
							|  |  |  |         autoUpdater.quitAndInstall(); | 
					
						
							|  |  |  |       }, 200); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     showingDialog = false; | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function onError(error) { | 
					
						
							|  |  |  |   console.log('Got an error while updating:', error.stack); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function initialize(getMainWindow, messages) { | 
					
						
							|  |  |  |   if (!messages) { | 
					
						
							|  |  |  |     throw new Error('auto-update initialize needs localized messages'); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (autoUpdateDisabled()) { | 
					
						
							|  |  |  |     return; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   autoUpdater.addListener('update-downloaded', () => { | 
					
						
							|  |  |  |     showUpdateDialog(getMainWindow(), messages); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  |   autoUpdater.addListener('error', onError); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   checkForUpdates(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   setInterval(checkForUpdates, autoUpdaterInterval); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports = { | 
					
						
							|  |  |  |   initialize, | 
					
						
							|  |  |  | }; |