mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-03-25 14:20:30 -04:00
Port VS Code telemetry opt-in dialog (#1130)
This commit is contained in:
@@ -101,7 +101,7 @@ export class SaveErrorHandler implements ISaveErrorHandler, IWorkbenchContributi
|
||||
private onFileSavedOrReverted(resource: URI): void {
|
||||
const messageHandle = this.messages.get(resource);
|
||||
if (messageHandle) {
|
||||
messageHandle.dispose();
|
||||
messageHandle.close();
|
||||
this.messages.delete(resource);
|
||||
}
|
||||
}
|
||||
@@ -190,7 +190,7 @@ export class SaveErrorHandler implements ISaveErrorHandler, IWorkbenchContributi
|
||||
const pendingResolveSaveConflictMessages: INotificationHandle[] = [];
|
||||
function clearPendingResolveSaveConflictMessages(): void {
|
||||
while (pendingResolveSaveConflictMessages.length > 0) {
|
||||
pendingResolveSaveConflictMessages.pop().dispose();
|
||||
pendingResolveSaveConflictMessages.pop().close();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6,9 +6,15 @@
|
||||
|
||||
import { Registry } from 'vs/platform/registry/common/platform';
|
||||
import { GettingStarted } from './gettingStarted';
|
||||
import { TelemetryOptOut } from './telemetryOptOut';
|
||||
import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions';
|
||||
import { LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle';
|
||||
|
||||
// {{SQL CARBON EDIT}}
|
||||
// Registry
|
||||
// .as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench)
|
||||
// .registerWorkbenchContribution(GettingStarted, LifecyclePhase.Running);
|
||||
|
||||
Registry
|
||||
.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench)
|
||||
.registerWorkbenchContribution(GettingStarted, LifecyclePhase.Running);
|
||||
.registerWorkbenchContribution(TelemetryOptOut, LifecyclePhase.Eventually);
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
'use strict';
|
||||
|
||||
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
|
||||
import { IStorageService } from 'vs/platform/storage/common/storage';
|
||||
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
||||
import product from 'vs/platform/node/product';
|
||||
import { IOpenerService } from 'vs/platform/opener/common/opener';
|
||||
import { INotificationService, Severity } from 'vs/platform/notification/common/notification';
|
||||
import URI from 'vs/base/common/uri';
|
||||
import { localize } from 'vs/nls';
|
||||
import { onUnexpectedError } from 'vs/base/common/errors';
|
||||
import { IWindowService, IWindowsService } from 'vs/platform/windows/common/windows';
|
||||
|
||||
export class TelemetryOptOut implements IWorkbenchContribution {
|
||||
|
||||
private static TELEMETRY_OPT_OUT_SHOWN = 'workbench.telemetryOptOutShown';
|
||||
|
||||
constructor(
|
||||
@IStorageService storageService: IStorageService,
|
||||
@IOpenerService openerService: IOpenerService,
|
||||
@INotificationService notificationService: INotificationService,
|
||||
@IWindowService windowService: IWindowService,
|
||||
@IWindowsService windowsService: IWindowsService,
|
||||
@ITelemetryService telemetryService: ITelemetryService
|
||||
) {
|
||||
if (!product.telemetryOptOutUrl || storageService.get(TelemetryOptOut.TELEMETRY_OPT_OUT_SHOWN)) {
|
||||
return;
|
||||
}
|
||||
Promise.all([
|
||||
windowService.isFocused(),
|
||||
windowsService.getWindowCount()
|
||||
]).then(([focused, count]) => {
|
||||
if (!focused && count > 1) {
|
||||
return null;
|
||||
}
|
||||
storageService.store(TelemetryOptOut.TELEMETRY_OPT_OUT_SHOWN, true);
|
||||
|
||||
const optOutUrl = product.telemetryOptOutUrl;
|
||||
const privacyUrl = product.privacyStatementUrl || product.telemetryOptOutUrl;
|
||||
// {{SQL CARBON EDIT}}
|
||||
const optOutNotice = localize('telemetryOptOut.optOutNotice', "Help improve SQL Operations Studio by allowing Microsoft to collect usage data. Read our [privacy statement]({0}) and how to [opt out]({1}).", privacyUrl, optOutUrl);
|
||||
const optInNotice = localize('telemetryOptOut.optInNotice', "Help improve SQL Operations Studio by allowing Microsoft to collect usage data. Read our [privacy statement]({0}) and how to [opt in]({1}).", privacyUrl, optOutUrl);
|
||||
|
||||
notificationService.prompt(
|
||||
Severity.Info,
|
||||
telemetryService.isOptedIn ? optOutNotice : optInNotice,
|
||||
[{
|
||||
label: localize('telemetryOptOut.readMore', "Read More"),
|
||||
run: () => openerService.open(URI.parse(optOutUrl))
|
||||
}]
|
||||
);
|
||||
})
|
||||
.then(null, onUnexpectedError);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user