BetterDiscordApp-rauenzi/renderer/src/modules/core.js

147 lines
5.5 KiB
JavaScript
Raw Normal View History

const path = require("path");
import LocaleManager from "./localemanager";
import Logger from "common/logger";
import {Config, Changelog} from "data";
import DOMManager from "./dommanager";
import PluginManager from "./pluginmanager";
import ThemeManager from "./thememanager";
import Settings from "./settingsmanager";
import * as Builtins from "builtins";
import Modals from "../ui/modals";
import DataStore from "./datastore";
import DiscordModules from "./discordmodules";
import Strings from "./strings";
import IPC from "./ipc";
import LoadingIcon from "../loadingicon";
import Styles from "../styles/index.css";
import Editor from "./editor";
2022-10-03 10:40:18 +02:00
import Updater from "./updater";
export default new class Core {
async startup() {
if (this.hasStarted) return;
this.hasStarted = true;
Config.appPath = process.env.DISCORD_APP_PATH;
Config.userData = process.env.DISCORD_USER_DATA;
Config.dataPath = process.env.BETTERDISCORD_DATA_PATH;
// Load css early
Logger.log("Startup", "Injecting BD Styles");
DOMManager.injectStyle("bd-stylesheet", Styles.toString());
Logger.log("Startup", "Initializing DataStore");
DataStore.initialize();
Logger.log("Startup", "Initializing LocaleManager");
2021-04-08 02:31:02 +02:00
LocaleManager.initialize();
2021-04-17 01:28:34 +02:00
Logger.log("Startup", "Getting update information");
2021-04-08 02:31:02 +02:00
this.checkForUpdate();
Logger.log("Startup", "Initializing Settings");
Settings.initialize();
Logger.log("Startup", "Initializing DOMManager");
DOMManager.initialize();
2021-11-14 06:53:45 +01:00
Logger.log("Startup", "Waiting for connection...");
await this.waitForConnection();
Logger.log("Startup", "Initializing Editor");
await Editor.initialize();
Modals.initialize();
Logger.log("Startup", "Initializing Builtins");
for (const module in Builtins) {
Builtins[module].initialize();
}
2022-09-27 05:33:51 +02:00
Logger.log("Startup", "Loading Plugins");
// const pluginErrors = [];
const pluginErrors = PluginManager.initialize();
Logger.log("Startup", "Loading Themes");
// const themeErrors = [];
const themeErrors = ThemeManager.initialize();
2022-10-03 10:40:18 +02:00
Logger.log("Startup", "Initializing Updater");
Updater.initialize();
2022-09-29 07:04:22 +02:00
Logger.log("Startup", "Removing Loading Icon");
LoadingIcon.hide();
// Show loading errors
Logger.log("Startup", "Collecting Startup Errors");
Modals.showAddonErrors({plugins: pluginErrors, themes: themeErrors});
const previousVersion = DataStore.getBDData("version");
if (Config.version > previousVersion) {
2022-10-09 19:49:29 +02:00
Modals.showChangelogModal(Changelog);
DataStore.setBDData("version", Config.version);
}
}
2021-11-14 06:53:45 +01:00
waitForConnection() {
return new Promise(done => {
if (DiscordModules.UserStore.getCurrentUser()) return done();
DiscordModules.Dispatcher.subscribe("CONNECTION_OPEN", done);
});
}
async checkForUpdate() {
2021-07-09 08:05:58 +02:00
const resp = await fetch(`https://api.github.com/repos/BetterDiscord/BetterDiscord/releases/latest`,{
method: "GET",
headers: {
"Accept": "application/json",
"Content-Type": "application/json",
"User-Agent": "BetterDiscord Updater"
}
});
const data = await resp.json();
2021-04-08 02:31:02 +02:00
Object.assign(Config.release, data);
const remoteVersion = data.tag_name.startsWith("v") ? data.tag_name.slice(1) : data.tag_name;
const hasUpdate = remoteVersion > Config.version;
if (!hasUpdate) return;
2021-04-17 01:28:34 +02:00
// TODO: move to strings file when updater is complete.
Modals.showConfirmationModal("Update Available", `BetterDiscord (v${Config.version}) has an update available (v${remoteVersion}). Would you like to update now?`, {
confirmText: "Update Now!",
cancelText: "Skip",
onConfirm: () => this.update(data)
});
}
async update(releaseInfo) {
try {
const asar = releaseInfo.assets.find(a => a.name === "betterdiscord.asar");
const request = require("request");
const buff = await new Promise((resolve, reject) =>
2021-04-06 08:03:08 +02:00
request(asar.url, {encoding: null, headers: {"User-Agent": "BetterDiscord Updater", "Accept": "application/octet-stream"}}, (err, resp, body) => {
if (err || resp.statusCode != 200) return reject(err || `${resp.statusCode} ${resp.statusMessage}`);
return resolve(body);
}));
const asarPath = path.join(DataStore.baseFolder, "betterdiscord.asar");
const fs = require("original-fs");
fs.writeFileSync(asarPath, buff);
Modals.showConfirmationModal("Update Successful!", "BetterDiscord updated successfully. Discord needs to restart in order for it to take effect. Do you want to do this now?", {
confirmText: Strings.Modals.restartNow,
cancelText: Strings.Modals.restartLater,
danger: true,
onConfirm: () => IPC.relaunch()
});
}
catch (err) {
2021-04-06 08:03:08 +02:00
Logger.stacktrace("Updater", "Failed to update", err);
Modals.showConfirmationModal("Update Failed", "BetterDiscord failed to update. Please download the latest version of the installer from GitHub (https://github.com/BetterDiscord/Installer/releases/latest) and reinstall.", {
2021-04-06 20:09:43 +02:00
cancelText: null
});
}
}
};