From eb4ebee6a3310df8ff5f36f78f209c2658cfcdfc Mon Sep 17 00:00:00 2001 From: Eric Amodio Date: Wed, 11 Mar 2020 00:33:14 -0400 Subject: [PATCH] Closes #92421 - view-level progress api --- src/vs/platform/progress/common/progress.ts | 3 ++- src/vs/vscode.proposed.d.ts | 20 +++++++++++++++++++ .../workbench/api/common/extHost.api.impl.ts | 3 +++ .../workbench/api/common/extHostProgress.ts | 5 +++-- .../api/common/extHostTypeConverters.ts | 3 ++- src/vs/workbench/api/common/extHostTypes.ts | 3 ++- 6 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/vs/platform/progress/common/progress.ts b/src/vs/platform/progress/common/progress.ts index b6ff5e5057b..5fa930eabfb 100644 --- a/src/vs/platform/progress/common/progress.ts +++ b/src/vs/platform/progress/common/progress.ts @@ -45,7 +45,8 @@ export const enum ProgressLocation { Extensions = 5, Window = 10, Notification = 15, - Dialog = 20 + Dialog = 20, + View = 25 } export interface IProgressOptions { diff --git a/src/vs/vscode.proposed.d.ts b/src/vs/vscode.proposed.d.ts index 0d9833c52ab..ad5823c8585 100644 --- a/src/vs/vscode.proposed.d.ts +++ b/src/vs/vscode.proposed.d.ts @@ -1824,4 +1824,24 @@ declare module 'vscode' { } //#endregion + + //#region https://github.com/microsoft/vscode/issues/92421 + + export enum ProgressLocation { + /** + * Show progress for a view, as progress bar inside the view (when visible), + * and as an overlay on the activity bar icon. Doesn't support cancellation or discrete progress. + */ + View = 25, + } + + export interface ProgressOptions { + /** + * The target view identifier for showing progress when using [ProgressLocation.View](#ProgressLocation.View). + */ + viewId?: string + } + + //#endregion + } diff --git a/src/vs/workbench/api/common/extHost.api.impl.ts b/src/vs/workbench/api/common/extHost.api.impl.ts index 1204423f3b8..a95e4ac7b1e 100644 --- a/src/vs/workbench/api/common/extHost.api.impl.ts +++ b/src/vs/workbench/api/common/extHost.api.impl.ts @@ -540,6 +540,9 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I return extHostProgress.withProgress(extension, { location: extHostTypes.ProgressLocation.SourceControl }, (progress, token) => task({ report(n: number) { /*noop*/ } })); }, withProgress(options: vscode.ProgressOptions, task: (progress: vscode.Progress<{ message?: string; worked?: number }>, token: vscode.CancellationToken) => Thenable) { + if (options.location === extHostTypes.ProgressLocation.View) { + checkProposedApiEnabled(extension); + } return extHostProgress.withProgress(extension, options, task); }, createOutputChannel(name: string): vscode.OutputChannel { diff --git a/src/vs/workbench/api/common/extHostProgress.ts b/src/vs/workbench/api/common/extHostProgress.ts index 27a4e145c42..ef5e614e5b9 100644 --- a/src/vs/workbench/api/common/extHostProgress.ts +++ b/src/vs/workbench/api/common/extHostProgress.ts @@ -24,9 +24,10 @@ export class ExtHostProgress implements ExtHostProgressShape { withProgress(extension: IExtensionDescription, options: ProgressOptions, task: (progress: Progress, token: CancellationToken) => Thenable): Thenable { const handle = this._handles++; - const { title, location, cancellable } = options; + const { title, location, cancellable, viewId } = options; const source = localize('extensionSource', "{0} (Extension)", extension.displayName || extension.name); - this._proxy.$startProgress(handle, { location: ProgressLocation.from(location), title, source, cancellable }, extension); + + this._proxy.$startProgress(handle, { location: ProgressLocation.from(location, viewId), title, source, cancellable }, extension); return this._withProgress(handle, task, !!cancellable); } diff --git a/src/vs/workbench/api/common/extHostTypeConverters.ts b/src/vs/workbench/api/common/extHostTypeConverters.ts index 38154ceca2e..e443f9335d7 100644 --- a/src/vs/workbench/api/common/extHostTypeConverters.ts +++ b/src/vs/workbench/api/common/extHostTypeConverters.ts @@ -1093,11 +1093,12 @@ export namespace EndOfLine { } export namespace ProgressLocation { - export function from(loc: vscode.ProgressLocation): MainProgressLocation { + export function from(loc: vscode.ProgressLocation, viewId?: string): MainProgressLocation | string { switch (loc) { case types.ProgressLocation.SourceControl: return MainProgressLocation.Scm; case types.ProgressLocation.Window: return MainProgressLocation.Window; case types.ProgressLocation.Notification: return MainProgressLocation.Notification; + case types.ProgressLocation.View: return viewId ?? ''; } throw new Error(`Unknown 'ProgressLocation'`); } diff --git a/src/vs/workbench/api/common/extHostTypes.ts b/src/vs/workbench/api/common/extHostTypes.ts index 0c62c89ad01..2c6cc5423d6 100644 --- a/src/vs/workbench/api/common/extHostTypes.ts +++ b/src/vs/workbench/api/common/extHostTypes.ts @@ -2082,7 +2082,8 @@ export class Task implements vscode.Task2 { export enum ProgressLocation { SourceControl = 1, Window = 10, - Notification = 15 + Notification = 15, + View = 25 } @es5ClassCompat -- GitLab