Skip to content

Commit 8a2df5e

Browse files
author
Benjamin Pasero
committed
notifications - extract choice/confirm service from message service
1 parent b6072d0 commit 8a2df5e

37 files changed

Lines changed: 341 additions & 270 deletions

File tree

build/lib/i18n.resources.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,10 @@
146146
"name": "vs/workbench/services/crashReporter",
147147
"project": "vscode-workbench"
148148
},
149+
{
150+
"name": "vs/workbench/services/dialogs",
151+
"project": "vscode-workbench"
152+
},
149153
{
150154
"name": "vs/workbench/services/editor",
151155
"project": "vscode-workbench"

src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@ import { resolveCommonProperties } from 'vs/platform/telemetry/node/commonProper
3030
import { TelemetryAppenderChannel } from 'vs/platform/telemetry/common/telemetryIpc';
3131
import { TelemetryService, ITelemetryServiceConfig } from 'vs/platform/telemetry/common/telemetryService';
3232
import { AppInsightsAppender } from 'vs/platform/telemetry/node/appInsightsAppender';
33-
import { IChoiceService } from 'vs/platform/message/common/message';
34-
import { ChoiceChannelClient } from 'vs/platform/message/common/messageIpc';
3533
import { IWindowsService } from 'vs/platform/windows/common/windows';
3634
import { WindowsChannelClient } from 'vs/platform/windows/common/windowsIpc';
3735
import { ipcRenderer } from 'electron';
@@ -43,6 +41,8 @@ import { LogLevelSetterChannelClient, FollowerLogService } from 'vs/platform/log
4341
import { LocalizationsService } from 'vs/platform/localizations/node/localizations';
4442
import { ILocalizationsService } from 'vs/platform/localizations/common/localizations';
4543
import { LocalizationsChannel } from 'vs/platform/localizations/common/localizationsIpc';
44+
import { IChoiceService } from 'vs/platform/dialogs/common/dialogs';
45+
import { ChoiceChannelClient } from 'vs/platform/dialogs/common/choiceIpc';
4646

4747
export interface ISharedProcessConfiguration {
4848
readonly machineId: string;

src/vs/code/electron-main/main.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ import { createSpdLogService } from 'vs/platform/log/node/spdlogService';
4747
import { printDiagnostics } from 'vs/code/electron-main/diagnostics';
4848
import { BufferLogService } from 'vs/platform/log/common/bufferLog';
4949
import { uploadLogs } from 'vs/code/electron-main/logUploader';
50-
import { IChoiceService } from 'vs/platform/message/common/message';
51-
import { ChoiceCliService } from 'vs/platform/message/node/messageCli';
5250
import { setUnexpectedErrorHandler } from 'vs/base/common/errors';
51+
import { IChoiceService } from 'vs/platform/dialogs/common/dialogs';
52+
import { ChoiceCliService } from 'vs/platform/dialogs/node/choiceCli';
5353

5454
function createServices(args: ParsedArgs, bufferLogService: BufferLogService): IInstantiationService {
5555
const services = new ServiceCollection();

src/vs/code/node/cliProcessMain.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,14 @@ import { IConfigurationService } from 'vs/platform/configuration/common/configur
3030
import { ConfigurationService } from 'vs/platform/configuration/node/configurationService';
3131
import { AppInsightsAppender } from 'vs/platform/telemetry/node/appInsightsAppender';
3232
import { mkdirp, writeFile } from 'vs/base/node/pfs';
33-
import { IChoiceService } from 'vs/platform/message/common/message';
34-
import { ChoiceCliService } from 'vs/platform/message/node/messageCli';
3533
import { getBaseLabel } from 'vs/base/common/labels';
3634
import { IStateService } from 'vs/platform/state/common/state';
3735
import { StateService } from 'vs/platform/state/node/stateService';
3836
import { createSpdLogService } from 'vs/platform/log/node/spdlogService';
3937
import { ILogService, getLogLevel } from 'vs/platform/log/common/log';
4038
import { isPromiseCanceledError } from 'vs/base/common/errors';
39+
import { IChoiceService } from 'vs/platform/dialogs/common/dialogs';
40+
import { ChoiceCliService } from 'vs/platform/dialogs/node/choiceCli';
4141

4242
const notFound = (id: string) => localize('notFound', "Extension '{0}' not found.", id);
4343
const notInstalled = (id: string) => localize('notInstalled', "Extension '{0}' is not installed.", id);

src/vs/editor/standalone/browser/simpleServices.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import { USLayoutResolvedKeybinding } from 'vs/platform/keybinding/common/usLayo
1717
import { KeybindingResolver } from 'vs/platform/keybinding/common/keybindingResolver';
1818
import { IKeybindingEvent, KeybindingSource, IKeyboardEvent } from 'vs/platform/keybinding/common/keybinding';
1919
import { ContextKeyExpr, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
20-
import { IConfirmation, IMessageService, IConfirmationResult } from 'vs/platform/message/common/message';
20+
import { IMessageService } from 'vs/platform/message/common/message';
2121
import { IWorkspaceContextService, IWorkspace, WorkbenchState, IWorkspaceFolder, IWorkspaceFoldersChangeEvent, WorkspaceFolder } from 'vs/platform/workspace/common/workspace';
2222
import * as editorCommon from 'vs/editor/common/editorCommon';
2323
import { ICodeEditor, IDiffEditor, isCodeEditor } from 'vs/editor/browser/editorBrowser';
@@ -40,6 +40,7 @@ import { OS } from 'vs/base/common/platform';
4040
import { IRange } from 'vs/editor/common/core/range';
4141
import { ITextModel } from 'vs/editor/common/model';
4242
import { INotificationService, INotification, INotificationHandle, NoOpNotification } from 'vs/platform/notification/common/notification';
43+
import { IConfirmation, IConfirmationResult, IConfirmationService } from 'vs/platform/dialogs/common/dialogs';
4344

4445
export class SimpleEditor implements IEditor {
4546

@@ -261,6 +262,11 @@ export class SimpleMessageService implements IMessageService {
261262
public hideAll(): void {
262263
// No-op
263264
}
265+
}
266+
267+
export class SimpleConfirmationService implements IConfirmationService {
268+
269+
public _serviceBrand: any;
264270

265271
public confirm(confirmation: IConfirmation): TPromise<boolean> {
266272
let messageText = confirmation.message;

src/vs/editor/standalone/browser/standaloneServices.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,15 @@ import { CodeEditorServiceImpl } from 'vs/editor/browser/services/codeEditorServ
3434
import {
3535
SimpleConfigurationService, SimpleResourceConfigurationService, SimpleMenuService, SimpleMessageService,
3636
SimpleProgressService, StandaloneCommandService, StandaloneKeybindingService, SimpleNotificationService,
37-
StandaloneTelemetryService, SimpleWorkspaceContextService
37+
StandaloneTelemetryService, SimpleWorkspaceContextService, SimpleConfirmationService
3838
} from 'vs/editor/standalone/browser/simpleServices';
3939
import { ContextKeyService } from 'vs/platform/contextkey/browser/contextKeyService';
4040
import { IMenuService } from 'vs/platform/actions/common/actions';
4141
import { IStandaloneThemeService } from 'vs/editor/standalone/common/standaloneThemeService';
4242
import { StandaloneThemeServiceImpl } from 'vs/editor/standalone/browser/standaloneThemeServiceImpl';
4343
import { ILogService, NullLogService } from 'vs/platform/log/common/log';
4444
import { INotificationService } from 'vs/platform/notification/common/notification';
45+
import { IConfirmationService } from 'vs/platform/dialogs/common/dialogs';
4546

4647
export interface IEditorContextViewService extends IContextViewService {
4748
dispose(): void;
@@ -128,6 +129,8 @@ export module StaticServices {
128129

129130
export const messageService = define(IMessageService, () => new SimpleMessageService());
130131

132+
export const confirmationService = define(IConfirmationService, () => new SimpleConfirmationService());
133+
131134
export const notificationService = define(INotificationService, () => new SimpleNotificationService());
132135

133136
export const markerService = define(IMarkerService, () => new MarkerService());

src/vs/platform/message/common/messageIpc.ts renamed to src/vs/platform/dialogs/common/choiceIpc.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77

88
import { TPromise } from 'vs/base/common/winjs.base';
99
import { IChannel } from 'vs/base/parts/ipc/common/ipc';
10-
import { IChoiceService, Severity } from 'vs/platform/message/common/message';
10+
import { IChoiceService } from 'vs/platform/dialogs/common/dialogs';
11+
import { Severity } from 'vs/platform/message/common/message';
1112

1213
export interface IChoiceChannel extends IChannel {
1314
call(command: 'choose'): TPromise<number>;
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
'use strict';
6+
7+
import { TPromise } from 'vs/base/common/winjs.base';
8+
import Severity from 'vs/base/common/severity';
9+
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
10+
11+
export interface IConfirmation {
12+
title?: string;
13+
type?: 'none' | 'info' | 'error' | 'question' | 'warning';
14+
message: string;
15+
detail?: string;
16+
primaryButton?: string;
17+
secondaryButton?: string;
18+
checkbox?: {
19+
label: string;
20+
checked?: boolean;
21+
};
22+
}
23+
24+
export interface IConfirmationResult {
25+
confirmed: boolean;
26+
checkboxChecked?: boolean;
27+
}
28+
29+
export const IConfirmationService = createDecorator<IConfirmationService>('confirmationService');
30+
31+
export interface IConfirmationService {
32+
33+
_serviceBrand: any;
34+
35+
/**
36+
* Ask the user for confirmation.
37+
*/
38+
confirm(confirmation: IConfirmation): TPromise<boolean>;
39+
40+
/**
41+
* Ask the user for confirmation with a checkbox.
42+
*/
43+
confirmWithCheckbox(confirmation: IConfirmation): TPromise<IConfirmationResult>;
44+
}
45+
46+
export const IChoiceService = createDecorator<IChoiceService>('choiceService');
47+
48+
export interface IChoiceService {
49+
50+
_serviceBrand: any;
51+
52+
/**
53+
* Prompt the user for a choice between multiple options.
54+
*
55+
* @param when `modal` is true, this will block the user until chooses.
56+
*
57+
* @returns A promise with the selected choice index. The promise is cancellable
58+
* which hides the message. The promise can return an error, meaning that
59+
* the user refused to choose.
60+
*
61+
* When `modal` is true and user refused to choose, then promise with index of
62+
* `Cancel` option is returned. If there is no such option then promise with
63+
* `0` index is returned.
64+
*/
65+
choose(severity: Severity, message: string, options: string[], cancelId: number, modal?: boolean): TPromise<number>;
66+
}

src/vs/platform/message/node/messageCli.ts renamed to src/vs/platform/dialogs/node/choiceCli.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55

66
import * as readline from 'readline';
77
import { TPromise } from 'vs/base/common/winjs.base';
8-
import { IChoiceService, Severity } from 'vs/platform/message/common/message';
8+
import { IChoiceService } from 'vs/platform/dialogs/common/dialogs';
9+
import { Severity } from 'vs/platform/message/common/message';
910

1011
export class ChoiceCliService implements IChoiceService {
1112

src/vs/platform/extensionManagement/node/extensionManagementService.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,12 @@ import { Limiter } from 'vs/base/common/async';
2929
import Event, { Emitter } from 'vs/base/common/event';
3030
import * as semver from 'semver';
3131
import URI from 'vs/base/common/uri';
32-
import { IChoiceService, Severity } from 'vs/platform/message/common/message';
32+
import { Severity } from 'vs/platform/message/common/message';
3333
import pkg from 'vs/platform/node/package';
3434
import { isMacintosh } from 'vs/base/common/platform';
3535
import { ILogService } from 'vs/platform/log/common/log';
3636
import { ExtensionsManifestCache } from 'vs/platform/extensionManagement/node/extensionsManifestCache';
37+
import { IChoiceService } from 'vs/platform/dialogs/common/dialogs';
3738

3839
const SystemExtensionsRoot = path.normalize(path.join(URI.parse(require.toUrl('')).fsPath, '..', 'extensions'));
3940
const ERROR_SCANNING_SYS_EXTENSIONS = 'scanningSystem';

0 commit comments

Comments
 (0)