2018-02-14 21:15:27 +01:00
|
|
|
/**
|
|
|
|
* BetterDiscord Updater Module
|
|
|
|
* Copyright (c) 2015-present Jiiks/JsSucks - https://github.com/Jiiks / https://github.com/JsSucks
|
|
|
|
* All rights reserved.
|
|
|
|
* https://betterdiscord.net
|
|
|
|
*
|
|
|
|
* This source code is licensed under the MIT license found in the
|
|
|
|
* LICENSE file in the root directory of this source tree.
|
|
|
|
*/
|
|
|
|
|
|
|
|
import Events from './events';
|
|
|
|
import Globals from './globals';
|
|
|
|
import { ClientLogger as Logger } from 'common';
|
2018-07-07 19:53:16 +02:00
|
|
|
import request from 'request-promise-native';
|
2018-02-14 21:15:27 +01:00
|
|
|
|
2018-03-21 16:57:10 +01:00
|
|
|
export default new class {
|
2018-02-14 21:15:27 +01:00
|
|
|
|
|
|
|
constructor() {
|
2018-02-15 00:01:52 +01:00
|
|
|
this.updatesAvailable = false;
|
2018-03-21 23:24:23 +01:00
|
|
|
this.latestVersion = undefined;
|
|
|
|
this.error = undefined;
|
|
|
|
|
2018-02-14 21:15:27 +01:00
|
|
|
this.init = this.init.bind(this);
|
|
|
|
this.checkForUpdates = this.checkForUpdates.bind(this);
|
|
|
|
}
|
|
|
|
|
2018-03-21 00:24:31 +01:00
|
|
|
/**
|
|
|
|
* The interval to wait before checking for updates.
|
|
|
|
*/
|
2018-02-14 21:15:27 +01:00
|
|
|
get interval() {
|
|
|
|
return 60 * 1000 * 30;
|
|
|
|
}
|
|
|
|
|
|
|
|
init() {
|
2018-02-15 00:05:12 +01:00
|
|
|
this.updateInterval = setInterval(this.checkForUpdates, this.interval);
|
2018-02-14 21:15:27 +01:00
|
|
|
}
|
|
|
|
|
2018-03-21 00:24:31 +01:00
|
|
|
/**
|
|
|
|
* Installs an update.
|
|
|
|
* TODO
|
|
|
|
*/
|
2018-03-21 23:24:23 +01:00
|
|
|
async update() {
|
|
|
|
try {
|
|
|
|
await new Promise(resolve => setTimeout(resolve, 5000));
|
|
|
|
|
|
|
|
this.updatesAvailable = false;
|
|
|
|
this.latestVersion = Globals.version;
|
|
|
|
Events.emit('update-check-end');
|
|
|
|
} catch (err) {
|
|
|
|
this.error = err;
|
|
|
|
this.checkForUpdates();
|
|
|
|
throw err;
|
|
|
|
}
|
2018-02-15 00:01:52 +01:00
|
|
|
}
|
|
|
|
|
2018-03-21 00:24:31 +01:00
|
|
|
/**
|
|
|
|
* Checks for updates.
|
|
|
|
* @return {Promise}
|
|
|
|
*/
|
2018-07-07 14:48:45 +02:00
|
|
|
async checkForUpdates() {
|
|
|
|
if (this.updatesAvailable) return true;
|
|
|
|
Events.emit('update-check-start');
|
|
|
|
Logger.info('Updater', 'Checking for updates');
|
2018-03-21 00:24:31 +01:00
|
|
|
|
2018-07-07 14:48:45 +02:00
|
|
|
try {
|
2018-07-07 23:04:41 +02:00
|
|
|
const response = await request({
|
|
|
|
uri: 'https://rawgit.com/JsSucks/BetterDiscordApp/master/package.json',
|
|
|
|
json: true
|
|
|
|
});
|
2018-07-07 14:48:45 +02:00
|
|
|
|
2018-07-07 19:53:16 +02:00
|
|
|
this.latestVersion = response.version;
|
2018-07-07 14:48:45 +02:00
|
|
|
Events.emit('update-check-end');
|
2018-07-07 19:53:16 +02:00
|
|
|
Logger.info('Updater', `Latest Version: ${response.version} - Current Version: ${Globals.version}`);
|
2018-03-21 00:24:31 +01:00
|
|
|
|
2018-07-07 14:48:45 +02:00
|
|
|
if (this.latestVersion !== Globals.version) {
|
|
|
|
this.updatesAvailable = true;
|
|
|
|
Events.emit('updates-available');
|
|
|
|
return true;
|
|
|
|
}
|
2018-03-21 00:24:31 +01:00
|
|
|
|
2018-07-07 14:48:45 +02:00
|
|
|
return false;
|
|
|
|
} catch (err) {
|
|
|
|
Events.emit('update-check-fail', err);
|
|
|
|
throw err;
|
|
|
|
}
|
2018-02-14 21:15:27 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|