debt - add whenClosedOrLoaded into window class

This commit is contained in:
Benjamin Pasero
2019-10-05 08:09:56 +02:00
parent 86a42393b0
commit ffbc48855a
4 changed files with 34 additions and 32 deletions

View File

@@ -70,6 +70,9 @@ export class CodeWindow extends Disposable implements ICodeWindow {
private readonly _onDestroy = this._register(new Emitter<void>());
readonly onDestroy: CommonEvent<void> = this._onDestroy.event;
private readonly _onLoad = this._register(new Emitter<void>());
readonly onLoad: CommonEvent<void> = this._onLoad.event;
private hiddenTitleBarStyle: boolean;
private showTimeoutHandle: NodeJS.Timeout;
private _id: number;
@@ -324,6 +327,21 @@ export class CodeWindow extends Disposable implements ICodeWindow {
return this._readyState === ReadyState.READY;
}
get whenClosedOrLoaded(): Promise<void> {
return new Promise<void>(resolve => {
function handle() {
closeListener.dispose();
loadListener.dispose();
resolve();
}
const closeListener = this.onClose(() => handle());
const loadListener = this.onLoad(() => handle());
});
}
private handleMarketplaceRequests(): void {
// Resolve marketplace headers
@@ -349,7 +367,11 @@ export class CodeWindow extends Disposable implements ICodeWindow {
this._win.on('unresponsive', () => this.onWindowError(WindowError.UNRESPONSIVE));
// Window close
this._win.on('closed', () => this._onClose.fire());
this._win.on('closed', () => {
this._onClose.fire();
this.dispose();
});
// Prevent loading of svgs
this._win.webContents.session.webRequest.onBeforeRequest(null!, (details, callback) => {
@@ -606,6 +628,9 @@ export class CodeWindow extends Disposable implements ICodeWindow {
}
}, 10000);
}
// Event
this._onLoad.fire();
}
reload(configurationIn?: IWindowConfiguration, cli?: ParsedArgs): void {

View File

@@ -166,9 +166,6 @@ export class WindowsManager extends Disposable implements IWindowsMainService {
private readonly _onWindowClose = this._register(new Emitter<number>());
readonly onWindowClose: CommonEvent<number> = this._onWindowClose.event;
private readonly _onWindowLoad = this._register(new Emitter<number>());
readonly onWindowLoad: CommonEvent<number> = this._onWindowLoad.event;
private readonly _onWindowsCountChanged = this._register(new Emitter<IWindowsCountChangedEvent>());
readonly onWindowsCountChanged: CommonEvent<IWindowsCountChangedEvent> = this._onWindowsCountChanged.event;
@@ -502,7 +499,7 @@ export class WindowsManager extends Disposable implements IWindowsMainService {
// process can continue. We do this by deleting the waitMarkerFilePath.
const waitMarkerFileURI = openConfig.waitMarkerFileURI;
if (openConfig.context === OpenContext.CLI && waitMarkerFileURI && usedWindows.length === 1 && usedWindows[0]) {
this.waitForWindowCloseOrLoad(usedWindows[0].id).then(() => fs.unlink(waitMarkerFileURI.fsPath, _error => undefined));
usedWindows[0].whenClosedOrLoaded.then(() => fs.unlink(waitMarkerFileURI.fsPath, _error => undefined));
}
return usedWindows;
@@ -1456,9 +1453,6 @@ export class WindowsManager extends Disposable implements IWindowsMainService {
// Load it
window.load(configuration);
// Signal event
this._onWindowLoad.fire(window.id);
}
private getNewWindowState(configuration: IWindowConfiguration): INewWindowState {
@@ -1642,22 +1636,6 @@ export class WindowsManager extends Disposable implements IWindowsMainService {
return this.open({ context, cli, forceEmpty: true, forceNewWindow, forceReuseWindow });
}
waitForWindowCloseOrLoad(windowId: number): Promise<void> {
return new Promise<void>(resolve => {
function handler(id: number) {
if (id === windowId) {
closeListener.dispose();
loadListener.dispose();
resolve();
}
}
const closeListener = this.onWindowClose(id => handler(id));
const loadListener = this.onWindowLoad(id => handler(id));
});
}
sendToFocused(channel: string, ...args: any[]): void {
const focusedWindow = this.getFocusedWindow() || this.getLastActiveWindow();
@@ -1700,9 +1678,6 @@ export class WindowsManager extends Disposable implements IWindowsMainService {
private onWindowClosed(win: ICodeWindow): void {
// Tell window
win.dispose();
// Remove from our list so that Electron can clean it up
const index = WindowsManager.WINDOWS.indexOf(win);
WindowsManager.WINDOWS.splice(index, 1);