Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

deconstruct signalOptions config object, migrate settings #214163

Merged
merged 2 commits into from
Jun 3, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -171,118 +171,77 @@ const configuration: IConfigurationNode = {
type: 'boolean',
default: true
},
'accessibility.signalOptions': {
description: 'Configures the behavior of signals (audio cues and announcements) in the workbench. Includes volume, debounce position changes, and delays for different types of signals.',
type: 'object',
additionalProperties: false,
properties: {
'volume': {
'description': localize('accessibility.signalOptions.volume', "The volume of the sounds in percent (0-100)."),
'accessibility.signalOptions.volume': {
'description': localize('accessibility.signalOptions.volume', "The volume of the sounds in percent (0-100)."),
'type': 'number',
'minimum': 0,
'maximum': 100,
'default': 70,
'tags': ['accessibility']
},
'accessibility.signalOptions.debouncePositionChanges': {
'description': localize('accessibility.signalOptions.debouncePositionChanges', "Whether or not position changes should be debounced"),
'type': 'boolean',
'default': false,
'tags': ['accessibility']
},
'accessibility.signalOptions.experimental.delays.general': {
'type': 'object',
'description': 'Delays for all signals besides error and warning at position',
'additionalProperties': false,
'properties': {
'announcement': {
'description': localize('accessibility.signalOptions.delays.general.announcement', "The delay in milliseconds before an announcement is made."),
'type': 'number',
'minimum': 0,
'maximum': 100,
'default': 70,
'default': 3000
},
'debouncePositionChanges': {
'description': localize('accessibility.signalOptions.debouncePositionChanges', "Whether or not position changes should be debounced"),
'type': 'boolean',
'default': false,
},
'experimental.delays': {
'type': 'object',
'additionalProperties': false,
'properties': {
'general': {
'type': 'object',
'description': 'Delays for all signals besides error and warning at position',
'additionalProperties': false,
'properties': {
'announcement': {
'description': localize('accessibility.signalOptions.delays.general.announcement', "The delay in milliseconds before an announcement is made."),
'type': 'number',
'minimum': 0,
'default': 3000
},
'sound': {
'description': localize('accessibility.signalOptions.delays.general.sound', "The delay in milliseconds before a sound is played."),
'type': 'number',
'minimum': 0,
'default': 400
}
},
},
'warningAtPosition': {
'type': 'object',
'additionalProperties': false,
'properties': {
'announcement': {
'description': localize('accessibility.signalOptions.delays.warningAtPosition.announcement', "The delay in milliseconds before an announcement is made when there's a warning at the position."),
'type': 'number',
'minimum': 0,
'default': 3000
},
'sound': {
'description': localize('accessibility.signalOptions.delays.warningAtPosition.sound', "The delay in milliseconds before a sound is played when there's a warning at the position."),
'type': 'number',
'minimum': 0,
'default': 1000
}
},
},
'errorAtPosition': {
'type': 'object',
'additionalProperties': false,
'properties': {
'announcement': {
'description': localize('accessibility.signalOptions.delays.errorAtPosition.announcement', "The delay in milliseconds before an announcement is made when there's an error at the position."),
'type': 'number',
'minimum': 0,
'default': 3000
},
'sound': {
'description': localize('accessibility.signalOptions.delays.errorAtPosition.sound', "The delay in milliseconds before a sound is played when there's an error at the position."),
'type': 'number',
'minimum': 0,
'default': 1000
}
},
},
},
'default': {
'general': {
'announcement': 3000,
'sound': 400
},
'warningAtPosition': {
'announcement': 3000,
'sound': 1000
},
'errorAtPosition': {
'announcement': 3000,
'sound': 1000
}
}
'sound': {
'description': localize('accessibility.signalOptions.delays.general.sound', "The delay in milliseconds before a sound is played."),
'type': 'number',
'minimum': 0,
'default': 400
}
},
'tags': ['accessibility']
},
'accessibility.signalOptions.experimental.delays.warningAtPosition': {
'type': 'object',
'additionalProperties': false,
'properties': {
'announcement': {
'description': localize('accessibility.signalOptions.delays.warningAtPosition.announcement', "The delay in milliseconds before an announcement is made when there's a warning at the position."),
'type': 'number',
'minimum': 0,
'default': 3000
},
'sound': {
'description': localize('accessibility.signalOptions.delays.warningAtPosition.sound', "The delay in milliseconds before a sound is played when there's a warning at the position."),
'type': 'number',
'minimum': 0,
'default': 1000
}
},
'default': {
'volume': 70,
'debouncePositionChanges': false,
'experimental.delays': {
'general': {
'announcement': 3000,
'sound': 400
},
'warningAtPosition': {
'announcement': 3000,
'sound': 1000
},
'errorAtPosition': {
'announcement': 3000,
'sound': 1000
}
'tags': ['accessibility']
},
'accessibility.signalOptions.experimental.delays.errorAtPosition': {
'type': 'object',
'additionalProperties': false,
'properties': {
'announcement': {
'description': localize('accessibility.signalOptions.delays.errorAtPosition.announcement', "The delay in milliseconds before an announcement is made when there's an error at the position."),
'type': 'number',
'minimum': 0,
'default': 3000
},
'sound': {
'description': localize('accessibility.signalOptions.delays.errorAtPosition.sound', "The delay in milliseconds before a sound is played when there's an error at the position."),
'type': 'number',
'minimum': 0,
'default': 1000
}
},
tags: ['accessibility']
'tags': ['accessibility']
},
'accessibility.signals.lineHasBreakpoint': {
...signalFeatureBase,
Expand Down Expand Up @@ -804,10 +763,9 @@ export class DynamicSpeechAccessibilityConfiguration extends Disposable implemen
Registry.as<IConfigurationMigrationRegistry>(WorkbenchExtensions.ConfigurationMigration)
.registerConfigurationMigrations([{
key: 'audioCues.volume',
migrateFn: (volume, accessor) => {
const debouncePositionChanges = getDebouncePositionChangesFromConfig(accessor);
migrateFn: (value, accessor) => {
return [
['accessibility.signalOptions', { value: debouncePositionChanges !== undefined ? { volume, debouncePositionChanges } : { volume } }],
['accessibility.signalOptions.volume', { value }],
['audioCues.volume', { value: undefined }]
];
}
Expand All @@ -816,10 +774,9 @@ Registry.as<IConfigurationMigrationRegistry>(WorkbenchExtensions.ConfigurationMi
Registry.as<IConfigurationMigrationRegistry>(WorkbenchExtensions.ConfigurationMigration)
.registerConfigurationMigrations([{
key: 'audioCues.debouncePositionChanges',
migrateFn: (debouncePositionChanges, accessor) => {
const volume = getVolumeFromConfig(accessor);
migrateFn: (value) => {
return [
['accessibility.signalOptions', { value: volume !== undefined ? { volume, debouncePositionChanges } : { debouncePositionChanges } }],
['accessibility.signalOptions.debouncePositionChanges', { value }],
['audioCues.debouncePositionChanges', { value: undefined }]
];
}
Expand All @@ -829,12 +786,18 @@ Registry.as<IConfigurationMigrationRegistry>(WorkbenchExtensions.ConfigurationMi
.registerConfigurationMigrations([{
key: 'accessibility.signalOptions',
migrateFn: (value, accessor) => {
const delays = value.delays;
if (!delays) {
return [];
}
const delayGeneral = getDelaysFromConfig(accessor, 'general');
const delayError = getDelaysFromConfig(accessor, 'errorAtPosition');
const delayWarning = getDelaysFromConfig(accessor, 'warningAtPosition');
const volume = getVolumeFromConfig(accessor);
const debouncePositionChanges = getDebouncePositionChangesFromConfig(accessor);
return [
['accessibility.signalOptions', { value: { ...value, 'experimental.delays': delays, 'delays': undefined } }],
['accessibility.signalOptions.volume', { value: volume }],
['accessibility.signalOptions.debouncePositionChanges', { value: debouncePositionChanges }],
['accessibility.signalOptions.experimental.delays.general', { value: delayGeneral }],
['accessibility.signalOptions.experimental.delays.errorAtPosition', { value: delayError }],
['accessibility.signalOptions.experimental.delays.warningAtPosition', { value: delayWarning }],
['accessibility.signalOptions', { value: undefined }],
];
}
}]);
Expand All @@ -843,10 +806,9 @@ Registry.as<IConfigurationMigrationRegistry>(WorkbenchExtensions.ConfigurationMi
Registry.as<IConfigurationMigrationRegistry>(WorkbenchExtensions.ConfigurationMigration)
.registerConfigurationMigrations([{
key: 'accessibility.signals.sounds.volume',
migrateFn: (volume, accessor) => {
const debouncePositionChanges = getDebouncePositionChangesFromConfig(accessor);
migrateFn: (value) => {
return [
['accessibility.signalOptions', { value: debouncePositionChanges !== undefined ? { volume, debouncePositionChanges } : { volume } }],
['accessibility.signalOptions.volume', { value }],
['accessibility.signals.sounds.volume', { value: undefined }]
];
}
Expand All @@ -855,21 +817,24 @@ Registry.as<IConfigurationMigrationRegistry>(WorkbenchExtensions.ConfigurationMi
Registry.as<IConfigurationMigrationRegistry>(WorkbenchExtensions.ConfigurationMigration)
.registerConfigurationMigrations([{
key: 'accessibility.signals.debouncePositionChanges',
migrateFn: (debouncePositionChanges, accessor) => {
const volume = getVolumeFromConfig(accessor);
migrateFn: (value) => {
return [
['accessibility.signalOptions', { value: volume !== undefined ? { volume, debouncePositionChanges } : { debouncePositionChanges } }],
['accessibility.signalOptions.debouncePositionChanges', { value }],
['accessibility.signals.debouncePositionChanges', { value: undefined }]
];
}
}]);

function getDelaysFromConfig(accessor: (key: string) => any, type: 'general' | 'errorAtPosition' | 'warningAtPosition'): { announcement: number; sound: number } | undefined {
return accessor(`accessibility.signalOptions.experimental.delays.${type}`) || accessor('accessibility.signalOptions')?.['experimental.delays']?.[`${type}`] || accessor('accessibility.signalOptions')?.['delays']?.[`${type}`];
}

function getVolumeFromConfig(accessor: (key: string) => any): string | undefined {
return accessor('accessibility.signalOptions')?.volume || accessor('accessibility.signals.sounds.volume') || accessor('audioCues.volume');
return accessor('accessibility.signalOptions.volume') || accessor('accessibility.signalOptions')?.volume || accessor('accessibility.signals.sounds.volume') || accessor('audioCues.volume');
}

function getDebouncePositionChangesFromConfig(accessor: (key: string) => any): number | undefined {
return accessor('accessibility.signalOptions')?.debouncePositionChanges || accessor('accessibility.signals.debouncePositionChanges') || accessor('audioCues.debouncePositionChanges');
return accessor('accessibility.signalOptions.debouncePositionChanges') || accessor('accessibility.signalOptions')?.debouncePositionChanges || accessor('accessibility.signals.debouncePositionChanges') || accessor('audioCues.debouncePositionChanges');
}

Registry.as<IConfigurationMigrationRegistry>(WorkbenchExtensions.ConfigurationMigration)
Expand Down
Loading