windowsIpc.ts 10.9 KB
Newer Older
J
Joao Moreno 已提交
1 2 3 4 5 6 7 8
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

'use strict';

import { TPromise } from 'vs/base/common/winjs.base';
J
Joao Moreno 已提交
9 10
import Event, { buffer } from 'vs/base/common/event';
import { IChannel, eventToCall, eventFromCall } from 'vs/base/parts/ipc/common/ipc';
J
Joao Moreno 已提交
11
import { IWindowsService } from './windows';
12
import { ITelemetryData } from 'vs/platform/telemetry/common/telemetry';
J
Joao Moreno 已提交
13 14

export interface IWindowsChannel extends IChannel {
J
Joao Moreno 已提交
15
	call(command: 'event:onWindowOpen'): TPromise<number>;
J
Joao Moreno 已提交
16
	call(command: 'event:onWindowFocus'): TPromise<number>;
B
renames  
Benjamin Pasero 已提交
17 18 19
	call(command: 'pickFileFolderAndOpen', arg: [number, boolean, ITelemetryData]): TPromise<void>;
	call(command: 'pickFileAndOpen', arg: [number, boolean, string, ITelemetryData]): TPromise<void>;
	call(command: 'pickFolderAndOpen', arg: [number, boolean, ITelemetryData]): TPromise<void>;
20
	call(command: 'pickFolder'): TPromise<string[]>;
21
	call(command: 'reloadWindow', arg: number): TPromise<void>;
J
Joao Moreno 已提交
22
	call(command: 'toggleDevTools', arg: number): TPromise<void>;
J
Joao Moreno 已提交
23
	call(command: 'closeFolder', arg: number): TPromise<void>;
J
Joao Moreno 已提交
24
	call(command: 'toggleFullScreen', arg: number): TPromise<void>;
25
	call(command: 'setRepresentedFilename', arg: [number, string]): TPromise<void>;
26
	call(command: 'addToRecentlyOpen', arg: { path: string, isFile?: boolean }[]): TPromise<void>;
B
Benjamin Pasero 已提交
27
	call(command: 'removeFromRecentlyOpen', arg: string[]): TPromise<void>;
C
22768  
Cristian 已提交
28
	call(command: 'clearRecentPathsList'): TPromise<void>;
J
Joao Moreno 已提交
29
	call(command: 'getRecentlyOpen', arg: number): TPromise<{ files: string[]; folders: string[]; }>;
J
Joao Moreno 已提交
30
	call(command: 'focusWindow', arg: number): TPromise<void>;
31
	call(command: 'isFocused', arg: number): TPromise<boolean>;
32 33 34
	call(command: 'isMaximized', arg: number): TPromise<boolean>;
	call(command: 'maximizeWindow', arg: number): TPromise<void>;
	call(command: 'unmaximizeWindow', arg: number): TPromise<void>;
35
	call(command: 'onWindowTitleDoubleClick', arg: number): TPromise<void>;
J
Joao Moreno 已提交
36
	call(command: 'setDocumentEdited', arg: [number, boolean]): TPromise<void>;
37
	call(command: 'quit'): TPromise<void>;
38
	call(command: 'openWindow', arg: [string[], { forceNewWindow?: boolean, forceReuseWindow?: boolean }]): TPromise<void>;
J
Joao Moreno 已提交
39
	call(command: 'openNewWindow'): TPromise<void>;
J
Joao Moreno 已提交
40
	call(command: 'showWindow', arg: number): TPromise<void>;
J
Joao Moreno 已提交
41
	call(command: 'getWindows'): TPromise<{ id: number; path: string; title: string; }[]>;
42
	call(command: 'getWindowCount'): TPromise<number>;
43
	call(command: 'relaunch', arg: { addArgs?: string[], removeArgs?: string[] }): TPromise<number>;
44
	call(command: 'whenSharedProcessReady'): TPromise<void>;
45
	call(command: 'toggleSharedProcess'): TPromise<void>;
J
Joao Moreno 已提交
46
	call(command: 'log', arg: [string, string[]]): TPromise<void>;
B
Benjamin Pasero 已提交
47
	call(command: 'closeExtensionHostWindow', arg: string[]): TPromise<void>;
J
Joao Moreno 已提交
48
	call(command: 'showItemInFolder', arg: string): TPromise<void>;
49
	call(command: 'openExternal', arg: string): TPromise<boolean>;
50
	call(command: 'startCrashReporter', arg: Electron.CrashReporterStartOptions): TPromise<void>;
J
Joao Moreno 已提交
51 52 53 54 55
	call(command: string, arg?: any): TPromise<any>;
}

