From 8d9356eaa5b9bb65d7a7fd0b2d625cc796ee6886 Mon Sep 17 00:00:00 2001 From: Martin Aeschlimann Date: Mon, 30 Sep 2019 14:44:17 +0200 Subject: [PATCH] Telemetry when exe recommendation is already installed --- .../browser/extensionTipsService.ts | 42 ++++++++++++++++--- 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/src/vs/workbench/contrib/extensions/browser/extensionTipsService.ts b/src/vs/workbench/contrib/extensions/browser/extensionTipsService.ts index b106359a0df..9f40f30c4ca 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensionTipsService.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensionTipsService.ts @@ -513,9 +513,26 @@ export class ExtensionTipsService extends Disposable implements IExtensionTipsSe return false; } - const installed = await this.extensionManagementService.getInstalled(ExtensionType.User); let recommendationsToSuggest = Object.keys(this._importantExeBasedRecommendations); - recommendationsToSuggest = this.filterAllIgnoredInstalledAndNotAllowed(recommendationsToSuggest, installed); + + const installed = await this.extensionManagementService.getInstalled(ExtensionType.User); + recommendationsToSuggest = this.filterInstalled(recommendationsToSuggest, installed, (extensionId) => { + const tip = this._importantExeBasedRecommendations[extensionId]; + + /* __GDPR__ + exeExtensionRecommendations:alreadyInstalled" : { + "extensionId": { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" }, + "exeName": { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" } + } + */ + this.telemetryService.publicLog('exeExtensionRecommendations:alreadyInstalled', { extensionId, exeName: tip.exeFriendlyName || basename(tip.windowsPath!) }); + + }); + if (recommendationsToSuggest.length === 0) { + return false; + } + + recommendationsToSuggest = this.filterIgnoredOrNotAllowed(recommendationsToSuggest); if (recommendationsToSuggest.length === 0) { return false; } @@ -747,7 +764,12 @@ export class ExtensionTipsService extends Disposable implements IExtensionTipsSe private async promptRecommendedExtensionForFileType(recommendationsToSuggest: string[], installed: ILocalExtension[]): Promise { - recommendationsToSuggest = this.filterAllIgnoredInstalledAndNotAllowed(recommendationsToSuggest, installed); + recommendationsToSuggest = this.filterIgnoredOrNotAllowed(recommendationsToSuggest); + if (recommendationsToSuggest.length === 0) { + return false; + } + + recommendationsToSuggest = this.filterInstalled(recommendationsToSuggest, installed); if (recommendationsToSuggest.length === 0) { return false; } @@ -903,10 +925,8 @@ export class ExtensionTipsService extends Disposable implements IExtensionTipsSe ); } - private filterAllIgnoredInstalledAndNotAllowed(recommendationsToSuggest: string[], installed: ILocalExtension[]): string[] { - + private filterIgnoredOrNotAllowed(recommendationsToSuggest: string[]): string[] { const importantRecommendationsIgnoreList = JSON.parse(this.storageService.get('extensionsAssistant/importantRecommendationsIgnore', StorageScope.GLOBAL, '[]')); - const installedExtensionsIds = installed.reduce((result, i) => { result.add(i.identifier.id.toLowerCase()); return result; }, new Set()); return recommendationsToSuggest.filter(id => { if (importantRecommendationsIgnoreList.indexOf(id) !== -1) { return false; @@ -914,7 +934,17 @@ export class ExtensionTipsService extends Disposable implements IExtensionTipsSe if (!this.isExtensionAllowedToBeRecommended(id)) { return false; } + return true; + }); + } + + private filterInstalled(recommendationsToSuggest: string[], installed: ILocalExtension[], onAlreadyInstalled?: (id: string) => void): string[] { + const installedExtensionsIds = installed.reduce((result, i) => { result.add(i.identifier.id.toLowerCase()); return result; }, new Set()); + return recommendationsToSuggest.filter(id => { if (installedExtensionsIds.has(id.toLowerCase())) { + if (onAlreadyInstalled) { + onAlreadyInstalled(id); + } return false; } return true; -- GitLab