-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
101 lines (80 loc) · 2.15 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
const electronUpdater = require('electron-updater');
const {dialog} = require('electron');
class ElectronAutoUpdate {
constructor(options = {}) {
this.options = {
checkFrequency: 1000 * 60 * 60,
electronUpdater,
dialog,
logger: {
info: () => {}
},
...options
};
if (options.logger) {
this.options.electronUpdater.autoUpdater.logger = this.options.logger;
}
}
get autoUpdater() {
return this.options.electronUpdater.autoUpdater;
}
get checkFrequency() {
return this.options.checkFrequency;
}
get dialog() {
return this.options.dialog;
}
get logger() {
return this.options.logger;
}
triggerUpdateCheck() {
this.autoUpdater.checkForUpdates();
}
async checkForUpdates() {
this.logger.info('Checking for updates');
this.autoUpdater.on('update-downloaded', async () => this.updateDownloaded());
this.autoUpdater.on('update-not-available', () => {
this.logger.info('Update not currently available');
this.logger.info(`Will check again in ${this.checkFrequency} milliseconds`);
setTimeout(() => {
this.triggerUpdateCheck();
}, this.checkFrequency);
});
this.triggerUpdateCheck();
}
async updateDownloaded() {
this.logger.info('An update has been downloaded and is ready to install');
const {response, checkboxChecked} = await this.showDownloadReadyDialog();
if (response === 0) {
this.logger.info('Quitting the app and installing update now');
this.autoUpdater.quitAndInstall();
return;
}
if (checkboxChecked) {
this.logger.info('Will remind later to install update');
setTimeout(() => {
this.triggerUpdateCheck();
}, this.checkFrequency);
}
}
showDownloadReadyDialog() {
return this.dialog.showMessageBox({
type: 'question',
title: 'Update ready to be installed',
message: 'A new update is ready. When would you like to install?',
buttons: ['Now', 'Later'],
defaultId: 0,
cancelId: 1,
checkboxLabel: 'Remind me again if I choose later',
checkboxChecked: true
});
}
}
module.exports = {
ElectronAutoUpdate,
autoUpdate: options => {
const updater = new ElectronAutoUpdate(options);
updater.checkForUpdates();
return updater;
}
};