|
const {app, BrowserWindow, Menu, protocol, ipcMain} = require('electron'); |
|
const log = require('electron-log'); |
|
const {autoUpdater} = require("electron-updater"); |
|
|
|
//------------------------------------------------------------------- |
|
// Logging |
|
// |
|
// THIS SECTION IS NOT REQUIRED |
|
// |
|
// This logging setup is not required for auto-updates to work, |
|
// but it sure makes debugging easier :) |
|
//------------------------------------------------------------------- |
|
autoUpdater.logger = log; |
|
autoUpdater.logger.transports.file.level = 'info'; |
|
log.info('App starting...'); |
|
|
|
//------------------------------------------------------------------- |
|
// Define the menu |
|
// |
|
// THIS SECTION IS NOT REQUIRED |
|
//------------------------------------------------------------------- |
|
let template = [] |
|
if (process.platform === 'darwin') { |
|
// OS X |
|
const name = app.getName(); |
|
template.unshift({ |
|
label: name, |
|
submenu: [ |
|
{ |
|
label: 'About ' + name, |
|
role: 'about' |
|
}, |
|
{ |
|
label: 'Quit', |
|
accelerator: 'Command+Q', |
|
click() { app.quit(); } |
|
}, |
|
] |
|
}) |
|
} |
|
|
|
|
|
//------------------------------------------------------------------- |
|
// Open a window that displays the version |
|
// |
|
// THIS SECTION IS NOT REQUIRED |
|
// |
|
// This isn't required for auto-updates to work, but it's easier |
|
// for the app to show a window than to have to click "About" to see |
|
// that updates are working. |
|
//------------------------------------------------------------------- |
|
let win; |
|
|
|
function sendStatusToWindow(text) { |
|
log.info(text); |
|
win.webContents.send('message', text); |
|
} |
|
function createDefaultWindow() { |
|
win = new BrowserWindow(); |
|
win.webContents.openDevTools(); |
|
win.on('closed', () => { |
|
win = null; |
|
}); |
|
win.loadURL(`file://${__dirname}/version.html#v${app.getVersion()}`); |
|
return win; |
|
} |
|
autoUpdater.on('checking-for-update', () => { |
|
sendStatusToWindow('Checking for update...'); |
|
}) |
|
autoUpdater.on('update-available', (ev, info) => { |
|
sendStatusToWindow('Update available.'); |
|
}) |
|
autoUpdater.on('update-not-available', (ev, info) => { |
|
sendStatusToWindow('Update not available.'); |
|
}) |
|
autoUpdater.on('error', (ev, err) => { |
|
sendStatusToWindow('Error in auto-updater.'); |
|
}) |
|
autoUpdater.on('download-progress', (ev, progressObj) => { |
|
sendStatusToWindow('Download progress...'); |
|
}) |
|
autoUpdater.on('update-downloaded', (ev, info) => { |
|
sendStatusToWindow('Update downloaded; will install in 5 seconds'); |
|
}); |
|
app.on('ready', function() { |
|
// Create the Menu |
|
const menu = Menu.buildFromTemplate(template); |
|
Menu.setApplicationMenu(menu); |
|
|
|
createDefaultWindow(); |
|
}); |
|
app.on('window-all-closed', () => { |
|
app.quit(); |
|
}); |
|
|
|
//------------------------------------------------------------------- |
|
// Auto updates |
|
// |
|
// For details about these events, see the Wiki: |
|
// https://github.com/electron-userland/electron-builder/wiki/Auto-Update#events |
|
// |
|
// The app doesn't need to listen to any events except `update-downloaded` |
|
// |
|
// Uncomment any of the below events to listen for them. Also, |
|
// look in the previous section to see them being used. |
|
//------------------------------------------------------------------- |
|
// autoUpdater.on('checking-for-update', () => { |
|
// }) |
|
// autoUpdater.on('update-available', (ev, info) => { |
|
// }) |
|
// autoUpdater.on('update-not-available', (ev, info) => { |
|
// }) |
|
// autoUpdater.on('error', (ev, err) => { |
|
// }) |
|
// autoUpdater.on('download-progress', (ev, progressObj) => { |
|
// }) |
|
autoUpdater.on('update-downloaded', (ev, info) => { |
|
// Wait 5 seconds, then quit and install |
|
// In your application, you don't need to wait 5 seconds. |
|
// You could call autoUpdater.quitAndInstall(); immediately |
|
setTimeout(function() { |
|
autoUpdater.quitAndInstall(); |
|
}, 5000) |
|
}) |
|
|
|
app.on('ready', function() { |
|
autoUpdater.checkForUpdates(); |
|
}); |
Also note that since this gist was created Electron has changed the nodeIntegration default from true to false.
In order to see messages in the browser window, line 59 will need to be updated to the following: