From cd04d7a76009dcdb3645b389a6e3ef0706a8bbca Mon Sep 17 00:00:00 2001 From: jeffvli Date: Wed, 31 Dec 2025 15:32:44 -0800 Subject: [PATCH] re-add visualizer preset update functionality --- .../visualizer-settings-form.tsx | 66 ++++++++++++++++++- 1 file changed, 64 insertions(+), 2 deletions(-) diff --git a/src/renderer/features/visualizer/components/audiomotionanalyzer/visualizer-settings-form.tsx b/src/renderer/features/visualizer/components/audiomotionanalyzer/visualizer-settings-form.tsx index d84e0fb06..bfe1201f4 100644 --- a/src/renderer/features/visualizer/components/audiomotionanalyzer/visualizer-settings-form.tsx +++ b/src/renderer/features/visualizer/components/audiomotionanalyzer/visualizer-settings-form.tsx @@ -390,6 +390,7 @@ const PresetSettings = () => { const { setSettings } = useSettingsStoreActions(); const [selectedPreset, setSelectedPreset] = useState(null); const [isSaving, setIsSaving] = useState(false); + const [isRenaming, setIsRenaming] = useState(false); const [newPresetName, setNewPresetName] = useState(''); const [isPasting, setIsPasting] = useState(false); const [pasteValue, setPasteValue] = useState(''); @@ -584,12 +585,33 @@ const PresetSettings = () => { }; const handleUpdatePreset = () => { - if (!selectedPreset) return; + if (!selectedPreset || !newPresetName.trim()) return; + + let trimmedName = newPresetName.trim(); + const isRenaming = trimmedName !== selectedPreset; + + if (isRenaming) { + const existingNames = visualizer.audiomotionanalyzer.presets + .filter((p) => p.name !== selectedPreset) + .map((p) => p.name); + + if (existingNames.includes(trimmedName)) { + const pattern = /^(.+?)(\s+\((\d+)\))?$/; + const match = trimmedName.match(pattern); + const baseName = match ? match[1] : trimmedName; + let counter = 1; + while (existingNames.includes(`${baseName} (${counter})`)) { + counter++; + } + trimmedName = `${baseName} (${counter})`; + } + } const updatedPresets = visualizer.audiomotionanalyzer.presets.map((p) => p.name === selectedPreset ? { ...p, + name: trimmedName, value: getCurrentSettingsAsPresetValue(), } : p, @@ -604,6 +626,10 @@ const PresetSettings = () => { }, }, }); + + setNewPresetName(''); + setIsRenaming(false); + setSelectedPreset(trimmedName); }; const handleDeletePreset = () => { @@ -792,6 +818,36 @@ const PresetSettings = () => { + ) : isRenaming ? ( + + setNewPresetName(e.currentTarget.value)} + onKeyDown={(e) => { + if (e.key === 'Enter') { + handleUpdatePreset(); + } else if (e.key === 'Escape') { + setIsRenaming(false); + setNewPresetName(''); + } + }} + placeholder={t('visualizer.presetNamePlaceholder')} + value={newPresetName} + /> + + + + + ) : isPasting ? (