export class WindowsChannel implements IWindowsChannel {

J
Joao Moreno 已提交
56 57
	private onWindowOpen: Event<number>;
	private onWindowFocus: Event<number>;
J
Joao Moreno 已提交
58 59

	constructor(private service: IWindowsService) {
J
Joao Moreno 已提交
60
		this.onWindowOpen = buffer(service.onWindowOpen, true);
J
Joao Moreno 已提交
61 62
		this.onWindowFocus = buffer(service.onWindowFocus, true);
	}
J
Joao Moreno 已提交
63 64 65

	call(command: string, arg?: any): TPromise<any> {
		switch (command) {
J
Joao Moreno 已提交
66
			case 'event:onWindowOpen': return eventToCall(this.onWindowOpen);
J
Joao Moreno 已提交
67
			case 'event:onWindowFocus': return eventToCall(this.onWindowFocus);
B
renames  
Benjamin Pasero 已提交
68 69 70
			case 'pickFileFolderAndOpen': return this.service.pickFileFolderAndOpen(arg[0], arg[1], arg[2]);
			case 'pickFileAndOpen': return this.service.pickFileAndOpen(arg[0], arg[1], arg[2], arg[3]);
			case 'pickFolderAndOpen': return this.service.pickFolderAndOpen(arg[0], arg[1], arg[2]);
71
			case 'pickFolder': return this.service.pickFolder();
72
			case 'reloadWindow': return this.service.reloadWindow(arg);
J
Joao Moreno 已提交
73
			case 'openDevTools': return this.service.openDevTools(arg);
J
Joao Moreno 已提交
74
			case 'toggleDevTools': return this.service.toggleDevTools(arg);
J
Joao Moreno 已提交
75
			case 'closeFolder': return this.service.closeFolder(arg);
J
Joao Moreno 已提交
76
			case 'toggleFullScreen': return this.service.toggleFullScreen(arg);
77
			case 'setRepresentedFilename': return this.service.setRepresentedFilename(arg[0], arg[1]);
78
			case 'addToRecentlyOpen': return this.service.addToRecentlyOpen(arg);
B
Benjamin Pasero 已提交
79
			case 'removeFromRecentlyOpen': return this.service.removeFromRecentlyOpen(arg);
C
22768  
Cristian 已提交
80
			case 'clearRecentPathsList': return this.service.clearRecentPathsList();
J
Joao Moreno 已提交
81
			case 'getRecentlyOpen': return this.service.getRecentlyOpen(arg);
J
Joao Moreno 已提交
82
			case 'focusWindow': return this.service.focusWindow(arg);
83
			case 'isFocused': return this.service.isFocused(arg);
84 85 86
			case 'isMaximized': return this.service.isMaximized(arg);
			case 'maximizeWindow': return this.service.maximizeWindow(arg);
			case 'unmaximizeWindow': return this.service.unmaximizeWindow(arg);
87
			case 'onWindowTitleDoubleClick': return this.service.onWindowTitleDoubleClick(arg);
J
Joao Moreno 已提交
88
			case 'setDocumentEdited': return this.service.setDocumentEdited(arg[0], arg[1]);
89
			case 'openWindow': return this.service.openWindow(arg[0], arg[1]);
J
Joao Moreno 已提交
90
			case 'openNewWindow': return this.service.openNewWindow();
J
Joao Moreno 已提交
91
			case 'showWindow': return this.service.showWindow(arg);
J
Joao Moreno 已提交
92
			case 'getWindows': return this.service.getWindows();
93
			case 'getWindowCount': return this.service.getWindowCount();
J
Johannes Rieken 已提交
94
			case 'relaunch': return this.service.relaunch(arg[0]);
95
			case 'whenSharedProcessReady': return this.service.whenSharedProcessReady();
96
			case 'toggleSharedProcess': return this.service.toggleSharedProcess();
97
			case 'quit': return this.service.quit();
J
Joao Moreno 已提交
98
			case 'log': return this.service.log(arg[0], arg[1]);
99
			case 'closeExtensionHostWindow': return this.service.closeExtensionHostWindow(arg);
J
Joao Moreno 已提交
100
			case 'showItemInFolder': return this.service.showItemInFolder(arg);
J
Joao Moreno 已提交
101
			case 'openExternal': return this.service.openExternal(arg);
102
			case 'startCrashReporter': return this.service.startCrashReporter(arg);
J
Joao Moreno 已提交
103
		}
104
		return undefined;
J
Joao Moreno 已提交
105 106 107 108 109 110 111 112 113
	}
}

