提交 680f9b19 编写于 作者: S Sandeep Somavarapu

Fix #41759

上级 f3b9d48d
/*---------------------------------------------------------------------------------------------
* 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
......@@ -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 = <IStatusbarRegistry>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
......@@ -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<void> {
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)) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册