5
5
6
6
import 'vs/css!./media/extensionEditor' ;
7
7
import { localize } from 'vs/nls' ;
8
- import { createCancelablePromise } from 'vs/base/common/async' ;
8
+ import { CancelablePromise , createCancelablePromise } from 'vs/base/common/async' ;
9
9
import * as arrays from 'vs/base/common/arrays' ;
10
10
import { OS } from 'vs/base/common/platform' ;
11
11
import { Event , Emitter } from 'vs/base/common/event' ;
@@ -223,6 +223,7 @@ export class ExtensionEditor extends EditorPane {
223
223
this . extensionEditorWidget = this . _register ( new class extends Disposable implements IExtensionEditorWidget {
224
224
private gallery : IGalleryExtension | undefined = undefined ;
225
225
private extension : IExtension | undefined = undefined ;
226
+ private updatePromise : CancelablePromise < void > | undefined ;
226
227
constructor ( ) {
227
228
super ( ) ;
228
229
this . _register ( that . extensionsWorkbenchService . onChange ( e => {
@@ -238,7 +239,8 @@ export class ExtensionEditor extends EditorPane {
238
239
this . extension = extension ;
239
240
this . gallery = gallery ;
240
241
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 ) ) ;
242
244
}
243
245
}
244
246
} ( ) ) ;
@@ -408,7 +410,7 @@ export class ExtensionEditor extends EditorPane {
408
410
}
409
411
}
410
412
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 > {
412
414
this . activeElement = null ;
413
415
this . editorLoadComplete = false ;
414
416
@@ -419,9 +421,9 @@ export class ExtensionEditor extends EditorPane {
419
421
420
422
this . transientDisposables . clear ( ) ;
421
423
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 ) ) ;
425
427
426
428
const remoteBadge = this . instantiationService . createInstance ( RemoteBadgeWidget , template . iconContainer , true ) ;
427
429
this . transientDisposables . add ( addDisposableListener ( template . icon , 'error' , ( ) => template . icon . src = extension . iconUrlFallback , { once : true } ) ) ;
@@ -474,6 +476,15 @@ export class ExtensionEditor extends EditorPane {
474
476
} ) ) ;
475
477
}
476
478
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
+
477
488
const widgets = [
478
489
remoteBadge ,
479
490
this . instantiationService . createInstance ( InstallCountWidget , template . installCount , false ) ,
@@ -485,9 +496,9 @@ export class ExtensionEditor extends EditorPane {
485
496
reloadAction ,
486
497
this . instantiationService . createInstance ( ExtensionStatusLabelAction ) ,
487
498
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 ) ,
491
502
492
503
this . instantiationService . createInstance ( EnableDropDownAction ) ,
493
504
this . instantiationService . createInstance ( DisableDropDownAction ) ,
@@ -535,6 +546,10 @@ export class ExtensionEditor extends EditorPane {
535
546
}
536
547
537
548
const manifest = await this . extensionManifest . get ( ) . promise ;
549
+ if ( token . isCancellationRequested ) {
550
+ return ;
551
+ }
552
+
538
553
if ( manifest ) {
539
554
combinedInstallAction . manifest = manifest ;
540
555
}
0 commit comments