@theia/core 1.50.1 → 1.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -7
- package/i18n/nls.cs.json +4 -7
- package/i18n/nls.de.json +4 -7
- package/i18n/nls.es.json +4 -7
- package/i18n/nls.fr.json +4 -7
- package/i18n/nls.hu.json +4 -7
- package/i18n/nls.it.json +4 -7
- package/i18n/nls.ja.json +4 -7
- package/i18n/nls.json +4 -7
- package/i18n/nls.pl.json +4 -7
- package/i18n/nls.pt-br.json +4 -7
- package/i18n/nls.pt-pt.json +4 -7
- package/i18n/nls.ru.json +4 -7
- package/i18n/nls.zh-cn.json +4 -7
- package/lib/browser/authentication-service.d.ts +6 -3
- package/lib/browser/authentication-service.d.ts.map +1 -1
- package/lib/browser/authentication-service.js +11 -1
- package/lib/browser/authentication-service.js.map +1 -1
- package/lib/browser/browser.d.ts +6 -1
- package/lib/browser/browser.d.ts.map +1 -1
- package/lib/browser/browser.js +7 -2
- package/lib/browser/browser.js.map +1 -1
- package/lib/browser/common-frontend-contribution.d.ts.map +1 -1
- package/lib/browser/common-frontend-contribution.js +6 -5
- package/lib/browser/common-frontend-contribution.js.map +1 -1
- package/lib/browser/frontend-application-module.d.ts.map +1 -1
- package/lib/browser/frontend-application-module.js +3 -3
- package/lib/browser/frontend-application-module.js.map +1 -1
- package/lib/browser/http-open-handler.d.ts +1 -0
- package/lib/browser/http-open-handler.d.ts.map +1 -1
- package/lib/browser/http-open-handler.js +5 -3
- package/lib/browser/http-open-handler.js.map +1 -1
- package/lib/browser/menu/browser-menu-plugin.d.ts +2 -1
- package/lib/browser/menu/browser-menu-plugin.d.ts.map +1 -1
- package/lib/browser/menu/browser-menu-plugin.js +22 -19
- package/lib/browser/menu/browser-menu-plugin.js.map +1 -1
- package/lib/browser/messaging/service-connection-provider.d.ts +15 -1
- package/lib/browser/messaging/service-connection-provider.d.ts.map +1 -1
- package/lib/browser/messaging/service-connection-provider.js +15 -1
- package/lib/browser/messaging/service-connection-provider.js.map +1 -1
- package/lib/browser/saveable.d.ts +14 -1
- package/lib/browser/saveable.d.ts.map +1 -1
- package/lib/browser/saveable.js +10 -1
- package/lib/browser/saveable.js.map +1 -1
- package/lib/browser/shell/additional-views-menu-widget.d.ts +2 -2
- package/lib/browser/shell/additional-views-menu-widget.d.ts.map +1 -1
- package/lib/browser/shell/additional-views-menu-widget.js +8 -4
- package/lib/browser/shell/additional-views-menu-widget.js.map +1 -1
- package/lib/browser/shell/application-shell.d.ts +7 -2
- package/lib/browser/shell/application-shell.d.ts.map +1 -1
- package/lib/browser/shell/application-shell.js +14 -1
- package/lib/browser/shell/application-shell.js.map +1 -1
- package/lib/browser/shell/side-panel-handler.d.ts.map +1 -1
- package/lib/browser/shell/side-panel-handler.js +2 -1
- package/lib/browser/shell/side-panel-handler.js.map +1 -1
- package/lib/browser/shell/sidebar-menu-widget.d.ts +14 -1
- package/lib/browser/shell/sidebar-menu-widget.d.ts.map +1 -1
- package/lib/browser/shell/sidebar-menu-widget.js +51 -13
- package/lib/browser/shell/sidebar-menu-widget.js.map +1 -1
- package/lib/browser/shell/split-panels.d.ts +1 -1
- package/lib/browser/shell/split-panels.d.ts.map +1 -1
- package/lib/browser/shell/split-panels.js +4 -3
- package/lib/browser/shell/split-panels.js.map +1 -1
- package/lib/browser/shell/tab-bars.d.ts +5 -4
- package/lib/browser/shell/tab-bars.d.ts.map +1 -1
- package/lib/browser/shell/tab-bars.js +41 -52
- package/lib/browser/shell/tab-bars.js.map +1 -1
- package/lib/browser/shell/theia-dock-panel.d.ts +7 -1
- package/lib/browser/shell/theia-dock-panel.d.ts.map +1 -1
- package/lib/browser/shell/theia-dock-panel.js +5 -1
- package/lib/browser/shell/theia-dock-panel.js.map +1 -1
- package/lib/browser/widget-manager.d.ts +2 -1
- package/lib/browser/widget-manager.d.ts.map +1 -1
- package/lib/browser/widget-manager.js +16 -9
- package/lib/browser/widget-manager.js.map +1 -1
- package/lib/browser/widget-open-handler.js +1 -1
- package/lib/browser/widget-open-handler.js.map +1 -1
- package/lib/browser/widgets/react-renderer.d.ts.map +1 -1
- package/lib/browser/widgets/react-renderer.js +4 -1
- package/lib/browser/widgets/react-renderer.js.map +1 -1
- package/lib/browser-only/frontend-only-application-module.d.ts.map +1 -1
- package/lib/browser-only/frontend-only-application-module.js +1 -0
- package/lib/browser-only/frontend-only-application-module.js.map +1 -1
- package/lib/common/application-protocol.d.ts +1 -0
- package/lib/common/application-protocol.d.ts.map +1 -1
- package/lib/common/menu/menu-model-registry.d.ts +6 -0
- package/lib/common/menu/menu-model-registry.d.ts.map +1 -1
- package/lib/common/menu/menu-model-registry.js +31 -5
- package/lib/common/menu/menu-model-registry.js.map +1 -1
- package/lib/common/preferences/preference-schema.d.ts +6 -0
- package/lib/common/preferences/preference-schema.d.ts.map +1 -1
- package/lib/common/preferences/preference-schema.js.map +1 -1
- package/lib/common/quick-pick-service.d.ts +0 -9
- package/lib/common/quick-pick-service.d.ts.map +1 -1
- package/lib/common/quick-pick-service.js.map +1 -1
- package/lib/electron-browser/menu/electron-main-menu-factory.d.ts.map +1 -1
- package/lib/electron-browser/menu/electron-main-menu-factory.js +3 -0
- package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
- package/lib/electron-browser/preload.js +3 -3
- package/lib/electron-browser/preload.js.map +1 -1
- package/lib/electron-browser/window/electron-window-module.d.ts.map +1 -1
- package/lib/electron-browser/window/electron-window-module.js +11 -7
- package/lib/electron-browser/window/electron-window-module.js.map +1 -1
- package/lib/electron-browser/window/electron-window-service.js +1 -1
- package/lib/electron-browser/window/electron-window-service.js.map +1 -1
- package/lib/electron-browser/window/external-app-open-handler.d.ts +12 -0
- package/lib/electron-browser/window/external-app-open-handler.d.ts.map +1 -0
- package/lib/electron-browser/window/external-app-open-handler.js +42 -0
- package/lib/electron-browser/window/external-app-open-handler.js.map +1 -0
- package/lib/electron-common/electron-api.d.ts +5 -2
- package/lib/electron-common/electron-api.d.ts.map +1 -1
- package/lib/electron-common/electron-api.js.map +1 -1
- package/lib/electron-main/electron-main-application.d.ts +1 -2
- package/lib/electron-main/electron-main-application.d.ts.map +1 -1
- package/lib/electron-main/electron-main-application.js +66 -32
- package/lib/electron-main/electron-main-application.js.map +1 -1
- package/lib/electron-main/electron-main-constants.d.ts +1 -0
- package/lib/electron-main/electron-main-constants.d.ts.map +1 -1
- package/lib/electron-main/theia-electron-window.d.ts +1 -1
- package/lib/electron-main/theia-electron-window.d.ts.map +1 -1
- package/lib/electron-main/theia-electron-window.js +8 -3
- package/lib/electron-main/theia-electron-window.js.map +1 -1
- package/lib/node/application-server.d.ts +1 -0
- package/lib/node/application-server.d.ts.map +1 -1
- package/lib/node/application-server.js +3 -0
- package/lib/node/application-server.js.map +1 -1
- package/lib/node/messaging/websocket-frontend-connection-service.d.ts +1 -0
- package/lib/node/messaging/websocket-frontend-connection-service.d.ts.map +1 -1
- package/lib/node/messaging/websocket-frontend-connection-service.js +8 -1
- package/lib/node/messaging/websocket-frontend-connection-service.js.map +1 -1
- package/package.json +7 -7
- package/src/browser/authentication-service.ts +16 -4
- package/src/browser/browser.ts +6 -1
- package/src/browser/common-frontend-contribution.ts +9 -7
- package/src/browser/frontend-application-module.ts +6 -5
- package/src/browser/http-open-handler.ts +3 -1
- package/src/browser/menu/browser-menu-plugin.ts +27 -20
- package/src/browser/messaging/service-connection-provider.ts +15 -1
- package/src/browser/saveable.ts +17 -1
- package/src/browser/shell/additional-views-menu-widget.tsx +5 -5
- package/src/browser/shell/application-shell.ts +21 -4
- package/src/browser/shell/side-panel-handler.ts +2 -1
- package/src/browser/shell/sidebar-menu-widget.tsx +63 -20
- package/src/browser/shell/split-panels.ts +4 -3
- package/src/browser/shell/tab-bars.ts +40 -57
- package/src/browser/shell/theia-dock-panel.ts +13 -3
- package/src/browser/style/sidepanel.css +6 -3
- package/src/browser/style/tabs.css +12 -1
- package/src/browser/widget-manager.ts +19 -11
- package/src/browser/widget-open-handler.ts +3 -3
- package/src/browser/widgets/react-renderer.tsx +4 -1
- package/src/browser-only/frontend-only-application-module.ts +1 -0
- package/src/common/application-protocol.ts +1 -0
- package/src/common/menu/menu-model-registry.ts +36 -5
- package/src/common/preferences/preference-schema.ts +6 -0
- package/src/common/quick-pick-service.ts +0 -3
- package/src/electron-browser/menu/electron-main-menu-factory.ts +3 -0
- package/src/electron-browser/preload.ts +3 -3
- package/src/electron-browser/window/electron-window-module.ts +11 -7
- package/src/electron-browser/window/electron-window-service.ts +1 -1
- package/src/electron-browser/window/external-app-open-handler.ts +42 -0
- package/src/electron-common/electron-api.ts +6 -2
- package/src/electron-main/electron-main-application.ts +76 -35
- package/src/electron-main/electron-main-constants.ts +4 -3
- package/src/electron-main/theia-electron-window.ts +7 -3
- package/src/node/application-server.ts +4 -0
- package/src/node/messaging/websocket-frontend-connection-service.ts +11 -1
|
@@ -56,7 +56,11 @@ export interface TheiaCoreAPI {
|
|
|
56
56
|
focusWindow(name?: string): void;
|
|
57
57
|
|
|
58
58
|
showItemInFolder(fsPath: string): void;
|
|
59
|
-
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* @param location The location to open with the system app. This can be a file path or a URL.
|
|
62
|
+
*/
|
|
63
|
+
openWithSystemApp(location: string): void;
|
|
60
64
|
|
|
61
65
|
getTitleBarStyleAtStartup(): Promise<string>;
|
|
62
66
|
setTitleBarStyle(style: string): void;
|
|
@@ -80,7 +84,7 @@ export interface TheiaCoreAPI {
|
|
|
80
84
|
isFullScreen(): boolean; // TODO: this should really be async, since it blocks the renderer process
|
|
81
85
|
toggleFullScreen(): void;
|
|
82
86
|
|
|
83
|
-
requestReload(): void;
|
|
87
|
+
requestReload(newUrl?: string): void;
|
|
84
88
|
restart(): void;
|
|
85
89
|
|
|
86
90
|
applicationStateChanged(state: FrontendApplicationState): void;
|
|
@@ -15,7 +15,10 @@
|
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
|
|
17
17
|
import { inject, injectable, named } from 'inversify';
|
|
18
|
-
import {
|
|
18
|
+
import {
|
|
19
|
+
screen, app, BrowserWindow, WebContents, Event as ElectronEvent, BrowserWindowConstructorOptions, nativeImage,
|
|
20
|
+
nativeTheme, shell, dialog
|
|
21
|
+
} from '../../electron-shared/electron';
|
|
19
22
|
import * as path from 'path';
|
|
20
23
|
import { Argv } from 'yargs';
|
|
21
24
|
import { AddressInfo } from 'net';
|
|
@@ -31,7 +34,7 @@ import { ContributionProvider } from '../common/contribution-provider';
|
|
|
31
34
|
import { ElectronSecurityTokenService } from './electron-security-token-service';
|
|
32
35
|
import { ElectronSecurityToken } from '../electron-common/electron-token';
|
|
33
36
|
import Storage = require('electron-store');
|
|
34
|
-
import { CancellationTokenSource, Disposable, DisposableCollection, isOSX, isWindows } from '../common';
|
|
37
|
+
import { CancellationTokenSource, Disposable, DisposableCollection, Path, isOSX, isWindows } from '../common';
|
|
35
38
|
import { DEFAULT_WINDOW_HASH, WindowSearchParams } from '../common/window';
|
|
36
39
|
import { TheiaBrowserWindowOptions, TheiaElectronWindow, TheiaElectronWindowFactory } from './theia-electron-window';
|
|
37
40
|
import { ElectronMainApplicationGlobals } from './electron-main-constants';
|
|
@@ -349,6 +352,9 @@ export class ElectronMainApplication {
|
|
|
349
352
|
alwaysOnTop: true,
|
|
350
353
|
show: false,
|
|
351
354
|
transparent: true,
|
|
355
|
+
webPreferences: {
|
|
356
|
+
backgroundThrottling: false
|
|
357
|
+
}
|
|
352
358
|
});
|
|
353
359
|
|
|
354
360
|
if (this.isShowWindowEarly()) {
|
|
@@ -410,7 +416,6 @@ export class ElectronMainApplication {
|
|
|
410
416
|
electronWindow.window.on('unmaximize', () => TheiaRendererAPI.sendWindowEvent(electronWindow.window.webContents, 'unmaximize'));
|
|
411
417
|
electronWindow.window.on('focus', () => TheiaRendererAPI.sendWindowEvent(electronWindow.window.webContents, 'focus'));
|
|
412
418
|
this.attachSaveWindowState(electronWindow.window);
|
|
413
|
-
this.configureNativeSecondaryWindowCreation(electronWindow.window);
|
|
414
419
|
|
|
415
420
|
return electronWindow.window;
|
|
416
421
|
}
|
|
@@ -458,6 +463,7 @@ export class ElectronMainApplication {
|
|
|
458
463
|
// Setting the following option to `true` causes some features to break, somehow.
|
|
459
464
|
// Issue: https://github.com/eclipse-theia/theia/issues/8577
|
|
460
465
|
nodeIntegrationInWorker: false,
|
|
466
|
+
backgroundThrottling: false,
|
|
461
467
|
preload: path.resolve(this.globals.THEIA_APP_PROJECT_PATH, 'lib', 'frontend', 'preload.js').toString()
|
|
462
468
|
},
|
|
463
469
|
...this.config.electron?.windowOptions || {},
|
|
@@ -488,31 +494,6 @@ export class ElectronMainApplication {
|
|
|
488
494
|
return window;
|
|
489
495
|
}
|
|
490
496
|
|
|
491
|
-
/** Configures native window creation, i.e. using window.open or links with target "_blank" in the frontend. */
|
|
492
|
-
protected configureNativeSecondaryWindowCreation(electronWindow: BrowserWindow): void {
|
|
493
|
-
electronWindow.webContents.setWindowOpenHandler(() => {
|
|
494
|
-
const { minWidth, minHeight } = this.getDefaultOptions();
|
|
495
|
-
const options: BrowserWindowConstructorOptions = {
|
|
496
|
-
...this.getDefaultTheiaSecondaryWindowBounds(),
|
|
497
|
-
// We always need the native window frame for now because the secondary window does not have Theia's title bar by default.
|
|
498
|
-
// In 'custom' title bar mode this would leave the window without any window controls (close, min, max)
|
|
499
|
-
// TODO set to this.useNativeWindowFrame when secondary windows support a custom title bar.
|
|
500
|
-
frame: true,
|
|
501
|
-
minWidth,
|
|
502
|
-
minHeight
|
|
503
|
-
};
|
|
504
|
-
if (!this.useNativeWindowFrame) {
|
|
505
|
-
// If the main window does not have a native window frame, do not show an icon in the secondary window's native title bar.
|
|
506
|
-
// The data url is a 1x1 transparent png
|
|
507
|
-
options.icon = nativeImage.createFromDataURL('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQI12P4DwQACfsD/WMmxY8AAAAASUVORK5CYII=');
|
|
508
|
-
}
|
|
509
|
-
return {
|
|
510
|
-
action: 'allow',
|
|
511
|
-
overrideBrowserWindowOptions: options,
|
|
512
|
-
};
|
|
513
|
-
});
|
|
514
|
-
}
|
|
515
|
-
|
|
516
497
|
/**
|
|
517
498
|
* "Gently" close all windows, application will not stop if a `beforeunload` handler returns `false`.
|
|
518
499
|
*/
|
|
@@ -714,6 +695,7 @@ export class ElectronMainApplication {
|
|
|
714
695
|
app.on('will-quit', this.onWillQuit.bind(this));
|
|
715
696
|
app.on('second-instance', this.onSecondInstance.bind(this));
|
|
716
697
|
app.on('window-all-closed', this.onWindowAllClosed.bind(this));
|
|
698
|
+
app.on('web-contents-created', this.onWebContentsCreated.bind(this));
|
|
717
699
|
}
|
|
718
700
|
|
|
719
701
|
protected onWillQuit(event: ElectronEvent): void {
|
|
@@ -721,14 +703,73 @@ export class ElectronMainApplication {
|
|
|
721
703
|
}
|
|
722
704
|
|
|
723
705
|
protected async onSecondInstance(event: ElectronEvent, argv: string[], cwd: string): Promise<void> {
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
706
|
+
createYargs(this.processArgv.getProcessArgvWithoutBin(argv), process.cwd())
|
|
707
|
+
.help(false)
|
|
708
|
+
.command('$0 [file]', false,
|
|
709
|
+
cmd => cmd
|
|
710
|
+
.positional('file', { type: 'string' }),
|
|
711
|
+
async args => {
|
|
712
|
+
this.handleMainCommand({
|
|
713
|
+
file: args.file,
|
|
714
|
+
cwd: process.cwd(),
|
|
715
|
+
secondInstance: true
|
|
716
|
+
});
|
|
717
|
+
},
|
|
718
|
+
).parse();
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
protected onWebContentsCreated(event: ElectronEvent, webContents: WebContents): void {
|
|
722
|
+
// Block any in-page navigation except loading the secondary window contents
|
|
723
|
+
webContents.on('will-navigate', evt => {
|
|
724
|
+
if (new URI(evt.url).path.fsPath() !== new Path(this.globals.THEIA_SECONDARY_WINDOW_HTML_PATH).fsPath()) {
|
|
725
|
+
evt.preventDefault();
|
|
729
726
|
}
|
|
730
|
-
|
|
731
|
-
|
|
727
|
+
});
|
|
728
|
+
|
|
729
|
+
webContents.setWindowOpenHandler(details => {
|
|
730
|
+
// if it's a secondary window, allow it to open
|
|
731
|
+
if (new URI(details.url).path.fsPath() === new Path(this.globals.THEIA_SECONDARY_WINDOW_HTML_PATH).fsPath()) {
|
|
732
|
+
const { minWidth, minHeight } = this.getDefaultOptions();
|
|
733
|
+
const options: BrowserWindowConstructorOptions = {
|
|
734
|
+
...this.getDefaultTheiaSecondaryWindowBounds(),
|
|
735
|
+
// We always need the native window frame for now because the secondary window does not have Theia's title bar by default.
|
|
736
|
+
// In 'custom' title bar mode this would leave the window without any window controls (close, min, max)
|
|
737
|
+
// TODO set to this.useNativeWindowFrame when secondary windows support a custom title bar.
|
|
738
|
+
frame: true,
|
|
739
|
+
minWidth,
|
|
740
|
+
minHeight
|
|
741
|
+
};
|
|
742
|
+
if (!this.useNativeWindowFrame) {
|
|
743
|
+
// If the main window does not have a native window frame, do not show an icon in the secondary window's native title bar.
|
|
744
|
+
// The data url is a 1x1 transparent png
|
|
745
|
+
options.icon = nativeImage.createFromDataURL(
|
|
746
|
+
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQI12P4DwQACfsD/WMmxY8AAAAASUVORK5CYII=');
|
|
747
|
+
}
|
|
748
|
+
return {
|
|
749
|
+
action: 'allow',
|
|
750
|
+
overrideBrowserWindowOptions: options,
|
|
751
|
+
};
|
|
752
|
+
} else {
|
|
753
|
+
const uri: URI = new URI(details.url);
|
|
754
|
+
let okToOpen = uri.scheme === 'https' || uri.scheme === 'http';
|
|
755
|
+
if (!okToOpen) {
|
|
756
|
+
const button = dialog.showMessageBoxSync(BrowserWindow.fromWebContents(webContents)!, {
|
|
757
|
+
message: `Open link\n\n${details.url}\n\nin the system handler?`,
|
|
758
|
+
type: 'question',
|
|
759
|
+
title: 'Open Link',
|
|
760
|
+
buttons: ['OK', 'Cancel'],
|
|
761
|
+
defaultId: 1,
|
|
762
|
+
cancelId: 1
|
|
763
|
+
});
|
|
764
|
+
okToOpen = button === 0;
|
|
765
|
+
}
|
|
766
|
+
if (okToOpen) {
|
|
767
|
+
shell.openExternal(details.url, {});
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
return { action: 'deny' };
|
|
771
|
+
}
|
|
772
|
+
});
|
|
732
773
|
}
|
|
733
774
|
|
|
734
775
|
protected onWindowAllClosed(event: ElectronEvent): void {
|
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
|
|
17
17
|
export const ElectronMainApplicationGlobals = Symbol('ElectronMainApplicationGlobals');
|
|
18
18
|
export interface ElectronMainApplicationGlobals {
|
|
19
|
-
readonly THEIA_APP_PROJECT_PATH: string
|
|
20
|
-
readonly THEIA_BACKEND_MAIN_PATH: string
|
|
21
|
-
readonly THEIA_FRONTEND_HTML_PATH: string
|
|
19
|
+
readonly THEIA_APP_PROJECT_PATH: string;
|
|
20
|
+
readonly THEIA_BACKEND_MAIN_PATH: string;
|
|
21
|
+
readonly THEIA_FRONTEND_HTML_PATH: string;
|
|
22
|
+
readonly THEIA_SECONDARY_WINDOW_HTML_PATH: string
|
|
22
23
|
}
|
|
@@ -147,10 +147,14 @@ export class TheiaElectronWindow {
|
|
|
147
147
|
return this.handleStopRequest(() => this.doCloseWindow(), reason);
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
-
protected reload(): void {
|
|
150
|
+
protected reload(newUrl?: string): void {
|
|
151
151
|
this.handleStopRequest(async () => {
|
|
152
152
|
this.applicationState = 'init';
|
|
153
|
-
|
|
153
|
+
if (newUrl) {
|
|
154
|
+
this._window.loadURL(newUrl);
|
|
155
|
+
} else {
|
|
156
|
+
this._window.reload();
|
|
157
|
+
}
|
|
154
158
|
}, StopReason.Reload);
|
|
155
159
|
}
|
|
156
160
|
|
|
@@ -195,7 +199,7 @@ export class TheiaElectronWindow {
|
|
|
195
199
|
}
|
|
196
200
|
|
|
197
201
|
protected attachReloadListener(): void {
|
|
198
|
-
this.toDispose.push(TheiaRendererAPI.onRequestReload(this.window.webContents, () => this.reload()));
|
|
202
|
+
this.toDispose.push(TheiaRendererAPI.onRequestReload(this.window.webContents, (newUrl?: string) => this.reload(newUrl)));
|
|
199
203
|
}
|
|
200
204
|
|
|
201
205
|
dispose(): void {
|
|
@@ -49,6 +49,10 @@ export class ApplicationServerImpl implements ApplicationServer {
|
|
|
49
49
|
return Promise.resolve(this.applicationPackage.projectPath);
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
+
getApplicationPlatform(): Promise<string> {
|
|
53
|
+
return Promise.resolve(`${process.platform}-${process.arch}`);
|
|
54
|
+
}
|
|
55
|
+
|
|
52
56
|
async getBackendOS(): Promise<OS.Type> {
|
|
53
57
|
return OS.type();
|
|
54
58
|
}
|
|
@@ -105,7 +105,8 @@ export class WebsocketFrontendConnectionService implements FrontendConnectionSer
|
|
|
105
105
|
socket.on('disconnect', evt => {
|
|
106
106
|
console.info('socked closed');
|
|
107
107
|
channel.disconnect();
|
|
108
|
-
|
|
108
|
+
|
|
109
|
+
const timeout = this.frontendConnectionTimeout();
|
|
109
110
|
const isMarkedForClose = this.channelsMarkedForClose.delete(frontEndId);
|
|
110
111
|
if (timeout === 0 || isMarkedForClose) {
|
|
111
112
|
this.closeConnection(frontEndId, evt);
|
|
@@ -124,6 +125,15 @@ export class WebsocketFrontendConnectionService implements FrontendConnectionSer
|
|
|
124
125
|
markForClose(channelId: string): void {
|
|
125
126
|
this.channelsMarkedForClose.add(channelId);
|
|
126
127
|
}
|
|
128
|
+
|
|
129
|
+
private frontendConnectionTimeout(): number {
|
|
130
|
+
const envValue = Number(process.env['FRONTEND_CONNECTION_TIMEOUT']);
|
|
131
|
+
if (!isNaN(envValue)) {
|
|
132
|
+
return envValue;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return BackendApplicationConfigProvider.get().frontendConnectionTimeout;
|
|
136
|
+
}
|
|
127
137
|
}
|
|
128
138
|
|
|
129
139
|
class ReconnectableSocketChannel extends AbstractChannel {
|