Skip to content
Open
Show file tree
Hide file tree
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
36 changes: 35 additions & 1 deletion common/components/SettingsForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -991,6 +991,18 @@ export default function SettingsForm({
pauseOnHoverMode,
} = settings;

const regexPresetsList = [
{ name: t('settings.regexPresets.noPreset'), regex: '' },
{
name: t('settings.regexPresets.enclosedName'),
regex: '([\((]([^\(\)()]|(([\((][^\(\)()]+[\))])))+[\))])',
},
{ name: t('settings.regexPresets.enclosedIndications'), regex: '-?\[.*\]' },
{ name: t('settings.regexPresets.desCaps'), regex: '^[\-\(\)\.\s\p{Lu}]+$' },
{ name: t('settings.regexPresets.soundEffects'), regex: '^-?[.+]$|^[♪♬#~〜]+$' },
];
const [selectedRegexPresetName, setSelectedRegexPresetName] = useState<string>(regexPresetsList[0].name);

const [selectedSubtitleAppearanceTrack, setSelectedSubtitleAppearanceTrack] = useState<number>();
const {
subtitleSize,
Expand Down Expand Up @@ -2635,14 +2647,36 @@ export default function SettingsForm({
onChange={(event) => handleSettingChanged('tabName', event.target.value)}
/>
)}
<TextField
select
label={t('settings.regexPreset')}
value={selectedRegexPresetName}
color="primary"
onChange={(event) => {
let presetSelected = regexPresetsList.find((x) => x.name === event.target.value);
setSelectedRegexPresetName(presetSelected!.name);
handleSettingChanged('subtitleRegexFilter', presetSelected!.regex);
}}
>
{regexPresetsList.map((s) => (
<MenuItem key={s.name} value={s.name}>
{s.name}
</MenuItem>
))}
</TextField>
<TextField
label={t('settings.subtitleRegexFilter')}
fullWidth
value={subtitleRegexFilter}
color="primary"
error={!validRegex}
helperText={validRegex ? undefined : 'Invalid regular expression'}
onChange={(event) => handleSettingChanged('subtitleRegexFilter', event.target.value)}
onChange={(event) => {
handleSettingChanged('subtitleRegexFilter', event.target.value);
if (selectedRegexPresetName !== regexPresetsList[0].name) {
setSelectedRegexPresetName(regexPresetsList[0].name);
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's risky to update state from inside the render function. You should consider using useEffect instead.
Also, ideally if the user types in one of the presets manually the correct one gets selected. This code is selecting the first preset no matter what.

}
}}
/>
<TextField
label={t('settings.subtitleRegexFilterTextReplacement')}
Expand Down
8 changes: 8 additions & 0 deletions common/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,14 @@
"subtitleBlurEntryLabel": "Track {{trackNumber}}",
"subtitleBlurDescription": "Hides selected subtitle tracks by blurring them. Can be un-blurred on mouse hover.",
"tabName": "Name of the tab",
"regexPreset": "Subtitle regex preset",
"regexPresets": {
"noPreset" :"No preset",
"enclosedName" :"Remove enclosed names",
"enclosedIndications" :"Remove enclosed indications",
"desCaps" :"Remove descriptions in caps",
"soundEffects" :"Remove sound effect symbols"
},
"subtitleRegexFilter": "Subtitle regex filter",
"subtitleRegexFilterTextReplacement": "Subtitle regex filter text replacement",
"subtitleHtml": "Subtitle HTML",
Expand Down
8 changes: 8 additions & 0 deletions common/locales/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,14 @@
"subtitleBlurEntryLabel": "Piste {{trackNumber}}",
"subtitleBlurDescription": "Masque les pistes de sous-titres sélectionnées en les floutant. Le flou est supprimé au survol de la souris.",
"tabName": "Nom de l'onglet",
"regexPreset": "Pré-réglage regex de sous-titres",
"regexPresets": {
"noPreset" :"Aucun pré-réglage",
"enclosedName" :"Enlever noms entre crochets",
"enclosedIndications" :"Enlever indications entre crochets",
"desCaps" :"Enlever descriptions en majuscules",
"soundEffects" :"Enlever symboles d'effets sonores"
},
"subtitleRegexFilter": "Filtre regex des sous-titres",
"subtitleRegexFilterTextReplacement": "Remplacement de texte pour le filtre regex des sous-titres",
"subtitleHtml": "Sous-titres HTML",
Expand Down
6 changes: 6 additions & 0 deletions loc/notes.json
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,12 @@
"settings.subtitleOutlineThickness": "Setting that controls the outline thickness in pixels of the subtitle.",
"settings.subtitleOutlineThicknessHelperText": "Helper text for subtitle outline thickness setting.",
"settings.subtitlePositionOffset": "Label for setting that controls subtitle position offset.",
"settings.regexPreset": "This setting allow to choose between multiples regex presets.",
"settings.regexPresets.noPreset": "No preset regex preset setting.",
"settings.regexPresets.enclosedName": "Regex to remove names enclosed by parenthesis to indicate speakers",
"settings.regexPresets.enclosedIndications": "Regex to remove indications enclosed by square brackets that sound or music that is playing",
"settings.regexPresets.desCaps": "Regex to filter out descriptions written in capital letters",
"settings.regexPresets.soundEffects": "Regex to remove any combination of symbols on their own that represent playing music",
"settings.subtitleRegexFilter": "This setting defines a regular expression used to filter text of a subtitle file.",
"settings.subtitleRegexFilterTextReplacement": "This setting defines the text with which to replace strings matched by the above regular expression.",
"settings.subtitleShadowColor": "Label for setting that controls subtitle shadow color.",
Expand Down