diff --git a/src/vs/workbench/contrib/extensions/browser/extensionRecommendationNotificationService.ts b/src/vs/workbench/contrib/extensions/browser/extensionRecommendationNotificationService.ts index 8aa220ac14f06f9eec55972cec2d627b55027e8c..a3e55134b19ccada93cf7c7d5a44bd44d47972fc 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensionRecommendationNotificationService.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensionRecommendationNotificationService.ts @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { IAction } from 'vs/base/common/actions'; +import { distinct } from 'vs/base/common/arrays'; import { CancellationToken } from 'vs/base/common/cancellation'; import { localize } from 'vs/nls'; import { ConfigurationTarget, IConfigurationService } from 'vs/platform/configuration/common/configuration'; @@ -38,7 +39,7 @@ type ExtensionWorkspaceRecommendationsNotificationClassification = { userReaction: { classification: 'SystemMetaData', purpose: 'FeatureInsight' }; }; -const ignoreImportantExtensionRecommendation = 'extensionsAssistant/importantRecommendationsIgnore'; +const ignoreImportantExtensionRecommendationStorageKey = 'extensionsAssistant/importantRecommendationsIgnore'; const ignoreWorkspaceRecommendationsStorageKey = 'extensionsAssistant/workspaceRecommendationsIgnore'; const choiceNever = localize('neverShowAgain', "Don't Show Again"); @@ -50,7 +51,7 @@ export class ExtensionRecommendationNotificationService implements IExtensionRec // Ignored Important Recommendations get ignoredRecommendations(): string[] { - return [...(JSON.parse(this.storageService.get(ignoreImportantExtensionRecommendation, StorageScope.GLOBAL, '[]')))].map(i => i.toLowerCase()); + return distinct([...(JSON.parse(this.storageService.get(ignoreImportantExtensionRecommendationStorageKey, StorageScope.GLOBAL, '[]')))].map(i => i.toLowerCase())); } constructor( @@ -66,7 +67,7 @@ export class ExtensionRecommendationNotificationService implements IExtensionRec @IStorageKeysSyncRegistryService storageKeysSyncRegistryService: IStorageKeysSyncRegistryService, @optional(ITASExperimentService) tasExperimentService: ITASExperimentService, ) { - storageKeysSyncRegistryService.registerStorageKey({ key: ignoreImportantExtensionRecommendation, version: 1 }); + storageKeysSyncRegistryService.registerStorageKey({ key: ignoreImportantExtensionRecommendationStorageKey, version: 1 }); this.tasExperimentService = tasExperimentService; } @@ -80,7 +81,8 @@ export class ExtensionRecommendationNotificationService implements IExtensionRec return false; } - extensionIds = this.filterIgnoredOrNotAllowed(extensionIds); + const ignoredRecommendations = [...this.extensionIgnoredRecommendationsService.ignoredRecommendations, ...this.ignoredRecommendations]; + extensionIds = extensionIds.filter(id => !ignoredRecommendations.includes(id)); if (!extensionIds.length) { return false; } @@ -221,11 +223,6 @@ export class ExtensionRecommendationNotificationService implements IExtensionRec return extensions; } - private filterIgnoredOrNotAllowed(recommendationsToSuggest: string[]): string[] { - const ignoredRecommendations = [...this.extensionIgnoredRecommendationsService.ignoredRecommendations, ...this.ignoredRecommendations]; - return recommendationsToSuggest.filter(id => !ignoredRecommendations.includes(id)); - } - private async runAction(action: IAction): Promise { try { await action.run(); @@ -235,9 +232,11 @@ export class ExtensionRecommendationNotificationService implements IExtensionRec } private addToImportantRecommendationsIgnore(id: string) { - const importantRecommendationsIgnoreList = JSON.parse(this.storageService.get(ignoreImportantExtensionRecommendation, StorageScope.GLOBAL, '[]')); - importantRecommendationsIgnoreList.push(id.toLowerCase()); - this.storageService.store(ignoreImportantExtensionRecommendation, JSON.stringify(importantRecommendationsIgnoreList), StorageScope.GLOBAL); + const importantRecommendationsIgnoreList = [...this.ignoredRecommendations]; + if (!importantRecommendationsIgnoreList.includes(id.toLowerCase())) { + importantRecommendationsIgnoreList.push(id.toLowerCase()); + this.storageService.store(ignoreImportantExtensionRecommendationStorageKey, JSON.stringify(importantRecommendationsIgnoreList), StorageScope.GLOBAL); + } } private setIgnoreRecommendationsConfig(configVal: boolean) {