extensionsActions.ts 3.0 KB
Newer Older
E
Erich Gamma 已提交
1 2 3 4 5
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

J
Joao Moreno 已提交
6
import { localize } from 'vs/nls';
J
Joao Moreno 已提交
7
import { TPromise } from 'vs/base/common/winjs.base';
8
import { Action } from 'vs/base/common/actions';
9
import severity from 'vs/base/common/severity';
10
import paths = require('vs/base/common/paths');
J
Joao Moreno 已提交
11
import { ReloadWindowAction } from 'vs/workbench/electron-browser/actions';
12
import { IExtensionsWorkbenchService } from 'vs/workbench/parts/extensions/common/extensions';
13
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
14
import { IMessageService } from 'vs/platform/message/common/message';
15
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
B
Benjamin Pasero 已提交
16
import { remote } from 'electron';
J
Joao Moreno 已提交
17
import { IWindowsService } from 'vs/platform/windows/common/windows';
J
Joao Moreno 已提交
18 19

const dialog = remote.dialog;
J
Joao Moreno 已提交
20

21 22 23 24 25 26 27 28
export class OpenExtensionsFolderAction extends Action {

	static ID = 'workbench.extensions.action.openExtensionsFolder';
	static LABEL = localize('openExtensionsFolder', "Open Extensions Folder");

	constructor(
		id: string,
		label: string,
J
Joao Moreno 已提交
29
		@IWindowsService private windowsService: IWindowsService,
30 31 32 33 34
		@IEnvironmentService private environmentService: IEnvironmentService
	) {
		super(id, label, null, true);
	}

J
Joao Moreno 已提交
35
	run(): TPromise<void> {
36
		const extensionsHome = this.environmentService.extensionsPath;
J
Joao Moreno 已提交
37
		return this.windowsService.showItemInFolder(paths.normalize(extensionsHome, true));
38 39
	}

J
Joao Moreno 已提交
40 41 42
	protected isEnabled(): boolean {
		return true;
	}
S
Sandeep Somavarapu 已提交
43 44
}

J
Joao Moreno 已提交
45 46 47 48 49 50 51 52
export class InstallVSIXAction extends Action {

	static ID = 'workbench.extensions.action.installVSIX';
	static LABEL = localize('installVSIX', "Install from VSIX...");

	constructor(
		id = InstallVSIXAction.ID,
		label = InstallVSIXAction.LABEL,
53 54 55
		@IExtensionsWorkbenchService private extensionsWorkbenchService: IExtensionsWorkbenchService,
		@IMessageService private messageService: IMessageService,
		@IInstantiationService private instantiationService: IInstantiationService
J
Joao Moreno 已提交
56 57 58 59 60 61 62 63 64 65 66 67 68 69
	) {
		super(id, label, 'extension-action install-vsix', true);
	}

	run(): TPromise<any> {
		const result = dialog.showOpenDialog(remote.getCurrentWindow(), {
			filters: [{ name: 'VSIX Extensions', extensions: ['vsix'] }],
			properties: ['openFile']
		});

		if (!result) {
			return TPromise.as(null);
		}

70 71 72 73 74 75 76 77 78
		return TPromise.join(result.map(vsix => this.extensionsWorkbenchService.install(vsix))).then(() => {
			this.messageService.show(
				severity.Info,
				{
					message: localize('InstallVSIXAction.success', "Successfully installed the extension. Restart to enable it."),
					actions: [this.instantiationService.createInstance(ReloadWindowAction, ReloadWindowAction.ID, localize('InstallVSIXAction.reloadNow', "Reload Now"))]
				}
			);
		});
J
Joao Moreno 已提交
79
	}
80
}