export class WindowsChannelClient implements IWindowsService {

	_serviceBrand: any;

	constructor(private channel: IWindowsChannel) { }

J
Joao Moreno 已提交
114 115 116
	private _onWindowOpen: Event<number> = eventFromCall<number>(this.channel, 'event:onWindowOpen');
	get onWindowOpen(): Event<number> { return this._onWindowOpen; }

J
Joao Moreno 已提交
117 118 119
	private _onWindowFocus: Event<number> = eventFromCall<number>(this.channel, 'event:onWindowFocus');
	get onWindowFocus(): Event<number> { return this._onWindowFocus; }

B
renames  
Benjamin Pasero 已提交
120 121
	pickFileFolderAndOpen(windowId: number, forceNewWindow?: boolean, data?: ITelemetryData): TPromise<void> {
		return this.channel.call('pickFileFolderAndOpen', [windowId, forceNewWindow, data]);
J
Joao Moreno 已提交
122 123
	}

B
renames  
Benjamin Pasero 已提交
124 125
	pickFileAndOpen(windowId: number, forceNewWindow?: boolean, path?: string, data?: ITelemetryData): TPromise<void> {
		return this.channel.call('pickFileAndOpen', [windowId, forceNewWindow, path, data]);
J
Joao Moreno 已提交
126 127
	}

B
renames  
Benjamin Pasero 已提交
128 129
	pickFolderAndOpen(windowId: number, forceNewWindow?: boolean, data?: ITelemetryData): TPromise<void> {
		return this.channel.call('pickFolderAndOpen', [windowId, forceNewWindow, data]);
J
Joao Moreno 已提交
130
	}
131

132 133 134 135
	pickFolder(): TPromise<string[]> {
		return this.channel.call('pickFolder');
	}

136 137 138
	reloadWindow(windowId: number): TPromise<void> {
		return this.channel.call('reloadWindow', windowId);
	}
J
Joao Moreno 已提交
139

J
Joao Moreno 已提交
140 141 142 143
	openDevTools(windowId: number): TPromise<void> {
		return this.channel.call('openDevTools', windowId);
	}

J
Joao Moreno 已提交
144 145 146
	toggleDevTools(windowId: number): TPromise<void> {
		return this.channel.call('toggleDevTools', windowId);
	}
147

J
Joao Moreno 已提交
148 149 150
	closeFolder(windowId: number): TPromise<void> {
		return this.channel.call('closeFolder', windowId);
	}
J
Joao Moreno 已提交
151

J
Joao Moreno 已提交
152 153 154 155
	toggleFullScreen(windowId: number): TPromise<void> {
		return this.channel.call('toggleFullScreen', windowId);
	}

156 157 158 159
	setRepresentedFilename(windowId: number, fileName: string): TPromise<void> {
		return this.channel.call('setRepresentedFilename', [windowId, fileName]);
	}

160 161 162 163
	addToRecentlyOpen(paths: { path: string, isFile?: boolean }[]): TPromise<void> {
		return this.channel.call('addToRecentlyOpen', paths);
	}

B
Benjamin Pasero 已提交
164 165 166 167
	removeFromRecentlyOpen(paths: string[]): TPromise<void> {
		return this.channel.call('removeFromRecentlyOpen', paths);
	}

C
22768  
Cristian 已提交
168 169 170 171
	clearRecentPathsList(): TPromise<void> {
		return this.channel.call('clearRecentPathsList');
	}

J
Joao Moreno 已提交
172 173 174 175
	getRecentlyOpen(windowId: number): TPromise<{ files: string[]; folders: string[]; }> {
		return this.channel.call('getRecentlyOpen', windowId);
	}

J
Joao Moreno 已提交
176 177 178 179
	focusWindow(windowId: number): TPromise<void> {
		return this.channel.call('focusWindow', windowId);
	}

180 181 182 183
	isFocused(windowId: number): TPromise<boolean> {
		return this.channel.call('isFocused', windowId);
	}

184 185 186 187 188 189 190 191 192 193 194 195
	isMaximized(windowId: number): TPromise<boolean> {
		return this.channel.call('isMaximized', windowId);
	}

