-
Notifications
You must be signed in to change notification settings - Fork 557
/
index.js
92 lines (77 loc) · 2.31 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
'use strict';
/**
* External Dependencies
*/
const { app, shell } = require('electron');
const fetch = require('electron-fetch').default;
const yaml = require('js-yaml');
const semver = require('semver');
/**
* Internal dependencies
*/
const Updater = require('../lib/Updater');
const setupProgressUpdates = require('../lib/setup-progress-updates');
class ManualUpdater extends Updater {
constructor({ apiUrl, downloadUrl, changelogUrl, options = {} }) {
super(changelogUrl, options);
this.apiUrl = apiUrl;
this.downloadUrl = downloadUrl;
}
// For user-initiated checks.
// Will check and display a progress dialog.
pingAndShowProgress() {
setupProgressUpdates({ updater: this, willAutoDownload: false });
this.ping();
}
async ping() {
const options = {
headers: {
'User-Agent': `Simplenote/${app.getVersion()}`,
},
};
try {
const releaseResp = await fetch(this.apiUrl, options);
if (releaseResp.status !== 200) {
this.emit('error');
console.log(releaseResp); // eslint-disable-line no-console
return;
}
const releaseBody = await releaseResp.json();
const releaseAsset = releaseBody.assets.find(
release => release.name === 'latest.yml'
);
if (releaseAsset) {
const configResp = await fetch(
releaseAsset.browser_download_url,
options
);
if (configResp.status !== 200) {
this.emit('error');
console.log(configResp); // eslint-disable-line no-console
return;
}
const configBody = await configResp.text();
const releaseConfig = yaml.safeLoad(configBody);
if (semver.lt(app.getVersion(), releaseConfig.version)) {
// eslint-disable-next-line no-console
console.log(
'New update is available, prompting user to update to',
releaseConfig.version
);
this.setVersion(releaseConfig.version);
this.emit('update-available');
} else {
this.emit('update-not-available');
return;
}
}
} catch (err) {
this.emit('error');
console.log(err.message); // eslint-disable-line no-console
}
}
onConfirm() {
shell.openExternal(this.downloadUrl);
}
}
module.exports = ManualUpdater;