mirror of
https://github.com/finos/SymphonyElectron.git
synced 2025-02-25 18:55:29 -06:00
SDA-2731: reload app if stuck on white screen (#1138)
This commit is contained in:
parent
6a275aee52
commit
9bcd21e113
@ -84,6 +84,9 @@ export interface ICustomBrowserWindow extends Electron.BrowserWindow {
|
|||||||
let DEFAULT_WIDTH: number = 900;
|
let DEFAULT_WIDTH: number = 900;
|
||||||
let DEFAULT_HEIGHT: number = 900;
|
let DEFAULT_HEIGHT: number = 900;
|
||||||
|
|
||||||
|
// Timeout on restarting SDA in case it's stuck
|
||||||
|
const LISTEN_TIMEOUT: number = 25 * 1000;
|
||||||
|
|
||||||
export class WindowHandler {
|
export class WindowHandler {
|
||||||
/**
|
/**
|
||||||
* Verifies if the url is valid and
|
* Verifies if the url is valid and
|
||||||
@ -134,6 +137,8 @@ export class WindowHandler {
|
|||||||
private notificationSettingsWindow: Electron.BrowserWindow | null = null;
|
private notificationSettingsWindow: Electron.BrowserWindow | null = null;
|
||||||
private snippingToolWindow: Electron.BrowserWindow | null = null;
|
private snippingToolWindow: Electron.BrowserWindow | null = null;
|
||||||
|
|
||||||
|
private finishedLoading: boolean;
|
||||||
|
|
||||||
constructor(opts?: Electron.BrowserViewConstructorOptions) {
|
constructor(opts?: Electron.BrowserViewConstructorOptions) {
|
||||||
// Use these variables only on initial setup
|
// Use these variables only on initial setup
|
||||||
this.config = config.getConfigFields([
|
this.config = config.getConfigFields([
|
||||||
@ -194,6 +199,8 @@ export class WindowHandler {
|
|||||||
this.isAutoReload = false;
|
this.isAutoReload = false;
|
||||||
this.isOnline = true;
|
this.isOnline = true;
|
||||||
|
|
||||||
|
this.finishedLoading = false;
|
||||||
|
|
||||||
this.screenShareIndicatorFrameUtil = '';
|
this.screenShareIndicatorFrameUtil = '';
|
||||||
if (isWindowsOS) {
|
if (isWindowsOS) {
|
||||||
this.screenShareIndicatorFrameUtil = isDevEnv
|
this.screenShareIndicatorFrameUtil = isDevEnv
|
||||||
@ -238,6 +245,8 @@ export class WindowHandler {
|
|||||||
} catch (e) {
|
} catch (e) {
|
||||||
throw new Error('failed to init crash report');
|
throw new Error('failed to init crash report');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.listenForLoad();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -440,7 +449,14 @@ export class WindowHandler {
|
|||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
this.finishedLoading = true;
|
||||||
this.url = this.mainWindow.webContents.getURL();
|
this.url = this.mainWindow.webContents.getURL();
|
||||||
|
if (this.url.indexOf('about:blank') === 0) {
|
||||||
|
logger.info(`Looks like about:blank got loaded which may lead to blank screen`);
|
||||||
|
logger.info(`Reloading the app to check if it resolves the issue`);
|
||||||
|
await this.mainWindow.loadURL(this.userConfig.url || this.globalConfig.url);
|
||||||
|
return;
|
||||||
|
}
|
||||||
logger.info('window-handler: did-finish-load, url: ' + this.url);
|
logger.info('window-handler: did-finish-load, url: ' + this.url);
|
||||||
|
|
||||||
// Injects custom title bar and snack bar css into the webContents
|
// Injects custom title bar and snack bar css into the webContents
|
||||||
@ -663,6 +679,7 @@ export class WindowHandler {
|
|||||||
if (!this.url || !this.mainWindow) {
|
if (!this.url || !this.mainWindow) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
logger.info(`finished loading welcome screen.`);
|
||||||
if (this.url.indexOf('welcome')) {
|
if (this.url.indexOf('welcome')) {
|
||||||
this.mainWindow.webContents.send('page-load-welcome', {
|
this.mainWindow.webContents.send('page-load-welcome', {
|
||||||
locale: i18n.getLocale(),
|
locale: i18n.getLocale(),
|
||||||
@ -970,8 +987,8 @@ export class WindowHandler {
|
|||||||
const parentWindow = BrowserWindow.getFocusedWindow();
|
const parentWindow = BrowserWindow.getFocusedWindow();
|
||||||
// Prevents creating multiple instances
|
// Prevents creating multiple instances
|
||||||
if (didVerifyAndRestoreWindow(this.snippingToolWindow) || !parentWindow) {
|
if (didVerifyAndRestoreWindow(this.snippingToolWindow) || !parentWindow) {
|
||||||
return;
|
|
||||||
logger.error('window-handler: Could not open snipping tool window');
|
logger.error('window-handler: Could not open snipping tool window');
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const OS_PADDING = 25;
|
const OS_PADDING = 25;
|
||||||
@ -1582,6 +1599,23 @@ export class WindowHandler {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Listens for app load timeouts and reloads if required
|
||||||
|
*/
|
||||||
|
private listenForLoad() {
|
||||||
|
setTimeout(async () => {
|
||||||
|
if (!this.finishedLoading) {
|
||||||
|
logger.info(`window-handler: Pod load failed on launch`);
|
||||||
|
if (this.mainWindow && windowExists(this.mainWindow)) {
|
||||||
|
logger.info(`window-handler: Trying to reload.`);
|
||||||
|
await this.mainWindow.loadURL(this.url || this.userConfig.url || this.globalConfig.url);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
logger.error(`window-handler: Cannot reload as main window does not exist`);
|
||||||
|
}
|
||||||
|
}, LISTEN_TIMEOUT);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the about panel details for macOS
|
* Sets the about panel details for macOS
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user