windowsIpc.ts 8.1 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 12 13
import { IWindowsService } from './windows';

export interface IWindowsChannel extends IChannel {
J
Joao Moreno 已提交
14
	call(command: 'event:onWindowFocus'): TPromise<number>;
J
Joao Moreno 已提交
15 16 17
	call(command: 'openFileFolderPicker', arg: [number, boolean]): TPromise<void>;
	call(command: 'openFilePicker', arg: [number, boolean, string]): TPromise<void>;
	call(command: 'openFolderPicker', arg: [number, boolean]): TPromise<void>;
18
	call(command: 'reloadWindow', arg: number): TPromise<void>;
J
Joao Moreno 已提交
19
	call(command: 'toggleDevTools', arg: number): TPromise<void>;
J
Joao Moreno 已提交
20
	call(command: 'closeFolder', arg: number): TPromise<void>;
J
Joao Moreno 已提交
21
	call(command: 'toggleFullScreen', arg: number): TPromise<void>;
22
	call(command: 'setRepresentedFilename', arg: [number, string]): TPromise<void>;
23
	call(command: 'addToRecentlyOpen', arg: { path: string, isFile?: boolean }[]): TPromise<void>;
J
Joao Moreno 已提交
24
	call(command: 'getRecentlyOpen', arg: number): TPromise<{ files: string[]; folders: string[]; }>;
J
Joao Moreno 已提交
25
	call(command: 'focusWindow', arg: number): TPromise<void>;
26 27 28
	call(command: 'isMaximized', arg: number): TPromise<boolean>;
	call(command: 'maximizeWindow', arg: number): TPromise<void>;
	call(command: 'unmaximizeWindow', arg: number): TPromise<void>;
J
Joao Moreno 已提交
29 30
	call(command: 'setDocumentEdited', arg: [number, boolean]): TPromise<void>;
	call(command: 'toggleMenuBar', arg: number): TPromise<void>;
J
Joao Moreno 已提交
31
	call(command: 'windowOpen', arg: [string[], boolean]): TPromise<void>;
J
Joao Moreno 已提交
32
	call(command: 'openNewWindow'): TPromise<void>;
J
Joao Moreno 已提交
33
	call(command: 'showWindow', arg: number): TPromise<void>;
J
Joao Moreno 已提交
34
	call(command: 'getWindows'): TPromise<{ id: number; path: string; title: string; }[]>;
J
Joao Moreno 已提交
35 36 37 38
	call(command: 'log', arg: [string, string[]]): TPromise<void>;
	call(command: 'closeExtensionHostWindow', arg: string): TPromise<void>;
	call(command: 'showItemInFolder', arg: string): TPromise<void>;
	call(command: 'openExternal', arg: string): TPromise<void>;
39
	call(command: 'startCrashReporter', arg: Electron.CrashReporterStartOptions): TPromise<void>;
J
Joao Moreno 已提交
40 41 42 43 44
	call(command: string, arg?: any): TPromise<any>;
}

export class WindowsChannel implements IWindowsChannel {

J
Joao Moreno 已提交
45 46 47 48 49
	onWindowFocus: Event<number>;

	constructor(private service: IWindowsService) {
		this.onWindowFocus = buffer(service.onWindowFocus, true);
	}
J
Joao Moreno 已提交
50 51 52

	call(command: string, arg?: any): TPromise<any> {
		switch (command) {
J
Joao Moreno 已提交
53
			case 'event:onWindowFocus': return eventToCall(this.onWindowFocus);
J
Joao Moreno 已提交
54
			case 'openFileFolderPicker': return this.service.openFileFolderPicker(arg[0], arg[1]);
55
			case 'openFilePicker': return this.service.openFilePicker(arg[0], arg[1], arg[2]);
J
Joao Moreno 已提交
56
			case 'openFolderPicker': return this.service.openFolderPicker(arg[0], arg[1]);
57
			case 'reloadWindow': return this.service.reloadWindow(arg);
J
Joao Moreno 已提交
58
			case 'openDevTools': return this.service.openDevTools(arg);
J
Joao Moreno 已提交
59
			case 'toggleDevTools': return this.service.toggleDevTools(arg);
J
Joao Moreno 已提交
60
			case 'closeFolder': return this.service.closeFolder(arg);
J
Joao Moreno 已提交
61
			case 'toggleFullScreen': return this.service.toggleFullScreen(arg);
62
			case 'setRepresentedFilename': return this.service.setRepresentedFilename(arg[0], arg[1]);
63
			case 'addToRecentlyOpen': return this.service.addToRecentlyOpen(arg);
J
Joao Moreno 已提交
64
			case 'getRecentlyOpen': return this.service.getRecentlyOpen(arg);
J
Joao Moreno 已提交
65
			case 'focusWindow': return this.service.focusWindow(arg);
66 67 68
			case 'isMaximized': return this.service.isMaximized(arg);
			case 'maximizeWindow': return this.service.maximizeWindow(arg);
			case 'unmaximizeWindow': return this.service.unmaximizeWindow(arg);
J
Joao Moreno 已提交
69
			case 'setDocumentEdited': return this.service.setDocumentEdited(arg[0], arg[1]);
J
Joao Moreno 已提交
70
			case 'toggleMenuBar': return this.service.toggleMenuBar(arg);
J
Joao Moreno 已提交
71
			case 'windowOpen': return this.service.windowOpen(arg[0], arg[1]);
J
Joao Moreno 已提交
72
			case 'openNewWindow': return this.service.openNewWindow();
J
Joao Moreno 已提交
73
			case 'showWindow': return this.service.showWindow(arg);
J
Joao Moreno 已提交
74
			case 'getWindows': return this.service.getWindows();
J
Joao Moreno 已提交
75
			case 'log': return this.service.log(arg[0], arg[1]);
76
			case 'closeExtensionHostWindow': return this.service.closeExtensionHostWindow(arg);
J
Joao Moreno 已提交
77
			case 'showItemInFolder': return this.service.showItemInFolder(arg);
J
Joao Moreno 已提交
78
			case 'openExternal': return this.service.openExternal(arg);
79
			case 'startCrashReporter': return this.service.startCrashReporter(arg);
J
Joao Moreno 已提交
80 81 82 83 84 85 86 87 88 89
		}
	}
}

