提交 685f8f40 编写于 作者: S Sandeep Somavarapu

Implement #41759

上级 2ee65b3e
/*---------------------------------------------------------------------------------------------
* 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,6 +43,8 @@ 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);
......@@ -223,3 +225,7 @@ CommandsRegistry.registerCommand('_extensions.manage', (accessor: ServicesAccess
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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册