extensionsWorkbenchExtension.ts 3.3 KB
Newer Older
E
Erich Gamma 已提交
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.
 *--------------------------------------------------------------------------------------------*/

import nls = require('vs/nls');
import errors = require('vs/base/common/errors');
import { Promise } from 'vs/base/common/winjs.base';
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
J
Joao Moreno 已提交
10
import { IExtensionManagementService, IExtensionGalleryService, IExtensionTipsService } from 'vs/platform/extensionManagement/common/extensionManagement';
E
Erich Gamma 已提交
11 12 13 14 15
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { IMessageService } from 'vs/platform/message/common/message';
import Severity from 'vs/base/common/severity';
import { IWorkspaceContextService } from 'vs/workbench/services/workspace/common/contextService';
import { ReloadWindowAction } from 'vs/workbench/electron-browser/actions';
B
Benjamin Pasero 已提交
16
import {ipcRenderer as ipc} from 'electron';
E
Erich Gamma 已提交
17 18 19 20 21 22 23 24 25

interface IInstallExtensionsRequest {
	extensionsToInstall: string[];
}

export class ExtensionsWorkbenchExtension implements IWorkbenchContribution {

	constructor(
		@IInstantiationService private instantiationService: IInstantiationService,
J
Joao Moreno 已提交
26
		@IExtensionManagementService private extensionManagementService: IExtensionManagementService,
E
Erich Gamma 已提交
27 28
		@IMessageService private messageService: IMessageService,
		@IWorkspaceContextService contextService: IWorkspaceContextService,
J
Johannes Rieken 已提交
29
		@IExtensionTipsService extenstionTips: IExtensionTipsService, // this is to eagerly start the service
J
Joao Moreno 已提交
30
		@IExtensionGalleryService galleryService: IExtensionGalleryService
E
Erich Gamma 已提交
31 32 33 34 35 36 37 38 39
	) {
		this.registerListeners();

		const options = contextService.getOptions();
		// Extensions to install
		if (options.extensionsToInstall && options.extensionsToInstall.length) {
			this.install(options.extensionsToInstall).done(null, errors.onUnexpectedError);
		}

J
Joao Moreno 已提交
40 41
		// const actionRegistry = (<wbaregistry.IWorkbenchActionRegistry> platform.Registry.as(wbaregistry.Extensions.WorkbenchActions));
		// actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(ListExtensionsAction, ListExtensionsAction.ID, ListExtensionsAction.LABEL), 'Extensions: Show Installed Extensions', ExtensionsLabel);
E
Erich Gamma 已提交
42 43 44
	}

	private registerListeners(): void {
45
		ipc.on('vscode:installExtensions', (event, request: IInstallExtensionsRequest) => {
E
Erich Gamma 已提交
46 47 48 49 50 51 52
			if (request.extensionsToInstall) {
				this.install(request.extensionsToInstall).done(null, errors.onUnexpectedError);
			}
		});
	}

	private install(extensions: string[]): Promise {
J
Joao Moreno 已提交
53
		return Promise.join(extensions.map(extPath =>	this.extensionManagementService.install(extPath)))
E
Erich Gamma 已提交
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
			.then(extensions => {
				this.messageService.show(
					Severity.Info,
					{
						message: extensions.length > 1 ? nls.localize('success', "Extensions were successfully installed. Restart to enable them.")
							: nls.localize('successSingle', "{0} was successfully installed. Restart to enable it.", extensions[0].displayName),
						actions: [this.instantiationService.createInstance(ReloadWindowAction, ReloadWindowAction.ID, nls.localize('reloadNow', "Restart Now"))]
					}
				);
			});
	}

	public getId(): string {
		return 'vs.extensions.workbenchextension';
	}
}