	maximizeWindow(windowId: number): TPromise<void> {
		return this.channel.call('maximizeWindow', windowId);
	}

	unmaximizeWindow(windowId: number): TPromise<void> {
		return this.channel.call('unmaximizeWindow', windowId);
	}

196 197 198 199
	onWindowTitleDoubleClick(windowId: number): TPromise<void> {
		return this.channel.call('onWindowTitleDoubleClick', windowId);
	}

J
Joao Moreno 已提交
200 201 202 203
	setDocumentEdited(windowId: number, flag: boolean): TPromise<void> {
		return this.channel.call('setDocumentEdited', [windowId, flag]);
	}

204 205 206 207
	quit(): TPromise<void> {
		return this.channel.call('quit');
	}

J
Johannes Rieken 已提交
208 209 210 211
	relaunch(options: { addArgs?: string[], removeArgs?: string[] }): TPromise<void> {
		return this.channel.call('relaunch', [options]);
	}

212 213 214 215
	whenSharedProcessReady(): TPromise<void> {
		return this.channel.call('whenSharedProcessReady');
	}

216 217 218 219
	toggleSharedProcess(): TPromise<void> {
		return this.channel.call('toggleSharedProcess');
	}

220 221
	openWindow(paths: string[], options?: { forceNewWindow?: boolean, forceReuseWindow?: boolean }): TPromise<void> {
		return this.channel.call('openWindow', [paths, options]);
J
Joao Moreno 已提交
222 223
	}

J
Joao Moreno 已提交
224 225 226
	openNewWindow(): TPromise<void> {
		return this.channel.call('openNewWindow');
	}
J
Joao Moreno 已提交
227 228 229 230

	showWindow(windowId: number): TPromise<void> {
		return this.channel.call('showWindow', windowId);
	}
J
Joao Moreno 已提交
231 232 233 234

	getWindows(): TPromise<{ id: number; path: string; title: string; }[]> {
		return this.channel.call('getWindows');
	}
J
Joao Moreno 已提交
235

236 237 238 239
	getWindowCount(): TPromise<number> {
		return this.channel.call('getWindowCount');
	}

J
Joao Moreno 已提交
240 241 242
	log(severity: string, ...messages: string[]): TPromise<void> {
		return this.channel.call('log', [severity, messages]);
	}
243

B
Benjamin Pasero 已提交
244 245
	closeExtensionHostWindow(extensionDevelopmentPaths: string[]): TPromise<void> {
		return this.channel.call('closeExtensionHostWindow', extensionDevelopmentPaths);
246
	}
J
Joao Moreno 已提交
247 248 249 250

	showItemInFolder(path: string): TPromise<void> {
		return this.channel.call('showItemInFolder', path);
	}
J
Joao Moreno 已提交
251

252
	openExternal(url: string): TPromise<boolean> {
J
Joao Moreno 已提交
253 254
		return this.channel.call('openExternal', url);
	}
255 256 257 258

	startCrashReporter(config: Electron.CrashReporterStartOptions): TPromise<void> {
		return this.channel.call('startCrashReporter', config);
	}
259
}