import { __decorate, __param } from '@codingame/monaco-vscode-api/external/tslib/tslib.es6';
import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
import { toAction } from '@codingame/monaco-vscode-api/vscode/vs/base/common/actions';
import { MainContext } from '@codingame/monaco-vscode-api/vscode/vs/workbench/api/common/extHost.protocol';
import { extHostNamedCustomer } from '../../services/extensions/common/extHostCustomers.js';
import { IDialogService } from '@codingame/monaco-vscode-api/vscode/vs/platform/dialogs/common/dialogs.service';
import { NotificationPriority } from '@codingame/monaco-vscode-api/vscode/vs/platform/notification/common/notification';
import { INotificationService } from '@codingame/monaco-vscode-api/vscode/vs/platform/notification/common/notification.service';
import { Event } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
import { ICommandService } from '@codingame/monaco-vscode-api/vscode/vs/platform/commands/common/commands.service';
import { IExtensionService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/extensions/common/extensions.service';
var MainThreadMessageService_1;
let MainThreadMessageService = class MainThreadMessageService {
static {
MainThreadMessageService_1 = this;
}
static {
this.URGENT_NOTIFICATION_SOURCES = ["vscode.github-authentication", "vscode.microsoft-authentication"];
}
constructor(
extHostContext,
_notificationService,
_commandService,
_dialogService,
extensionService
) {
this._notificationService = _notificationService;
this._commandService = _commandService;
this._dialogService = _dialogService;
this.extensionsListener = extensionService.onDidChangeExtensions(e => {
for (const extension of e.removed) {
this._notificationService.removeFilter(extension.identifier.value);
}
});
}
dispose() {
this.extensionsListener.dispose();
}
$showMessage(severity, message, options, commands) {
if (options.modal) {
return this._showModalMessage(severity, message, options.detail, commands, options.useCustom);
} else {
return this._showMessage(severity, message, commands, options);
}
}
_showMessage(severity, message, commands, options) {
return (new Promise(resolve => {
const primaryActions = ( commands.map(command => toAction({
id: _extension_message_handle_${command.handle},
label: command.title,
enabled: true,
run: () => {
resolve(command.handle);
return Promise.resolve();
}
})));
let source;
let sourceIsUrgent = false;
if (options.source) {
source = {
label: options.source.label,
id: options.source.identifier.value
};
sourceIsUrgent = MainThreadMessageService_1.URGENT_NOTIFICATION_SOURCES.includes(source.id);
}
if (!source) {
source = ( localize(2599, "Extension"));
}
const secondaryActions = [];
if (options.source) {
secondaryActions.push(toAction({
id: options.source.identifier.value,
label: ( localize(2600, "Manage Extension")),
run: () => {
return this._commandService.executeCommand("_extensions.manage", options.source.identifier.value);
}
}));
}
const messageHandle = this._notificationService.notify({
severity,
message,
actions: {
primary: primaryActions,
secondary: secondaryActions
},
source,
priority: sourceIsUrgent ? NotificationPriority.URGENT : NotificationPriority.DEFAULT,
sticky: sourceIsUrgent
});
Event.once(messageHandle.onDidClose)(() => {
resolve(undefined);
});
}));
}
async _showModalMessage(severity, message, detail, commands, useCustom) {
const buttons = [];
let cancelButton = undefined;
for (const command of commands) {
const button = {
label: command.title,
run: () => command.handle
};
if (command.isCloseAffordance) {
cancelButton = button;
} else {
buttons.push(button);
}
}
if (!cancelButton) {
if (buttons.length > 0) {
cancelButton = {
label: ( localize(2601, "Cancel")),
run: () => undefined
};
} else {
cancelButton = {
label: ( localize(2602, "&&OK")),
run: () => undefined
};
}
}
const {
result
} = await this._dialogService.prompt({
type: severity,
message,
detail,
buttons,
cancelButton,
custom: useCustom
});
return result;
}
};
MainThreadMessageService = MainThreadMessageService_1 = __decorate(
[extHostNamedCustomer(MainContext.MainThreadMessageService), ( __param(1, INotificationService)), ( __param(2, ICommandService)), ( __param(3, IDialogService)), ( __param(4, IExtensionService))],
MainThreadMessageService
);
export { MainThreadMessageService };