@@ -416,8 +416,11 @@ class Extensions extends Disposable {
416
416
extension . deprecationInfo = extensionsControlManifest . deprecated ? extensionsControlManifest . deprecated [ extension . identifier . id . toLowerCase ( ) ] : undefined ;
417
417
}
418
418
419
- private readonly _onChange : Emitter < { extension : Extension ; operation ?: InstallOperation } | undefined > = this . _register ( new Emitter < { extension : Extension ; operation ?: InstallOperation } | undefined > ( ) ) ;
420
- get onChange ( ) : Event < { extension : Extension ; operation ?: InstallOperation } | undefined > { return this . _onChange . event ; }
419
+ private readonly _onChange = this . _register ( new Emitter < { extension : Extension ; operation ?: InstallOperation } | undefined > ( ) ) ;
420
+ get onChange ( ) { return this . _onChange . event ; }
421
+
422
+ private readonly _onReset = this . _register ( new Emitter < void > ( ) ) ;
423
+ get onReset ( ) { return this . _onReset . event ; }
421
424
422
425
private installing : Extension [ ] = [ ] ;
423
426
private uninstalling : Extension [ ] = [ ] ;
@@ -435,6 +438,7 @@ class Extensions extends Disposable {
435
438
this . _register ( server . extensionManagementService . onDidInstallExtensions ( e => this . onDidInstallExtensions ( e ) ) ) ;
436
439
this . _register ( server . extensionManagementService . onUninstallExtension ( e => this . onUninstallExtension ( e . identifier ) ) ) ;
437
440
this . _register ( server . extensionManagementService . onDidUninstallExtension ( e => this . onDidUninstallExtension ( e ) ) ) ;
441
+ this . _register ( server . extensionManagementService . onDidChangeProfileExtensions ( e => this . onDidChangeProfileExtensions ( e . added , e . removed ) ) ) ;
438
442
this . _register ( extensionEnablementService . onEnablementChanged ( e => this . onEnablementChanged ( e ) ) ) ;
439
443
}
440
444
@@ -554,6 +558,23 @@ class Extensions extends Disposable {
554
558
}
555
559
}
556
560
561
+ private async onDidChangeProfileExtensions ( added : ILocalExtension [ ] , removed : ILocalExtension [ ] ) : Promise < void > {
562
+ const extensionsControlManifest = await this . server . extensionManagementService . getExtensionsControlManifest ( ) ;
563
+ for ( const addedExtension of added ) {
564
+ if ( this . installed . find ( e => areSameExtensions ( e . identifier , addedExtension . identifier ) ) ) {
565
+ const extension = this . instantiationService . createInstance ( Extension , this . stateProvider , this . server , addedExtension , undefined ) ;
566
+ this . installed . push ( extension ) ;
567
+ Extensions . updateExtensionFromControlManifest ( extension , extensionsControlManifest ) ;
568
+ }
569
+ }
570
+
571
+ if ( removed . length ) {
572
+ this . installed = this . installed . filter ( e => ! removed . some ( removedExtension => areSameExtensions ( e . identifier , removedExtension . identifier ) ) ) ;
573
+ }
574
+
575
+ this . _onReset . fire ( ) ;
576
+ }
577
+
557
578
private async onDidInstallExtensions ( results : readonly InstallExtensionResult [ ] ) : Promise < void > {
558
579
for ( const event of results ) {
559
580
const { local, source } = event ;
@@ -660,6 +681,9 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension
660
681
private readonly _onChange : Emitter < IExtension | undefined > = new Emitter < IExtension | undefined > ( ) ;
661
682
get onChange ( ) : Event < IExtension | undefined > { return this . _onChange . event ; }
662
683
684
+ private readonly _onReset = new Emitter < void > ( ) ;
685
+ get onReset ( ) { return this . _onReset . event ; }
686
+
663
687
readonly preferPreReleases = this . productService . quality !== 'stable' ;
664
688
665
689
private installing : IExtension [ ] = [ ] ;
@@ -696,14 +720,17 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension
696
720
if ( extensionManagementServerService . localExtensionManagementServer ) {
697
721
this . localExtensions = this . _register ( instantiationService . createInstance ( Extensions , extensionManagementServerService . localExtensionManagementServer , ext => this . getExtensionState ( ext ) ) ) ;
698
722
this . _register ( this . localExtensions . onChange ( e => this . _onChange . fire ( e ? e . extension : undefined ) ) ) ;
723
+ this . _register ( this . localExtensions . onReset ( e => { this . _onChange . fire ( undefined ) ; this . _onReset . fire ( ) ; } ) ) ;
699
724
}
700
725
if ( extensionManagementServerService . remoteExtensionManagementServer ) {
701
726
this . remoteExtensions = this . _register ( instantiationService . createInstance ( Extensions , extensionManagementServerService . remoteExtensionManagementServer , ext => this . getExtensionState ( ext ) ) ) ;
702
727
this . _register ( this . remoteExtensions . onChange ( e => this . _onChange . fire ( e ? e . extension : undefined ) ) ) ;
728
+ this . _register ( this . remoteExtensions . onReset ( e => { this . _onChange . fire ( undefined ) ; this . _onReset . fire ( ) ; } ) ) ;
703
729
}
704
730
if ( extensionManagementServerService . webExtensionManagementServer ) {
705
731
this . webExtensions = this . _register ( instantiationService . createInstance ( Extensions , extensionManagementServerService . webExtensionManagementServer , ext => this . getExtensionState ( ext ) ) ) ;
706
732
this . _register ( this . webExtensions . onChange ( e => this . _onChange . fire ( e ? e . extension : undefined ) ) ) ;
733
+ this . _register ( this . webExtensions . onReset ( e => { this . _onChange . fire ( undefined ) ; this . _onReset . fire ( ) ; } ) ) ;
707
734
}
708
735
709
736
this . updatesCheckDelayer = new ThrottledDelayer < void > ( ExtensionsWorkbenchService . UpdatesCheckInterval ) ;
0 commit comments