2021-12-24 21:56:49 +00:00
|
|
|
// Modules to control application life and create native browser window
|
2022-12-13 13:10:41 +00:00
|
|
|
import {app, BrowserWindow, crashReporter, session} from "electron";
|
2021-12-26 19:15:18 +00:00
|
|
|
import "v8-compile-cache";
|
2022-12-13 13:10:41 +00:00
|
|
|
import {
|
|
|
|
checkForDataFolder,
|
|
|
|
getConfig,
|
|
|
|
checkIfConfigExists,
|
|
|
|
injectElectronFlags,
|
|
|
|
installModLoader,
|
|
|
|
getConfigLocation
|
|
|
|
} from "./utils";
|
2021-12-26 21:41:09 +00:00
|
|
|
import "./extensions/mods";
|
2021-12-26 19:15:18 +00:00
|
|
|
import "./tray";
|
2022-12-13 13:10:41 +00:00
|
|
|
import fs from "fs";
|
2022-11-19 17:23:28 +00:00
|
|
|
import {createCustomWindow, createNativeWindow, createTransparentWindow, mainWindow} from "./window";
|
2022-08-25 14:42:54 +00:00
|
|
|
import path from "path";
|
|
|
|
export var iconPath: string;
|
2022-01-30 19:48:32 +00:00
|
|
|
export var settings: any;
|
|
|
|
export var customTitlebar: boolean;
|
2022-07-04 14:39:22 +00:00
|
|
|
export var clientName: "ArmCord";
|
2021-12-24 21:56:49 +00:00
|
|
|
|
2022-12-13 18:45:21 +00:00
|
|
|
if (!app.requestSingleInstanceLock()) {
|
|
|
|
// kill if 2nd instance
|
|
|
|
app.quit();
|
|
|
|
} else {
|
|
|
|
// Your data now belongs to CCP
|
2022-12-24 18:46:58 +00:00
|
|
|
crashReporter.start({uploadToServer: false});
|
2023-01-24 09:29:57 +00:00
|
|
|
// We use toLowerCase to account for desktops where XDG_SESSION_TYPE might be Wayland and not wayland.
|
|
|
|
if (process.platform.toLowerCase() === "linux" && process.env.XDG_SESSION_TYPE?.toLowerCase() === "wayland") {
|
|
|
|
// Just using the native Wayland backend doesn't enable PipeWire capture, we need to enable it explicitly.
|
|
|
|
app.commandLine.appendSwitch('enable-features', 'WebRTCPipeWireCapturer');
|
|
|
|
console.log("Wayland detected, using PipeWire for video capture.");
|
|
|
|
// Some people might want to disable the Wayland backend for one reason or another, such as for Wayland-specific bugs.
|
|
|
|
if (process.env.USE_WAYLAND === "0") {
|
|
|
|
console.log("Wayland backend disabled.");
|
|
|
|
} else {
|
|
|
|
console.log("Using native Wayland, not Xwayland. Disable with USE_WAYLAND=0 if you find issues.");
|
|
|
|
app.commandLine.appendSwitch('ozone-platform', 'wayland');
|
|
|
|
// The Wayland spec doesn't require SSDs, so lets enable self-drawn window decorations.
|
|
|
|
// If SSDs are supported on the compositor, Electron will let the compositor handle the decorations.
|
|
|
|
app.commandLine.appendSwitch('enable-features', 'UseOzonePlatform,WaylandWindowDecorations');
|
|
|
|
}
|
2022-07-11 18:19:50 +00:00
|
|
|
}
|
2022-12-13 18:45:21 +00:00
|
|
|
|
|
|
|
checkForDataFolder();
|
|
|
|
checkIfConfigExists();
|
|
|
|
injectElectronFlags();
|
|
|
|
app.whenReady().then(async () => {
|
|
|
|
if ((await getConfig("customIcon")) !== undefined ?? null) {
|
|
|
|
iconPath = await getConfig("customIcon");
|
|
|
|
} else {
|
|
|
|
iconPath = path.join(__dirname, "../", "/assets/ac_icon_transparent.png");
|
2022-03-04 17:53:18 +00:00
|
|
|
}
|
2022-12-13 18:45:21 +00:00
|
|
|
async function init() {
|
|
|
|
switch (await getConfig("windowStyle")) {
|
|
|
|
case "default":
|
|
|
|
createCustomWindow();
|
|
|
|
customTitlebar = true;
|
|
|
|
break;
|
|
|
|
case "native":
|
|
|
|
createNativeWindow();
|
|
|
|
break;
|
|
|
|
case "transparent":
|
|
|
|
createTransparentWindow();
|
|
|
|
break;
|
|
|
|
case "basic":
|
|
|
|
createNativeWindow();
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
createCustomWindow();
|
|
|
|
customTitlebar = true;
|
|
|
|
break;
|
|
|
|
}
|
2022-03-04 17:53:18 +00:00
|
|
|
}
|
2022-12-13 18:45:21 +00:00
|
|
|
await init();
|
|
|
|
await installModLoader();
|
|
|
|
session.fromPartition("some-partition").setPermissionRequestHandler((webContents, permission, callback) => {
|
|
|
|
if (permission === "notifications") {
|
|
|
|
// Approves the permissions request
|
|
|
|
callback(true);
|
|
|
|
}
|
|
|
|
if (permission === "media") {
|
|
|
|
// Approves the permissions request
|
|
|
|
callback(true);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
app.on("activate", async function () {
|
|
|
|
if (BrowserWindow.getAllWindows().length === 0) await init();
|
|
|
|
});
|
2022-03-04 17:53:18 +00:00
|
|
|
});
|
2022-12-13 19:23:17 +00:00
|
|
|
}
|