提交 5341fac1 编写于 作者: T t-amqi

Add telemetry and AB test options

上级 7942e121
......@@ -23,6 +23,7 @@ export interface ITelemetryData {
export interface ITelemetryExperiments {
mergeQuickLinks: boolean;
showTaskDocumentation: boolean;
}
export interface ITelemetryService {
......
......@@ -18,6 +18,7 @@ import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation
export const defaultExperiments: ITelemetryExperiments = {
mergeQuickLinks: false,
showTaskDocumentation: true
};
export const NullTelemetryService = {
......@@ -45,10 +46,12 @@ export function loadExperiments(accessor: ServicesAccessor): ITelemetryExperimen
let {
mergeQuickLinks,
showTaskDocumentation,
} = splitExperimentsRandomness(storageService);
return applyOverrides({
mergeQuickLinks,
showTaskDocumentation,
}, configurationService);
}
......@@ -64,13 +67,14 @@ function applyOverrides(experiments: ITelemetryExperiments, configurationService
function splitExperimentsRandomness(storageService: IStorageService): ITelemetryExperiments {
const random1 = getExperimentsRandomness(storageService);
const [random2, /* showNewUserWatermark */] = splitRandom(random1);
const [random2, showTaskDocumentation] = splitRandom(random1);
const [random3, /* openUntitledFile */] = splitRandom(random2);
const [random4, mergeQuickLinks] = splitRandom(random3);
// tslint:disable-next-line:no-unused-variable (https://github.com/Microsoft/TypeScript/issues/16628)
const [random5, /* enableWelcomePage */] = splitRandom(random4);
return {
mergeQuickLinks,
showTaskDocumentation,
};
}
......
......@@ -16,7 +16,7 @@ export const ALL_COMMANDS_PREFIX = '>';
export class ShowTasksAction extends Action {
public static ID = 'workbench.action.showTasks';
public static LABEL = nls.localize('showTasks', "Show Task Menu");
public static LABEL = nls.localize('showTasks', "Show task menu");
constructor(
id: string,
......@@ -34,3 +34,21 @@ export class ShowTasksAction extends Action {
return TPromise.as(null);
}
}
export class ShowTasksDocumentationAction extends Action {
public static ID = 'workbench.action.showTaskDocumentation';
public static LABEL = nls.localize('showTaskDocumentation', "Show task documentation");
constructor(
id: string,
label: string,
) {
super(id, label);
}
public run(context?: any): TPromise<any> {
window.open('https://go.microsoft.com/fwlink/?LinkId=733558');
return TPromise.as(null);
}
}
\ No newline at end of file
......@@ -31,12 +31,12 @@ import { IMessageService, Severity, IChoiceService } from 'vs/platform/message/c
import { IModeService } from 'vs/editor/common/services/modeService';
import { IModelService } from 'vs/editor/common/services/modelService';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { anonymize } from 'vs/platform/telemetry/common/telemetryUtils';
import { anonymize, isShowTaskDocumentation } from 'vs/platform/telemetry/common/telemetryUtils';
import { RunOnceScheduler } from 'vs/base/common/async';
import { IRawTextSource } from 'vs/editor/common/model/textSource';
import { StorageScope, IStorageService } from 'vs/platform/storage/common/storage';
import { localize } from 'vs/nls';
import { ShowTasksAction } from 'vs/workbench/parts/quickopen/common/quickopenActions';
import { ShowTasksAction, ShowTasksDocumentationAction } from 'vs/workbench/parts/quickopen/common/quickopenActions';
/**
* The text file editor model listens to changes to its underlying code editor model and saves these changes through the file service back to the disk.
*/
......@@ -333,23 +333,44 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil
private showTaskNotification(): void {
const storageKey = 'workbench.tasks.ranTaskBefore';
if (!this.storageService.get(storageKey)) {
if (this.storageService.get(storageKey)) {
const fileName = path.relative(this.contextService.getWorkspace().resource.toString(), this.resource.toString());
if (fileName.match(/^gruntfile\.js$/i) || fileName.match(/^gulpfile\.js$/i) || fileName.match(/^tsconfig\.json$/i)) {
const message = localize('taskFileOpened', "Visual Studio Code has extra functionality for this type of file");
const action = this.instantiationService.createInstance(ShowTasksAction, ShowTasksAction.ID, localize('showTasks', "Show Tasks"));
const message = localize('taskFileOpened', `Run your ${fileName.split('.')[0]} in vscode. Get started here.`);
let action: any;
let messageTest: string;
const showDocumentation = isShowTaskDocumentation(this.storageService);
if (showDocumentation) {
action = this.instantiationService.createInstance(ShowTasksDocumentationAction, ShowTasksDocumentationAction.ID, localize('showTaskDocumentation', "Show task Documentation"));
messageTest = ShowTasksDocumentationAction.LABEL;
} else {
action = this.instantiationService.createInstance(ShowTasksAction, ShowTasksAction.ID, localize('showTasks', "Show tasks"));
messageTest = ShowTasksAction.LABEL;
}
const options = [
action.label,
messageTest,
localize('neverShowAgain', "Don't show again"),
localize('close', "Close"),
localize('close', "Close")
];
this.choiceService.choose(Severity.Info, message, options, 2).done(choice => {
switch (choice) {
case 0: return action.run();
case 1: return this.storageService.store(storageKey, true, StorageScope.GLOBAL);
case 2: return;
case 0: {
this.telemetryService.publicLog('taskNotificationOptionChoice',
{ choice: 0, test: showDocumentation });
this.storageService.store(storageKey, true, StorageScope.GLOBAL);
return action.run();
}
case 1: {
this.telemetryService.publicLog('taskNotificationOptionChoice',
{ choice: 1, test: showDocumentation });
return this.storageService.store(storageKey, true, StorageScope.GLOBAL);
}
case 2: {
this.telemetryService.publicLog('taskNotificationOptionChoice',
{ choice: 2, test: showDocumentation });
return;
}
}
});
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册