aboutsummaryrefslogtreecommitdiff
path: root/src/SelfUpdater/index.js
blob: 5a9baa36f914d69b9c0b1f42a20c4152693c0554 (plain) (blame)
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
let fs = require("fs-extra");
let url = require("url");
let request = require('request');
let exec = require("child_process").exec;
let logger = require(__appdir + "/src/Logger");

let neoModules;

class VersionChecker {

    constructor() {
        this.CPackageJson = JSON.parse(fs.readFileSync(__appdir + "/package.json"));
        this.version = this.CPackageJson["version"];
        this.repoLink = this.CPackageJson["repository"]["url"];

        this.checkFrequency = neoModules.userData.config.SelfUpdater.checkVersionInterval * 86400000;  // Takes in days.
        this.repoBranch = neoModules.userData.config.SelfUpdater.branch;

        this.remotePackageJSON = "https://raw.githubusercontent.com" + url.parse(this.repoLink).pathname + "/" + this.repoBranch + "/package.json";

        this.newVersion = false;
        this.newestVersion = this.checkVersion(this.remotePackageJSON);

        this.updateChecker = setInterval(() => {
            let newVersion = this.checkVersion(this.remotePackageJSON);
        }, this.checkFrequency);

    }

    checkVersion() {
        request.get(this.remotePackageJSON, (error, response, body) => {
            if (!error && response.statusCode === 200) {
                let remotePackageJSON = JSON.parse(body);
                let newestVersion = remotePackageJSON["version"];
                if (this.VersionIsNewerThan(newestVersion, this.version)) {
                    logger.notice("A new version is available on \"" + this.repoBranch + "\" (v" + this.version + ")");
                    this.newVersion = true;
                } else {
                    logger.info(`Running newest version (${newestVersion})`);
                    this.newVersion = false;
                }
                this.newestVersion = newestVersion;
            } else {
                logger.notice("Could not find latest version! Please check you internet connection.");
            }
        });
    }

    VersionIsNewerThan(check, current) {
        let checkParts = check.split(".");
        let currentParts = current.split(".");
        let lCheckParts = checkParts.length;
        let lCurrentParts = currentParts.length;

        for (let i = 0; i < lCheckParts; i++) {
            if (i >= lCurrentParts) { return true; }
            if (Number (checkParts[i]) > Number (currentParts[i])) { return true; }
            if (Number (checkParts[i]) < Number (currentParts[i])) { return false; }
        }
        return false;
    }

}
 
module.exports = (_neoModules) => {
    neoModules = _neoModules;
    return new VersionChecker();
};