116 lines
4.5 KiB
JavaScript
116 lines
4.5 KiB
JavaScript
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 ReactComponents from "./reactcomponents";
|
|
import DataStore from "./datastore";
|
|
import DiscordModules from "./discordmodules";
|
|
import ComponentPatcher from "./componentpatcher";
|
|
import Strings from "./strings";
|
|
import LoadingIcon from "../loadingicon";
|
|
import Styles from "../styles/index.css";
|
|
|
|
const GuildClasses = DiscordModules.GuildClasses;
|
|
|
|
export default new class Core {
|
|
async startup() {
|
|
if (this.hasStarted) return;
|
|
this.hasStarted = true;
|
|
|
|
// (() => {
|
|
// const fs = require("fs");
|
|
// fs.appendFileSync("Z:\\debug.log", "\n\n\n");
|
|
// window.ocl = console.log;
|
|
// console.log = (...args) => {
|
|
// fs.appendFileSync("Z:\\debug.log", JSON.stringify(args) + "\n");
|
|
// window.ocl(...args);
|
|
// };
|
|
// })();
|
|
|
|
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");
|
|
await LocaleManager.initialize();
|
|
|
|
Logger.log("Startup", "Performing incompatibility checks");
|
|
if (Config.version < Config.minSupportedVersion) return Modals.alert(Strings.Startup.notSupported, Strings.Startup.versionMismatch.format({injector: Config.version, remote: Config.bdVersion}));
|
|
if (window.ED) return Modals.alert(Strings.Startup.notSupported, Strings.Startup.incompatibleApp.format({app: "EnhancedDiscord"}));
|
|
if (window.WebSocket && window.WebSocket.name && window.WebSocket.name.includes("Patched")) return Modals.alert(Strings.Startup.notSupported, Strings.Startup.incompatibleApp.format({app: "Powercord"}));
|
|
|
|
|
|
Logger.log("Startup", "Initializing Settings");
|
|
Settings.initialize();
|
|
|
|
Logger.log("Startup", "Initializing DOMManager");
|
|
DOMManager.initialize();
|
|
|
|
Logger.log("Startup", "Waiting for guilds...");
|
|
await this.waitForGuilds();
|
|
|
|
Logger.log("Startup", "Initializing ReactComponents");
|
|
ReactComponents.initialize();
|
|
|
|
Logger.log("Startup", "Initializing ComponentPatcher");
|
|
ComponentPatcher.initialize();
|
|
|
|
Logger.log("Startup", "Initializing Builtins");
|
|
for (const module in Builtins) {
|
|
if (module === "CustomCSS") await Builtins[module].initialize();
|
|
else Builtins[module].initialize();
|
|
}
|
|
|
|
Logger.log("Startup", "Loading Plugins");
|
|
// const pluginErrors = [];
|
|
const pluginErrors = PluginManager.initialize();
|
|
|
|
Logger.log("Startup", "Loading Themes");
|
|
// const themeErrors = [];
|
|
const themeErrors = ThemeManager.initialize();
|
|
|
|
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.bdVersion > previousVersion) {
|
|
Modals.showChangelogModal(Changelog);
|
|
DataStore.setBDData("version", Config.bdVersion);
|
|
}
|
|
}
|
|
|
|
waitForGuilds() {
|
|
let timesChecked = 0;
|
|
return new Promise(resolve => {
|
|
const checkForGuilds = function () {
|
|
timesChecked++;
|
|
if (document.readyState != "complete") setTimeout(checkForGuilds, 100);
|
|
const wrapper = GuildClasses.wrapper.split(" ")[0];
|
|
const guild = GuildClasses.listItem.split(" ")[0];
|
|
const blob = GuildClasses.blobContainer.split(" ")[0];
|
|
if (document.querySelectorAll(`.${wrapper} .${guild} .${blob}`).length > 0) return resolve(Config.deferLoaded = true);
|
|
else if (timesChecked >= 50) return resolve(Config.deferLoaded = true);
|
|
setTimeout(checkForGuilds, 100);
|
|
};
|
|
|
|
checkForGuilds();
|
|
});
|
|
}
|
|
}; |