extensionManagementIpc.ts 4.1 KB
Newer Older
J
Joao Moreno 已提交
1 2 3 4 5 6 7 8 9
/*---------------------------------------------------------------------------------------------
 *  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';
import { IChannel, eventToCall, eventFromCall } from 'vs/base/parts/ipc/common/ipc';
J
Joao Moreno 已提交
10
import { IExtensionManagementService, ILocalExtension, InstallExtensionEvent, DidInstallExtensionEvent, IGalleryExtension, LocalExtensionType } from './extensionManagement';
11
import Event, { buffer } from 'vs/base/common/event';
J
Joao Moreno 已提交
12

J
Joao Moreno 已提交
13
export interface IExtensionManagementChannel extends IChannel {
J
Joao Moreno 已提交
14 15 16 17
	call(command: 'event:onInstallExtension'): TPromise<void>;
	call(command: 'event:onDidInstallExtension'): TPromise<void>;
	call(command: 'event:onUninstallExtension'): TPromise<void>;
	call(command: 'event:onDidUninstallExtension'): TPromise<void>;
18 19
	call(command: 'install', path: string): TPromise<void>;
	call(command: 'installFromGallery', extension: IGalleryExtension): TPromise<void>;
J
Joao Moreno 已提交
20
	call(command: 'uninstall', extension: ILocalExtension): TPromise<void>;
J
Joao Moreno 已提交
21
	call(command: 'getInstalled'): TPromise<ILocalExtension[]>;
D
Dirk Baeumer 已提交
22
	call(command: string, arg?: any): TPromise<any>;
J
Joao Moreno 已提交
23 24
}

J
Joao Moreno 已提交
25
export class ExtensionManagementChannel implements IExtensionManagementChannel {
J
Joao Moreno 已提交
26

27 28 29 30 31 32 33 34 35 36 37
	onInstallExtension: Event<InstallExtensionEvent>;
	onDidInstallExtension: Event<DidInstallExtensionEvent>;
	onUninstallExtension: Event<string>;
	onDidUninstallExtension: Event<string>;

	constructor(private service: IExtensionManagementService) {
		this.onInstallExtension = buffer(service.onInstallExtension, true);
		this.onDidInstallExtension = buffer(service.onDidInstallExtension, true);
		this.onUninstallExtension = buffer(service.onUninstallExtension, true);
		this.onDidUninstallExtension = buffer(service.onDidUninstallExtension, true);
	}
J
Joao Moreno 已提交
38

D
Dirk Baeumer 已提交
39
	call(command: string, arg?: any): TPromise<any> {
J
Joao Moreno 已提交
40
		switch (command) {
41 42 43 44
			case 'event:onInstallExtension': return eventToCall(this.onInstallExtension);
			case 'event:onDidInstallExtension': return eventToCall(this.onDidInstallExtension);
			case 'event:onUninstallExtension': return eventToCall(this.onUninstallExtension);
			case 'event:onDidUninstallExtension': return eventToCall(this.onDidUninstallExtension);
J
Joao Moreno 已提交
45
			case 'install': return this.service.install(arg);
S
Sandeep Somavarapu 已提交
46
			case 'installFromGallery': return this.service.installFromGallery(arg[0], arg[1]);
J
Joao Moreno 已提交
47
			case 'uninstall': return this.service.uninstall(arg);
J
Joao Moreno 已提交
48
			case 'getInstalled': return this.service.getInstalled(arg);
J
Joao Moreno 已提交
49 50 51 52
		}
	}
}

J
Joao Moreno 已提交
53
export class ExtensionManagementChannelClient implements IExtensionManagementService {
J
Joao Moreno 已提交
54

55
	_serviceBrand: any;
J
Joao Moreno 已提交
56

J
Joao Moreno 已提交
57
	constructor(private channel: IExtensionManagementChannel) { }
J
Joao Moreno 已提交
58

J
Joao Moreno 已提交
59 60
	private _onInstallExtension = eventFromCall<InstallExtensionEvent>(this.channel, 'event:onInstallExtension');
	get onInstallExtension(): Event<InstallExtensionEvent> { return this._onInstallExtension; }
J
Joao Moreno 已提交
61

J
Joao Moreno 已提交
62 63
	private _onDidInstallExtension = eventFromCall<DidInstallExtensionEvent>(this.channel, 'event:onDidInstallExtension');
	get onDidInstallExtension(): Event<DidInstallExtensionEvent> { return this._onDidInstallExtension; }
J
Joao Moreno 已提交
64

J
Joao Moreno 已提交
65 66
	private _onUninstallExtension = eventFromCall<string>(this.channel, 'event:onUninstallExtension');
	get onUninstallExtension(): Event<string> { return this._onUninstallExtension; }
J
Joao Moreno 已提交
67

J
Joao Moreno 已提交
68 69
	private _onDidUninstallExtension = eventFromCall<string>(this.channel, 'event:onDidUninstallExtension');
	get onDidUninstallExtension(): Event<string> { return this._onDidUninstallExtension; }
J
Joao Moreno 已提交
70

71 72 73 74
	install(zipPath: string): TPromise<void> {
		return this.channel.call('install', zipPath);
	}

S
Sandeep Somavarapu 已提交
75 76
	installFromGallery(extension: IGalleryExtension, promptToInstallDependencies: boolean = true): TPromise<void> {
		return this.channel.call('installFromGallery', [extension, promptToInstallDependencies]);
J
Joao Moreno 已提交
77 78
	}

J
Joao Moreno 已提交
79
	uninstall(extension: ILocalExtension): TPromise<void> {
J
Joao Moreno 已提交
80 81 82
		return this.channel.call('uninstall', extension);
	}

J
Joao Moreno 已提交
83 84
	getInstalled(type: LocalExtensionType = null): TPromise<ILocalExtension[]> {
		return this.channel.call('getInstalled', type);
J
Joao Moreno 已提交
85 86
	}
}