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
75class UpdateChecker {
constructor() {
let https = require("https");
let electron = require("electron");
let remote = require("@electron/remote");
let current = remote.app.getVersion();
this._failed = false;
this._willfail = false;
this._fail = e => {
this._failed = true;
electron.ipcRenderer.send("log", "note", "UpdateChecker: Could not fetch latest release from GitHub's API.");
electron.ipcRenderer.send("log", "debug", `Error: ${e}`);
};
https.get({
protocol: "https:",
host: "api.github.com",
path: "/repos/GitSquared/edex-ui/releases/latest",
headers: {
"User-Agent": "eDEX-UI UpdateChecker"
}
}, res => {
switch(res.statusCode) {
case 200:
break;
case 404:
this._fail("Got 404 (Not Found) response from server");
break;
default:
this._willfail = true;
}
let rawData = "";
res.on('data', chunk => {
rawData += chunk;
});
res.on('end', () => {
let d = rawData;
if (this._failed === true) {
// Do nothing, it already failed
} else if (this._willfail) {
this._fail(d.toString());
} else {
try {
let release = JSON.parse(d.toString());
if (release.tag_name.slice(1) === current) {
electron.ipcRenderer.send("log", "info", "UpdateChecker: Running latest version.");
} else if (Number(release.tag_name.slice(1).replace(/\./g, "")) < Number(current.replace("-pre", "").replace(/\./g, ""))) {
electron.ipcRenderer.send("log", "info", "UpdateChecker: Running an unreleased, development version.");
} else {
new Modal({
type: "info",
title: "New version available",
message: `eDEX-UI <strong>${release.tag_name}</strong> is now available.<br/>Head over to <a href="#" onclick="require('electron').shell.openExternal('${release.html_url}')">github.com</a> to download the latest version.`
});
electron.ipcRenderer.send("log", "info", `UpdateChecker: New version ${release.tag_name} available.`);
}
} catch(e) {
this._fail(e);
}
}
});
}).on('error', e => {
this._fail(e);
});
}
}
module.exports = {
UpdateChecker
};