From 461f7d943013a1f4b36d9c298449a2351e099eef Mon Sep 17 00:00:00 2001 From: Matias Tucci Date: Wed, 6 Jul 2016 16:58:39 +0200 Subject: [PATCH] electron auotupdater --- app/hyperterm.js | 26 ++++++++++++++++++++++---- auto-updater.js | 32 ++++++++++++++++++++++++++++++++ index.js | 3 +++ 3 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 auto-updater.js diff --git a/app/hyperterm.js b/app/hyperterm.js index 8365907b..451fa624 100644 --- a/app/hyperterm.js +++ b/app/hyperterm.js @@ -41,6 +41,7 @@ export default class HyperTerm extends Component { this.onResize = this.onResize.bind(this); this.onChange = this.onChange.bind(this); this.openExternal = this.openExternal.bind(this); + this.quitAndInstall = this.quitAndInstall.bind(this); this.focusActive = this.focusActive.bind(this); this.closeBrowser = this.closeBrowser.bind(this); this.onHeaderMouseDown = this.onHeaderMouseDown.bind(this); @@ -98,13 +99,23 @@ export default class HyperTerm extends Component {
{ this.state.cols }x{ this.state.rows }
- Update available ({ this.state.updateVersion }). + Version { this.state.updateVersion } ready. {this.state.updateNote ? ` ${this.state.updateNote}. ` : ' '} - Download + Restart + to apply [x]
; } + quitAndInstall (ev) { + ev.preventDefault(); + this.rpc.emit('quit-and-install'); + } + + closeUpdateIndicator () { + // @TODO + } + openExternal (ev) { ev.preventDefault(); this.rpc.emit('open external', { url: ev.target.href }); @@ -240,6 +251,13 @@ export default class HyperTerm extends Component { this.rpc.on('increase font size', this.increaseFontSize); this.rpc.on('decrease font size', this.decreaseFontSize); this.rpc.on('reset font size', this.resetFontSize); + + this.rpc.once('update-available', (data) => { + // hardcoded data for now + const updateVersion = '3.0.1'; + const updateNote = ''; + this.setState({ updateVersion, updateNote }); + }); } clearCurrentTerm () { @@ -249,8 +267,8 @@ export default class HyperTerm extends Component { } onUpdateAvailable (updateVersion, updateNote = '') { - updateNote = updateNote.replace(/\.$/, ''); - this.setState({ updateVersion, updateNote }); + // updateNote = updateNote.replace(/\.$/, ''); + // this.setState({ updateVersion, updateNote }); } moveTo (n) { diff --git a/auto-updater.js b/auto-updater.js new file mode 100644 index 00000000..3d3c12b6 --- /dev/null +++ b/auto-updater.js @@ -0,0 +1,32 @@ +const { autoUpdater, dialog } = require('electron'); +// const { version } = require('./package'); +const version = '0.3.0'; // to force update available + +const FEED_URL = 'https://nuts-serve-nxchetcjig.now.sh/update/osx'; + +module.exports = function AutoUpdater (rpc) { + autoUpdater.on('error', (err, msg) => { + dialog.showMessageBox({title: 'title', message: JSON.stringify(err), buttons: ['Ok error']}); + dialog.showMessageBox({title: 'title', message: JSON.stringify(msg), buttons: ['Ok error']}); + }); + + autoUpdater.setFeedURL(`${FEED_URL}/${version}`); + + autoUpdater.once('update-downloaded', () => { + rpc.emit('update-available'); + }); + + autoUpdater.once('update-available', () => { + dialog.showMessageBox({title: 'title', message: 'update-available', buttons: ['Ok']}); + }); + + autoUpdater.once('update-not-available', () => { + dialog.showMessageBox({title: 'title', message: 'update-not-available', buttons: ['Ok']}); + }); + + rpc.once('quit-and-install', () => { + autoUpdater.quitAndInstall(); + }); + + autoUpdater.checkForUpdates(); +}; diff --git a/index.js b/index.js index 3c9d3be8..c76bfd4c 100644 --- a/index.js +++ b/index.js @@ -5,6 +5,7 @@ const Session = require('./session'); const genUid = require('uid2'); const { resolve } = require('path'); const isDev = require('electron-is-dev'); +const AutoUpdater = require('./auto-updater'); if (isDev) { console.log('running in dev mode'); @@ -59,6 +60,8 @@ app.on('ready', () => { sessions.set(uid, session); rpc.emit('new session', { uid }); + AutoUpdater(rpc); + session.on('data', (data) => { rpc.emit('data', { uid, data }); });