diff --git a/src/vs/workbench/parts/extensions/browser/extensionsStatus.ts b/src/vs/workbench/parts/extensions/browser/extensionsStatus.ts deleted file mode 100644 index 78d5f7be002c13b8ccc772f48d8b2ca0dbba42bb..0000000000000000000000000000000000000000 --- a/src/vs/workbench/parts/extensions/browser/extensionsStatus.ts +++ /dev/null @@ -1,61 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import * as DOM from 'vs/base/browser/dom'; -import { IStatusbarItem } from 'vs/workbench/browser/parts/statusbar/statusbar'; -import { Disposable, toDisposable, IDisposable } from 'vs/base/common/lifecycle'; -import { IExtensionManagementService, InstallExtensionEvent, DidInstallExtensionEvent } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { localize } from 'vs/nls'; -import { getIdFromLocalExtensionId } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; - -export class InstallingStatusItem extends Disposable implements IStatusbarItem { - - private statusElement: HTMLElement; - private installingExtensions: string[] = []; - - constructor( - @IExtensionManagementService extensionManagementService: IExtensionManagementService - ) { - super(); - this.statusElement = DOM.$('div'); - this.statusElement.style.display = 'none'; - - this._register(extensionManagementService.onInstallExtension(e => this.onInstallingExtension(e))); - this._register(extensionManagementService.onDidInstallExtension(e => this.onDidInstallExtension(e))); - } - - render(parent: HTMLElement): IDisposable { - parent.appendChild(this.statusElement); - return toDisposable(() => this.dispose()); - } - - private onInstallingExtension(e: InstallExtensionEvent): void { - this.statusElement.style.display = 'block'; - this.installingExtensions.push(getIdFromLocalExtensionId(e.identifier.id)); - - if (this.installingExtensions.length === 1) { - this.statusElement.textContent = localize('installingExtension', "Installing {0}", this.installingExtensions[0]); - } else { - this.statusElement.textContent = localize('installingExtensions', "Installing {0} extensions", this.installingExtensions.length); - } - } - - private onDidInstallExtension(e: DidInstallExtensionEvent): void { - const index = this.installingExtensions.indexOf(getIdFromLocalExtensionId(e.identifier.id)); - if (index !== -1) { - this.installingExtensions.splice(index, 1); - if (this.installingExtensions.length === 0) { - this.statusElement.textContent = ''; - this.statusElement.style.display = 'none'; - } else if (this.installingExtensions.length === 1) { - this.statusElement.textContent = localize('installingExtension', "Installing {0}", this.installingExtensions[0]); - } else { - this.statusElement.textContent = localize('installingExtensions', "Installing {0} extensions", this.installingExtensions.length); - } - - } - } - -} \ No newline at end of file diff --git a/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.ts b/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.ts index 52a5da3d7a47881271870e1a18f2cdf4431204e3..c5e6add7d7724e412e23334f9325ebb24c27f70d 100644 --- a/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.ts +++ b/src/vs/workbench/parts/extensions/electron-browser/extensions.contribution.ts @@ -43,8 +43,6 @@ import { LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle'; import { RuntimeExtensionsEditor, RuntimeExtensionsInput, ShowRuntimeExtensionsAction, IExtensionHostProfileService } from 'vs/workbench/parts/extensions/electron-browser/runtimeExtensionsEditor'; import { EditorInput, IEditorInputFactory, IEditorInputFactoryRegistry, Extensions as EditorInputExtensions } from 'vs/workbench/common/editor'; import { ExtensionHostProfileService } from 'vs/workbench/parts/extensions/electron-browser/extensionProfileService'; -import { IStatusbarRegistry, Extensions as StatusbarExtensions, StatusbarItemDescriptor, StatusbarAlignment } from 'vs/workbench/browser/parts/statusbar/statusbar'; -import { InstallingStatusItem } from 'vs/workbench/parts/extensions/browser/extensionsStatus'; // Singletons registerSingleton(IExtensionGalleryService, ExtensionGalleryService); @@ -224,8 +222,4 @@ CommandsRegistry.registerCommand('_extensions.manage', (accessor: ServicesAccess if (extension.length === 1) { extensionService.open(extension[0]).done(null, errors.onUnexpectedError); } -}); - - -let statusbarRegistry = Registry.as(StatusbarExtensions.Statusbar); -statusbarRegistry.registerStatusbarItem(new StatusbarItemDescriptor(InstallingStatusItem, StatusbarAlignment.LEFT, 50 /* Medium Priority */)); \ No newline at end of file +}); \ No newline at end of file diff --git a/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts b/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts index 2c9ffe5c97f809813f7ead815dac55cb1030c4d2..aa3991b96baed03492d7e6dc4192b68fd411c72e 100644 --- a/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts +++ b/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts @@ -35,6 +35,7 @@ import { IURLService } from 'vs/platform/url/common/url'; import { ExtensionsInput } from 'vs/workbench/parts/extensions/common/extensionsInput'; import product from 'vs/platform/node/product'; import { ILogService } from 'vs/platform/log/common/log'; +import { IProgressService2, ProgressLocation } from 'vs/platform/progress/common/progress'; interface IExtensionStateProvider { (extension: Extension): ExtensionState; @@ -345,7 +346,8 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService { @IURLService urlService: IURLService, @IExtensionEnablementService private extensionEnablementService: IExtensionEnablementService, @IWindowService private windowService: IWindowService, - @ILogService private logService: ILogService + @ILogService private logService: ILogService, + @IProgressService2 private progressService: IProgressService2 ) { this.stateProvider = ext => this.getExtensionState(ext); @@ -536,7 +538,11 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService { install(extension: string | IExtension): TPromise { if (typeof extension === 'string') { - return this.extensionService.install(extension); + return this.progressService.withProgress({ + location: ProgressLocation.Window, + title: nls.localize('installingExtension', 'Installing extension from VSIX...'), + tooltip: `${extension}` + }, () => this.extensionService.install(extension)); } if (!(extension instanceof Extension)) {