Skip to content

Commit 40b8a2d

Browse files
authored
1 parent b2f55de commit 40b8a2d

File tree

1 file changed

+20
-17
lines changed

1 file changed

+20
-17
lines changed

src/vs/workbench/services/extensionManagement/browser/extensionEnablementService.ts

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ export class ExtensionEnablementService extends Disposable implements IWorkbench
7171
this.extensionsManager = this._register(instantiationService.createInstance(ExtensionsManager));
7272
this.extensionsManager.whenInitialized().then(() => {
7373
if (!isDisposed) {
74-
this._register(this.extensionsManager.onDidChangeExtensions(({ added, removed }) => this._onDidChangeExtensions(added, removed)));
74+
this._register(this.extensionsManager.onDidChangeExtensions(({ added, removed, isProfileSwitch }) => this._onDidChangeExtensions(added, removed, isProfileSwitch)));
7575
uninstallDisposable.dispose();
7676
}
7777
});
@@ -618,12 +618,14 @@ export class ExtensionEnablementService extends Disposable implements IWorkbench
618618
}
619619
}
620620

621-
private _onDidChangeExtensions(added: ReadonlyArray<IExtension>, removed: ReadonlyArray<IExtension>): void {
621+
private _onDidChangeExtensions(added: ReadonlyArray<IExtension>, removed: ReadonlyArray<IExtension>, isProfileSwitch: boolean): void {
622622
const disabledExtensions = added.filter(e => !this.isEnabledEnablementState(this.getEnablementState(e)));
623623
if (disabledExtensions.length) {
624624
this._onEnablementChanged.fire(disabledExtensions);
625625
}
626-
removed.forEach(({ identifier }) => this._reset(identifier));
626+
if (!isProfileSwitch) {
627+
removed.forEach(({ identifier }) => this._reset(identifier));
628+
}
627629
}
628630

629631
public async updateExtensionsEnablementsWhenWorkspaceTrustChanges(): Promise<void> {
@@ -660,7 +662,7 @@ class ExtensionsManager extends Disposable {
660662
private _extensions: IExtension[] = [];
661663
get extensions(): readonly IExtension[] { return this._extensions; }
662664

663-
private _onDidChangeExtensions = this._register(new Emitter<{ added: readonly IExtension[]; removed: readonly IExtension[] }>());
665+
private _onDidChangeExtensions = this._register(new Emitter<{ added: readonly IExtension[]; removed: readonly IExtension[]; readonly isProfileSwitch: boolean }>());
664666
readonly onDidChangeExtensions = this._onDidChangeExtensions.event;
665667

666668
private readonly initializePromise;
@@ -686,32 +688,33 @@ class ExtensionsManager extends Disposable {
686688
if (this.disposed) {
687689
return;
688690
}
689-
this._onDidChangeExtensions.fire({ added: this.extensions, removed: [] });
691+
this._onDidChangeExtensions.fire({ added: this.extensions, removed: [], isProfileSwitch: false });
690692
} catch (error) {
691693
this.logService.error(error);
692694
}
693-
this._register(this.extensionManagementService.onDidInstallExtensions(e => this.onDidInstallExtensions(e.reduce<IExtension[]>((result, { local, operation }) => { if (local && operation !== InstallOperation.Migrate) { result.push(local); } return result; }, []))));
694-
this._register(Event.filter(this.extensionManagementService.onDidUninstallExtension, (e => !e.error))(e => this.onDidUninstallExtensions([e.identifier], e.server)));
695-
this._register(this.extensionManagementService.onDidChangeProfile(({ added, removed, server }) => { this.onDidInstallExtensions(added); this.onDidUninstallExtensions(removed.map(({ identifier }) => identifier), server); }));
695+
this._register(this.extensionManagementService.onDidInstallExtensions(e =>
696+
this.updateExtensions(e.reduce<IExtension[]>((result, { local, operation }) => {
697+
if (local && operation !== InstallOperation.Migrate) { result.push(local); } return result;
698+
}, []), [], undefined, false)));
699+
this._register(Event.filter(this.extensionManagementService.onDidUninstallExtension, (e => !e.error))(e => this.updateExtensions([], [e.identifier], e.server, false)));
700+
this._register(this.extensionManagementService.onDidChangeProfile(({ added, removed, server }) => {
701+
this.updateExtensions(added, removed.map(({ identifier }) => identifier), server, true);
702+
}));
696703
}
697704

698-
private onDidInstallExtensions(extensions: IExtension[]): void {
699-
if (extensions.length) {
700-
this._extensions.push(...extensions);
701-
this._onDidChangeExtensions.fire({ added: extensions, removed: [] });
705+
private updateExtensions(added: IExtension[], identifiers: IExtensionIdentifier[], server: IExtensionManagementServer | undefined, isProfileSwitch: boolean): void {
706+
if (added.length) {
707+
this._extensions.push(...added);
702708
}
703-
}
704-
705-
private onDidUninstallExtensions(identifiers: IExtensionIdentifier[], server: IExtensionManagementServer): void {
706709
const removed: IExtension[] = [];
707710
for (const identifier of identifiers) {
708711
const index = this._extensions.findIndex(e => areSameExtensions(e.identifier, identifier) && this.extensionManagementServerService.getExtensionManagementServer(e) === server);
709712
if (index !== -1) {
710713
removed.push(...this._extensions.splice(index, 1));
711714
}
712715
}
713-
if (removed.length) {
714-
this._onDidChangeExtensions.fire({ added: [], removed });
716+
if (added.length || removed.length) {
717+
this._onDidChangeExtensions.fire({ added, removed, isProfileSwitch });
715718
}
716719
}
717720
}

0 commit comments

Comments
 (0)