mirror of
https://github.com/bitburner-official/bitburner-src.git
synced 2024-11-12 18:53:55 +01:00
bf1a2b56ba
I messed up the handlers reference in the last commit so the events were not properly attached. Changed it to use global variables for now.
69 lines
2.0 KiB
JavaScript
69 lines
2.0 KiB
JavaScript
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
const { app, dialog } = require("electron");
|
|
const log = require("electron-log");
|
|
|
|
const achievements = require("./achievements");
|
|
const api = require("./api-server");
|
|
|
|
function reloadAndKill(window, killScripts) {
|
|
const setStopProcessHandler = global.app_handlers.stopProcess
|
|
const createWindowHandler = global.app_handlers.createWindow;
|
|
|
|
log.info('Reloading & Killing all scripts...');
|
|
setStopProcessHandler(app, window, false);
|
|
|
|
achievements.disableAchievementsInterval(window);
|
|
api.disable();
|
|
|
|
window.webContents.forcefullyCrashRenderer();
|
|
window.on('closed', () => {
|
|
// Wait for window to be closed before opening the new one to prevent race conditions
|
|
log.debug('Opening new window');
|
|
createWindowHandler(killScripts);
|
|
})
|
|
|
|
window.close();
|
|
}
|
|
|
|
function promptForReload(window) {
|
|
detachUnresponsiveAppHandler(window);
|
|
dialog.showMessageBox({
|
|
type: 'error',
|
|
title: 'Bitburner > Application Unresponsive',
|
|
message: 'The application is unresponsive, possibly due to an infinite loop in your scripts.',
|
|
detail:' Did you forget a ns.sleep(x)?\n\n' +
|
|
'The application will be restarted for you, do you want to kill all running scripts?',
|
|
buttons: ['Restart', 'Cancel'],
|
|
defaultId: 0,
|
|
checkboxLabel: 'Kill all running scripts',
|
|
checkboxChecked: true,
|
|
noLink: true,
|
|
}).then(({response, checkboxChecked}) => {
|
|
if (response === 0) {
|
|
reloadAndKill(window, checkboxChecked);
|
|
} else {
|
|
attachUnresponsiveAppHandler(window);
|
|
}
|
|
});
|
|
}
|
|
|
|
function attachUnresponsiveAppHandler(window) {
|
|
window.on('unresponsive', () => promptForReload(window));
|
|
}
|
|
|
|
function detachUnresponsiveAppHandler(window) {
|
|
window.off('unresponsive', () => promptForReload(window));
|
|
}
|
|
|
|
function showErrorBox(title, error) {
|
|
dialog.showErrorBox(
|
|
title,
|
|
`${error.name}\n\n${error.message}`
|
|
);
|
|
}
|
|
|
|
module.exports = {
|
|
reloadAndKill, showErrorBox,
|
|
attachUnresponsiveAppHandler, detachUnresponsiveAppHandler,
|
|
}
|