提交 3b798fd8 编写于 作者: R Ramya Achutha Rao

Remove avoidable dependency of tipsservice in extworkbenchservice

上级 fce9e3de
......@@ -10,7 +10,10 @@ import { forEach } from 'vs/base/common/collections';
import { IDisposable, dispose, Disposable } from 'vs/base/common/lifecycle';
import { match } from 'vs/base/common/glob';
import * as json from 'vs/base/common/json';
import { IExtensionManagementService, IExtensionGalleryService, IExtensionTipsService, ExtensionRecommendationReason, LocalExtensionType, EXTENSION_IDENTIFIER_PATTERN, IIgnoredRecommendations, IExtensionsConfigContent, RecommendationChangeNotification } from 'vs/platform/extensionManagement/common/extensionManagement';
import {
IExtensionManagementService, IExtensionGalleryService, IExtensionTipsService, ExtensionRecommendationReason, LocalExtensionType, EXTENSION_IDENTIFIER_PATTERN,
IIgnoredRecommendations, IExtensionsConfigContent, RecommendationChangeNotification, InstallOperation
} from 'vs/platform/extensionManagement/common/extensionManagement';
import { IModelService } from 'vs/editor/common/services/modelService';
import { ITextModel } from 'vs/editor/common/model';
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
......@@ -37,6 +40,7 @@ import { isNumber } from 'vs/base/common/types';
import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet';
import { INotificationService } from 'vs/platform/notification/common/notification';
import { Emitter, Event } from 'vs/base/common/event';
import { assign } from 'vs/base/common/objects';
const empty: { [key: string]: any; } = Object.create(null);
const milliSecondsInADay = 1000 * 60 * 60 * 24;
......@@ -92,7 +96,8 @@ export class ExtensionTipsService extends Disposable implements IExtensionTipsSe
@IExtensionService private extensionService: IExtensionService,
@IRequestService private requestService: IRequestService,
@IViewletService private viewletService: IViewletService,
@INotificationService private notificationService: INotificationService
@INotificationService private notificationService: INotificationService,
@IExtensionManagementService private extensionManagementService: IExtensionManagementService
) {
super();
......@@ -128,6 +133,23 @@ export class ExtensionTipsService extends Disposable implements IExtensionTipsSe
this.fetchProactiveRecommendations();
}
}));
this._register(this.extensionManagementService.onDidInstallExtension(e => {
if (e.gallery && e.operation === InstallOperation.Install) {
const extRecommendations = this.getAllRecommendationsWithReason() || {};
const recommendationReason = extRecommendations[e.gallery.identifier.id.toLowerCase()];
if (recommendationReason) {
/* __GDPR__
"extensionGallery:install:recommendations" : {
"recommendationReason": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true },
"${include}": [
"${GalleryExtensionTelemetryData}"
]
}
*/
this.telemetryService.publicLog('extensionGallery:install:recommendations', assign(e.gallery.telemetryData, { recommendationReason: recommendationReason.reasonId }));
}
}
}));
}
private fetchProactiveRecommendations(calledDuringStartup?: boolean): TPromise<void> {
......
......@@ -10,7 +10,6 @@ import { readFile } from 'vs/base/node/pfs';
import * as semver from 'semver';
import { Event, Emitter } from 'vs/base/common/event';
import { index } from 'vs/base/common/arrays';
import { assign } from 'vs/base/common/objects';
import { ThrottledDelayer } from 'vs/base/common/async';
import { isPromiseCanceledError } from 'vs/base/common/errors';
import { TPromise } from 'vs/base/common/winjs.base';
......@@ -19,7 +18,7 @@ import { IPager, mapPager, singlePagePager } from 'vs/base/common/paging';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import {
IExtensionManagementService, IExtensionGalleryService, ILocalExtension, IGalleryExtension, IQueryOptions, IExtensionManifest,
InstallExtensionEvent, DidInstallExtensionEvent, LocalExtensionType, DidUninstallExtensionEvent, IExtensionEnablementService, IExtensionIdentifier, EnablementState, IExtensionTipsService, InstallOperation
InstallExtensionEvent, DidInstallExtensionEvent, LocalExtensionType, DidUninstallExtensionEvent, IExtensionEnablementService, IExtensionIdentifier, EnablementState,
} from 'vs/platform/extensionManagement/common/extensionManagement';
import { getGalleryExtensionIdFromLocal, getGalleryExtensionTelemetryData, getLocalExtensionTelemetryData, areSameExtensions, getMaliciousExtensionsSet } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
......@@ -358,7 +357,6 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService,
@IWindowService private windowService: IWindowService,
@ILogService private logService: ILogService,
@IProgressService2 private progressService: IProgressService2,
@IExtensionTipsService private extensionTipsService: IExtensionTipsService,
@IExtensionService private runtimeExtensionService: IExtensionService
) {
this.stateProvider = ext => this.getExtensionState(ext);
......@@ -860,10 +858,6 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService,
this.installed.push(extension);
}
}
if (extension.gallery && event.operation === InstallOperation.Install) {
// Report recommendation telemetry only for gallery extensions that are first time installs
this.reportExtensionRecommendationsTelemetry(installingExtension);
}
}
this._onChange.fire();
}
......@@ -922,24 +916,6 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService,
return local ? ExtensionState.Installed : ExtensionState.Uninstalled;
}
private reportExtensionRecommendationsTelemetry(extension: Extension): void {
const extRecommendations = this.extensionTipsService.getAllRecommendationsWithReason() || {};
const recommendationReason = extRecommendations[extension.id.toLowerCase()];
if (recommendationReason) {
const recommendationsData = { recommendationReason: recommendationReason.reasonId };
const data = extension.telemetryData;
/* __GDPR__
"extensionGallery:install:recommendations" : {
"recommendationReason": { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true },
"${include}": [
"${GalleryExtensionTelemetryData}"
]
}
*/
this.telemetryService.publicLog('extensionGallery:install:recommendations', assign(data, recommendationsData));
}
}
private onError(err: any): void {
if (isPromiseCanceledError(err)) {
return;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册