2020-09-05 22:50:45 +02:00
|
|
|
/** settings */
|
|
|
|
import appSettings from "./appSettings";
|
|
|
|
let settings = appSettings.getSettings();
|
|
|
|
|
|
|
|
/** Glasstron */
|
|
|
|
if (settings.get("GLASSTRON", true))require("glasstron");
|
|
|
|
|
|
|
|
/** Modules */
|
|
|
|
import * as electron from "electron";
|
|
|
|
import requireNativeDiscordModule from "./requireNative";
|
|
|
|
import autoStart from "./autoStart";
|
|
|
|
import * as buildInfo from "./buildInfo";
|
|
|
|
import * as Constants from "./Constants";
|
|
|
|
import * as GPUSettings from "./GPUSettings";
|
|
|
|
import * as moduleUpdater from "./common/moduleUpdater";
|
|
|
|
import * as paths from "./common/paths";
|
|
|
|
import * as splashScreen from "./splashScreen";
|
|
|
|
import { join } from "path";
|
|
|
|
import { homedir } from "os";
|
|
|
|
|
|
|
|
if (process.platform === "linux") {
|
|
|
|
// Some people are reporting audio problems on Linux that are fixed by setting
|
|
|
|
// an environment variable PULSE_LATENCY_MSEC=30 -- the "real" fix is to see
|
|
|
|
// what conditions require this and set this then (also to set it directly in
|
|
|
|
// our webrtc setup code rather than here) but this should fix the bug for now.
|
|
|
|
if (process.env.PULSE_LATENCY_MSEC === undefined) {
|
|
|
|
process.env.PULSE_LATENCY_MSEC = "30";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
paths.init(buildInfo);
|
|
|
|
electron.app.commandLine.appendSwitch(
|
|
|
|
"autoplay-policy",
|
|
|
|
"no-user-gesture-required"
|
|
|
|
);
|
|
|
|
electron.app.commandLine.appendSwitch("no-force-async-hooks-checks");
|
|
|
|
electron.app.commandLine.appendSwitch("enable-transparent-visuals");
|
|
|
|
|
|
|
|
function setupHardwareAcceleration() {
|
|
|
|
const settings = appSettings.getSettings();
|
|
|
|
// TODO: this is a copy of gpuSettings.getEnableHardwareAcceleration
|
|
|
|
if (!settings.get("enableHardwareAcceleration", true)) {
|
|
|
|
electron.app.disableHardwareAcceleration();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
electron.app.allowRendererProcessReuse = false;
|
|
|
|
|
|
|
|
global["releaseChannel"] = "stable";
|
|
|
|
|
|
|
|
setupHardwareAcceleration();
|
|
|
|
function hasArgvFlag(flag) {
|
|
|
|
return (process.argv || []).slice(1).includes(flag);
|
|
|
|
}
|
|
|
|
|
|
|
|
//Transform main thread into async
|
|
|
|
(async function Main() {
|
|
|
|
await electron.app.whenReady();
|
|
|
|
|
|
|
|
if (process.argv.includes("--should-create-shortcut")) {
|
|
|
|
console.log(`Creating shortcuts.`);
|
|
|
|
if (process.platform === "win32") {
|
|
|
|
let options = {
|
|
|
|
appUserModelId: Constants.APP_ID,
|
|
|
|
description: Constants.packageJSON.description,
|
|
|
|
target: process.execPath,
|
|
|
|
}
|
|
|
|
electron.shell.writeShortcutLink(
|
|
|
|
join(homedir(), "Desktop", "Lightcord.lnk"),
|
|
|
|
"create",
|
|
|
|
options
|
|
|
|
);
|
|
|
|
electron.shell.writeShortcutLink(
|
|
|
|
join(
|
|
|
|
electron.app.getPath("appData"),
|
|
|
|
"Microsoft",
|
|
|
|
"Windows",
|
|
|
|
"Start Menu",
|
|
|
|
"Programs",
|
|
|
|
"Lightcord.lnk"
|
|
|
|
),
|
|
|
|
"create",
|
|
|
|
options
|
|
|
|
);
|
|
|
|
autoStart.isInstalled((installed) => {
|
|
|
|
if(installed)return
|
|
|
|
autoStart.install(console.log)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
console.log(`Initializing Lightcord.`);
|
|
|
|
console.log(`Version: ${buildInfo.version}
|
|
|
|
releaseChannel: ${buildInfo.releaseChannel}
|
|
|
|
commit: ${buildInfo.commit}`);
|
|
|
|
|
|
|
|
electron.app.setAppUserModelId(Constants.APP_ID);
|
|
|
|
|
|
|
|
let coreModule;
|
|
|
|
|
|
|
|
const isFirstInstance = electron.app.requestSingleInstanceLock();
|
|
|
|
const allowMultipleInstances = hasArgvFlag("--multi-instance");
|
|
|
|
if (!isFirstInstance && !allowMultipleInstances) {
|
|
|
|
electron.app.quit();
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!allowMultipleInstances) {
|
|
|
|
electron.app.on("second-instance", (_event, args, _workingDirectory) => {
|
|
|
|
if(args && args[1] === "--overlay-host"){
|
|
|
|
// this is a patch for Lightcord that focus itself when the user is playing a game.
|
|
|
|
//console.warn("OVERLAY HOST DÉTECTÉ. EVENNEMENT IGNORÉ MAIS POURRAIT CAUSER UN PROBLÈME.")
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (coreModule) {
|
|
|
|
coreModule.handleSingleInstance(args);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
const startMinimized = hasArgvFlag("--start-minimized");
|
|
|
|
|
|
|
|
coreModule = requireNativeDiscordModule("discord_desktop_core");
|
|
|
|
coreModule.startup({
|
|
|
|
paths,
|
|
|
|
splashScreen,
|
|
|
|
moduleUpdater,
|
|
|
|
autoStart,
|
|
|
|
buildInfo,
|
|
|
|
appSettings,
|
|
|
|
Constants,
|
|
|
|
GPUSettings,
|
|
|
|
});
|
|
|
|
|
|
|
|
coreModule.setMainWindowVisible(!startMinimized);
|
|
|
|
})();
|