export class WindowsChannelClient implements IWindowsService {

	_serviceBrand: any;

	constructor(private channel: IWindowsChannel) { }

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

J
Joao Moreno 已提交
93 94 95 96
	openFileFolderPicker(windowId: number, forceNewWindow?: boolean): TPromise<void> {
		return this.channel.call('openFileFolderPicker', [windowId, forceNewWindow]);
	}

97 98
	openFilePicker(windowId: number, forceNewWindow?: boolean, path?: string): TPromise<void> {
		return this.channel.call('openFilePicker', [windowId, forceNewWindow, path]);
J
Joao Moreno 已提交
99 100 101 102 103
	}

	openFolderPicker(windowId: number, forceNewWindow?: boolean): TPromise<void> {
		return this.channel.call('openFolderPicker', [windowId, forceNewWindow]);
	}
104 105 106 107

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

J
Joao Moreno 已提交
109 110 111 112
	openDevTools(windowId: number): TPromise<void> {
		return this.channel.call('openDevTools', windowId);
	}

J
Joao Moreno 已提交
113 114 115
	toggleDevTools(windowId: number): TPromise<void> {
		return this.channel.call('toggleDevTools', windowId);
	}
116

J
Joao Moreno 已提交
117 118 119
	closeFolder(windowId: number): TPromise<void> {
		return this.channel.call('closeFolder', windowId);
	}
J
Joao Moreno 已提交
120

J
Joao Moreno 已提交
121 122 123 124
	toggleFullScreen(windowId: number): TPromise<void> {
		return this.channel.call('toggleFullScreen', windowId);
	}

125 126 127 128
	setRepresentedFilename(windowId: number, fileName: string): TPromise<void> {
		return this.channel.call('setRepresentedFilename', [windowId, fileName]);
	}

129 130 131 132
	addToRecentlyOpen(paths: { path: string, isFile?: boolean }[]): TPromise<void> {
		return this.channel.call('addToRecentlyOpen', paths);
	}

J
Joao Moreno 已提交
133 134 135 136
	getRecentlyOpen(windowId: number): TPromise<{ files: string[]; folders: string[]; }> {
		return this.channel.call('getRecentlyOpen', windowId);
	}

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

141 142 143 144 145 146 147 148 149 150 151 152
	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);
	}

J
Joao Moreno 已提交
153 154 155 156
	setDocumentEdited(windowId: number, flag: boolean): TPromise<void> {
		return this.channel.call('setDocumentEdited', [windowId, flag]);
	}

J
Joao Moreno 已提交
157 158 159 160
	toggleMenuBar(windowId: number): TPromise<void> {
		return this.channel.call('toggleMenuBar', windowId);
	}

J
Joao Moreno 已提交
161 162 163 164
	windowOpen(paths: string[], forceNewWindow?: boolean): TPromise<void> {
		return this.channel.call('windowOpen', [paths, forceNewWindow]);
	}

J
Joao Moreno 已提交
165 166 167
	openNewWindow(): TPromise<void> {
		return this.channel.call('openNewWindow');
	}
J
Joao Moreno 已提交
168 169 170 171

	showWindow(windowId: number): TPromise<void> {
		return this.channel.call('showWindow', windowId);
	}
J
Joao Moreno 已提交
172 173 174 175

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

	log(severity: string, ...messages: string[]): TPromise<void> {
		return this.channel.call('log', [severity, messages]);
	}
180 181 182 183

	closeExtensionHostWindow(extensionDevelopmentPath: string): TPromise<void> {
		return this.channel.call('closeExtensionHostWindow', extensionDevelopmentPath);
	}
J
Joao Moreno 已提交
184 185 186 187

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

	openExternal(url: string): TPromise<void> {
		return this.channel.call('openExternal', url);
	}
192 193 194 195

	startCrashReporter(config: Electron.CrashReporterStartOptions): TPromise<void> {
		return this.channel.call('startCrashReporter', config);
	}
J
Joao Moreno 已提交
196
}