2021-12-16 16:52:25 +00:00
|
|
|
const { app, BrowserWindow } = require('electron');
|
|
|
|
const { readFileSync } = require('fs');
|
|
|
|
const { join } = require('path');
|
2021-12-09 16:25:14 +00:00
|
|
|
|
2022-01-30 19:15:56 +00:00
|
|
|
const Constants = require('./Constants');
|
2022-01-13 17:33:27 +00:00
|
|
|
|
2022-02-15 21:52:32 +00:00
|
|
|
process.env.PULSE_LATENCY_MSEC = process.env.PULSE_LATENCY_MSEC ?? 30;
|
|
|
|
app.setAppUserModelId(Constants.APP_ID);
|
2022-01-30 19:15:56 +00:00
|
|
|
app.name = 'discord'; // Force name as sometimes breaks
|
2021-12-10 21:31:40 +00:00
|
|
|
|
2021-12-09 16:25:14 +00:00
|
|
|
const paths = require('./paths');
|
2021-12-10 18:37:50 +00:00
|
|
|
global.moduleDataPath = paths.getModuleDataPath(); // Global because discord
|
2021-12-11 12:41:08 +00:00
|
|
|
app.setPath('userData', paths.getUserData()); // Set userData properly because electron
|
2021-12-10 18:37:50 +00:00
|
|
|
|
2021-12-09 16:25:14 +00:00
|
|
|
const buildInfo = require('./utils/buildInfo');
|
2021-12-10 18:37:50 +00:00
|
|
|
app.setVersion(buildInfo.version); // More global because discord / electron
|
2021-12-11 11:11:42 +00:00
|
|
|
global.releaseChannel = buildInfo.releaseChannel;
|
2021-12-09 16:25:14 +00:00
|
|
|
|
2021-12-09 19:26:22 +00:00
|
|
|
log('BuildInfo', 'Loaded build info', buildInfo);
|
|
|
|
|
2021-12-11 19:51:36 +00:00
|
|
|
const errorHandler = require('./errorHandler');
|
|
|
|
errorHandler.init();
|
|
|
|
|
2022-01-28 20:47:31 +00:00
|
|
|
const splashScreen = require('./splash');
|
2022-02-14 08:26:33 +00:00
|
|
|
const appSettings = require('./appSettings');
|
2021-12-09 16:25:14 +00:00
|
|
|
|
|
|
|
const updater = require('./updater/updater');
|
|
|
|
const moduleUpdater = require('./updater/moduleUpdater');
|
|
|
|
const appUpdater = require('./updater/appUpdater');
|
|
|
|
|
2021-12-10 14:21:35 +00:00
|
|
|
const settings = appSettings.getSettings();
|
|
|
|
if (!settings.get('enableHardwareAcceleration', true)) app.disableHardwareAcceleration();
|
|
|
|
|
2021-12-09 16:25:14 +00:00
|
|
|
let desktopCore;
|
|
|
|
const startCore = () => {
|
2022-02-11 08:43:44 +00:00
|
|
|
desktopCore = require('discord_desktop_core');
|
2022-02-14 08:26:33 +00:00
|
|
|
log('Bootstrap', 'Required core');
|
2021-12-09 16:25:14 +00:00
|
|
|
|
|
|
|
desktopCore.startup({
|
|
|
|
paths,
|
|
|
|
splashScreen,
|
|
|
|
moduleUpdater,
|
|
|
|
buildInfo,
|
|
|
|
appSettings,
|
|
|
|
Constants,
|
|
|
|
updater,
|
2022-02-14 08:26:33 +00:00
|
|
|
GPUSettings: require('./GPUSettings'),
|
|
|
|
autoStart: require('./autoStart'),
|
|
|
|
crashReporterSetup: require('./crashReporterSetup'),
|
2021-12-09 16:25:14 +00:00
|
|
|
});
|
2021-12-16 16:52:25 +00:00
|
|
|
|
|
|
|
const i = setImmediate(() => {
|
|
|
|
if (!global.mainWindowId) return;
|
|
|
|
clearInterval(i);
|
|
|
|
|
|
|
|
const bw = BrowserWindow.fromId(global.mainWindowId);
|
|
|
|
|
2021-12-27 22:51:22 +00:00
|
|
|
let donePageReady = false;
|
2021-12-16 16:52:25 +00:00
|
|
|
bw.webContents.on('dom-ready', () => {
|
2021-12-27 22:51:22 +00:00
|
|
|
if (!donePageReady) { // Only run once
|
|
|
|
splashScreen.pageReady(); // Override Core's pageReady with our own on dom-ready to show main window earlier
|
|
|
|
donePageReady = true;
|
|
|
|
}
|
2021-12-18 21:56:13 +00:00
|
|
|
|
2021-12-17 23:00:33 +00:00
|
|
|
let injectJs = readFileSync(join(__dirname, 'mainWindowInject.js'), 'utf8');
|
|
|
|
|
|
|
|
const [ version1, version2 ] = oaVersion.split('-'); // Split via -
|
2021-12-26 17:47:04 +00:00
|
|
|
injectJs = injectJs
|
|
|
|
.replaceAll('<oa_version_channel>', version1[0].toUpperCase() + version1.substring(1).toLowerCase())
|
2022-03-09 22:24:15 +00:00
|
|
|
.replaceAll('<oa_version_hash>', version2 || 'custom');
|
2021-12-17 23:00:33 +00:00
|
|
|
|
|
|
|
bw.webContents.executeJavaScript(injectJs);
|
2021-12-16 16:52:25 +00:00
|
|
|
});
|
|
|
|
});
|
2021-12-09 16:25:14 +00:00
|
|
|
};
|
|
|
|
|
2022-02-15 21:52:32 +00:00
|
|
|
const startUpdate = async () => {
|
2022-01-28 20:52:45 +00:00
|
|
|
const startMinimized = process.argv.includes('--start-minimized');
|
2021-12-26 17:48:09 +00:00
|
|
|
|
2022-02-02 18:35:54 +00:00
|
|
|
paths.cleanOldVersions();
|
|
|
|
|
2021-12-26 17:48:09 +00:00
|
|
|
appUpdater.update(startMinimized, () => {
|
2022-02-12 14:35:46 +00:00
|
|
|
if (process.env.OPENASAR_NOSTART) return;
|
2021-12-12 11:45:25 +00:00
|
|
|
|
2021-12-09 16:25:14 +00:00
|
|
|
startCore();
|
|
|
|
}, () => {
|
2022-02-14 08:26:33 +00:00
|
|
|
log('Bootstrap', 'Main window visible');
|
2021-12-26 17:48:09 +00:00
|
|
|
desktopCore.setMainWindowVisible(!startMinimized);
|
2021-12-11 09:59:39 +00:00
|
|
|
|
|
|
|
setTimeout(() => { // Try to update our asar
|
2021-12-11 13:28:47 +00:00
|
|
|
if (oaConfig.autoupdate === false) return; // If autoupdate disabled, don't update
|
2021-12-11 09:59:39 +00:00
|
|
|
|
|
|
|
const asarUpdate = require('./asarUpdate');
|
|
|
|
|
|
|
|
try {
|
|
|
|
asarUpdate();
|
|
|
|
} catch (e) {
|
2022-02-12 14:35:46 +00:00
|
|
|
log('AsarUpdate', 'Failed', e);
|
2021-12-11 09:59:39 +00:00
|
|
|
}
|
|
|
|
}, 1000);
|
2021-12-09 16:25:14 +00:00
|
|
|
});
|
|
|
|
};
|
|
|
|
|
2021-12-11 10:37:43 +00:00
|
|
|
|
2021-12-09 16:25:14 +00:00
|
|
|
module.exports = () => {
|
2022-02-03 21:38:00 +00:00
|
|
|
if (!app.requestSingleInstanceLock() && !(process.argv.includes('--multi-instance') || oaConfig.multiInstance === true)) {
|
2022-02-12 14:35:46 +00:00
|
|
|
log('Bootstrap', 'Non-first instance');
|
2021-12-11 10:37:43 +00:00
|
|
|
return app.quit();
|
|
|
|
}
|
|
|
|
|
2021-12-09 16:25:14 +00:00
|
|
|
if (app.isReady()) {
|
|
|
|
startUpdate();
|
|
|
|
} else {
|
|
|
|
app.once('ready', startUpdate);
|
|
|
|
}
|
2022-01-21 12:47:23 +00:00
|
|
|
};
|