Skip to content

Commit cca3e81

Browse files
committed
1 parent 0573777 commit cca3e81

File tree

1 file changed

+24
-9
lines changed

1 file changed

+24
-9
lines changed

src/vs/workbench/contrib/extensions/browser/extensionEditor.ts

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import 'vs/css!./media/extensionEditor';
77
import { localize } from 'vs/nls';
8-
import { createCancelablePromise } from 'vs/base/common/async';
8+
import { CancelablePromise, createCancelablePromise } from 'vs/base/common/async';
99
import * as arrays from 'vs/base/common/arrays';
1010
import { OS } from 'vs/base/common/platform';
1111
import { Event, Emitter } from 'vs/base/common/event';
@@ -223,6 +223,7 @@ export class ExtensionEditor extends EditorPane {
223223
this.extensionEditorWidget = this._register(new class extends Disposable implements IExtensionEditorWidget {
224224
private gallery: IGalleryExtension | undefined = undefined;
225225
private extension: IExtension | undefined = undefined;
226+
private updatePromise: CancelablePromise<void> | undefined;
226227
constructor() {
227228
super();
228229
this._register(that.extensionsWorkbenchService.onChange(e => {
@@ -238,7 +239,8 @@ export class ExtensionEditor extends EditorPane {
238239
this.extension = extension;
239240
this.gallery = gallery;
240241
if (that.template) {
241-
that.updateTemplate(this.extension, this.gallery, that.template, !!preserveFocus);
242+
this.updatePromise?.cancel();
243+
this.updatePromise = createCancelablePromise(token => that.updateTemplate(this.extension!, this.gallery, that.template!, !!preserveFocus, token));
242244
}
243245
}
244246
}());
@@ -408,7 +410,7 @@ export class ExtensionEditor extends EditorPane {
408410
}
409411
}
410412

411-
private async updateTemplate(extension: IExtension, gallery: IGalleryExtension | undefined, template: IExtensionEditorTemplate, preserveFocus: boolean): Promise<void> {
413+
private async updateTemplate(extension: IExtension, gallery: IGalleryExtension | undefined, template: IExtensionEditorTemplate, preserveFocus: boolean, token: CancellationToken): Promise<void> {
412414
this.activeElement = null;
413415
this.editorLoadComplete = false;
414416

@@ -419,9 +421,9 @@ export class ExtensionEditor extends EditorPane {
419421

420422
this.transientDisposables.clear();
421423

422-
this.extensionReadme = new Cache(() => createCancelablePromise(token => extension.getReadme(!!this.showPreReleaseVersionContextKey?.get(), token)));
423-
this.extensionChangelog = new Cache(() => createCancelablePromise(token => extension.getChangelog(!!this.showPreReleaseVersionContextKey?.get(), token)));
424-
this.extensionManifest = new Cache(() => createCancelablePromise(token => extension.getManifest(!!this.showPreReleaseVersionContextKey?.get(), token)));
424+
this.extensionReadme = new Cache(() => extension.getReadme(!!this.showPreReleaseVersionContextKey?.get(), token));
425+
this.extensionChangelog = new Cache(() => extension.getChangelog(!!this.showPreReleaseVersionContextKey?.get(), token));
426+
this.extensionManifest = new Cache(() => extension.getManifest(!!this.showPreReleaseVersionContextKey?.get(), token));
425427

426428
const remoteBadge = this.instantiationService.createInstance(RemoteBadgeWidget, template.iconContainer, true);
427429
this.transientDisposables.add(addDisposableListener(template.icon, 'error', () => template.icon.src = extension.iconUrlFallback, { once: true }));
@@ -474,6 +476,15 @@ export class ExtensionEditor extends EditorPane {
474476
}));
475477
}
476478

479+
const [colorThemes, fileIconThemes, productIconThemes] = await Promise.all([
480+
this.workbenchThemeService.getColorThemes(),
481+
this.workbenchThemeService.getFileIconThemes(),
482+
this.workbenchThemeService.getProductIconThemes(),
483+
]);
484+
if (token.isCancellationRequested) {
485+
return;
486+
}
487+
477488
const widgets = [
478489
remoteBadge,
479490
this.instantiationService.createInstance(InstallCountWidget, template.installCount, false),
@@ -485,9 +496,9 @@ export class ExtensionEditor extends EditorPane {
485496
reloadAction,
486497
this.instantiationService.createInstance(ExtensionStatusLabelAction),
487498
this.instantiationService.createInstance(UpdateAction),
488-
this.instantiationService.createInstance(SetColorThemeAction, await this.workbenchThemeService.getColorThemes()),
489-
this.instantiationService.createInstance(SetFileIconThemeAction, await this.workbenchThemeService.getFileIconThemes()),
490-
this.instantiationService.createInstance(SetProductIconThemeAction, await this.workbenchThemeService.getProductIconThemes()),
499+
this.instantiationService.createInstance(SetColorThemeAction, colorThemes),
500+
this.instantiationService.createInstance(SetFileIconThemeAction, fileIconThemes),
501+
this.instantiationService.createInstance(SetProductIconThemeAction, productIconThemes),
491502

492503
this.instantiationService.createInstance(EnableDropDownAction),
493504
this.instantiationService.createInstance(DisableDropDownAction),
@@ -535,6 +546,10 @@ export class ExtensionEditor extends EditorPane {
535546
}
536547

537548
const manifest = await this.extensionManifest.get().promise;
549+
if (token.isCancellationRequested) {
550+
return;
551+
}
552+
538553
if (manifest) {
539554
combinedInstallAction.manifest = manifest;
540555
}

0 commit comments

Comments
 (0)