Add badge back to ports view

Part of microsoft/vscode-remote-release#4021
This commit is contained in:
Alex Ross 2020-11-26 16:13:29 +01:00
parent 3018240290
commit 58fe1b9dfa

View file

@ -5,7 +5,7 @@
import * as nls from 'vs/nls';
import { Disposable, IDisposable } from 'vs/base/common/lifecycle';
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
import { Extensions, IViewContainersRegistry, IViewsRegistry, IViewsService, ViewContainerLocation } from 'vs/workbench/common/views';
import { Extensions, IViewContainersRegistry, IViewDescriptorService, IViewsRegistry, IViewsService, ViewContainerLocation } from 'vs/workbench/common/views';
import { IRemoteExplorerService, makeAddress, mapHasAddressLocalhostOrAllInterfaces, TUNNEL_VIEW_ID } from 'vs/workbench/services/remote/common/remoteExplorerService';
import { forwardedPortsViewEnabled, ForwardPortAction, OpenPortInBrowserAction, TunnelPanel, TunnelPanelDescriptor, TunnelViewModel } from 'vs/workbench/contrib/remote/browser/tunnelView';
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
@ -25,17 +25,21 @@ import { RemoteTunnel } from 'vs/platform/remote/common/tunnel';
import { Codicon } from 'vs/base/common/codicons';
import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors';
import { ViewPaneContainer } from 'vs/workbench/browser/parts/views/viewPaneContainer';
import { IActivityService, NumberBadge } from 'vs/workbench/services/activity/common/activity';
export const VIEWLET_ID = 'workbench.view.remote';
export class ForwardedPortsView extends Disposable implements IWorkbenchContribution {
private contextKeyListener?: IDisposable;
private _activityBadge?: IDisposable;
private entryAccessor: IStatusbarEntryAccessor | undefined;
constructor(
@IContextKeyService private readonly contextKeyService: IContextKeyService,
@IWorkbenchEnvironmentService private readonly environmentService: IWorkbenchEnvironmentService,
@IRemoteExplorerService private readonly remoteExplorerService: IRemoteExplorerService,
@IViewDescriptorService private readonly viewDescriptorService: IViewDescriptorService,
@IActivityService private readonly activityService: IActivityService,
@IStatusbarService private readonly statusbarService: IStatusbarService
) {
super();
@ -82,18 +86,35 @@ export class ForwardedPortsView extends Disposable implements IWorkbenchContribu
const disposable = Registry.as<IViewsRegistry>(Extensions.ViewsRegistry).onViewsRegistered(e => {
if (e.find(view => view.views.find(viewDescriptor => viewDescriptor.id === TUNNEL_VIEW_ID))) {
this._register(this.remoteExplorerService.tunnelModel.onForwardPort(() => {
this.updateActivityBadge();
this.updateStatusBar();
}));
this._register(this.remoteExplorerService.tunnelModel.onClosePort(() => {
this.updateActivityBadge();
this.updateStatusBar();
}));
this.updateActivityBadge();
this.updateStatusBar();
disposable.dispose();
}
});
}
private updateActivityBadge() {
if (this._activityBadge) {
this._activityBadge.dispose();
}
if (this.remoteExplorerService.tunnelModel.forwarded.size > 0) {
const viewContainer = this.viewDescriptorService.getViewContainerByViewId(TUNNEL_VIEW_ID);
if (viewContainer) {
this._activityBadge = this.activityService.showViewContainerActivity(viewContainer.id, {
badge: new NumberBadge(this.remoteExplorerService.tunnelModel.forwarded.size, n => n === 1 ? nls.localize('1forwardedPort', "1 forwarded port") : nls.localize('nForwardedPorts', "{0} forwarded ports", n))
});
}
}
}
private updateStatusBar() {
if (!this.entryAccessor) {
this._register(this.entryAccessor = this.statusbarService.addEntry(this.entry, 'status.forwardedPorts', nls.localize('status.forwardedPorts', "Forwarded Ports"), StatusbarAlignment.LEFT, 40));
@ -106,15 +127,10 @@ export class ForwardedPortsView extends Disposable implements IWorkbenchContribu
let text: string;
let tooltip: string;
const count = this.remoteExplorerService.tunnelModel.forwarded.size + this.remoteExplorerService.tunnelModel.detected.size;
text = `${count}`;
if (count === 0) {
text = nls.localize('remote.forwardedPorts.statusbarTextNone', "No Ports Forwarded");
tooltip = text;
tooltip = nls.localize('remote.forwardedPorts.statusbarTextNone', "No Ports Forwarded");
} else {
if (count === 1) {
text = nls.localize('remote.forwardedPorts.statusbarTextSingle', "1 Port Forwarded");
} else {
text = nls.localize('remote.forwardedPorts.statusbarTextMultiple', "{0} Ports Forwarded", count);
}
const allTunnels = Array.from(this.remoteExplorerService.tunnelModel.forwarded.values());
allTunnels.push(...Array.from(this.remoteExplorerService.tunnelModel.detected.values()));
tooltip = nls.localize('remote.forwardedPorts.statusbarTooltip', "Forwarded Ports: {0}",