fix(#5435): preserve zero TTS pitch in settings

This commit is contained in:
Rod Boev 2026-07-02 16:09:15 -04:00
parent 91ae1dede9
commit 7ee2757afe
2 changed files with 8 additions and 4 deletions

View file

@ -8776,7 +8776,7 @@ async function loadSettingsPanel(){
const ttsRateValue=$('settingsTtsRateValue');
if(ttsRateSlider){
const savedRate=_speechSetting('tts_rate','hermes-tts-rate',1);
ttsRateSlider.value=savedRate||'1';
ttsRateSlider.value=(savedRate===null||savedRate===undefined)?'1':String(savedRate);
if(ttsRateValue) ttsRateValue.textContent=parseFloat(ttsRateSlider.value).toFixed(1)+'x';
localStorage.setItem('hermes-tts-rate',ttsRateSlider.value);
ttsRateSlider.oninput=function(){if(ttsRateValue)ttsRateValue.textContent=parseFloat(this.value).toFixed(1)+'x';localStorage.setItem('hermes-tts-rate',this.value);_schedulePreferencesAutosave();};
@ -8785,7 +8785,7 @@ async function loadSettingsPanel(){
const ttsPitchValue=$('settingsTtsPitchValue');
if(ttsPitchSlider){
const savedPitch=_speechSetting('tts_pitch','hermes-tts-pitch',1);
ttsPitchSlider.value=savedPitch||'1';
ttsPitchSlider.value=(savedPitch===null||savedPitch===undefined)?'1':String(savedPitch);
if(ttsPitchValue) ttsPitchValue.textContent=parseFloat(ttsPitchSlider.value).toFixed(1);
localStorage.setItem('hermes-tts-pitch',ttsPitchSlider.value);
ttsPitchSlider.oninput=function(){if(ttsPitchValue)ttsPitchValue.textContent=parseFloat(this.value).toFixed(1);localStorage.setItem('hermes-tts-pitch',this.value);_schedulePreferencesAutosave();};

View file

@ -67,7 +67,7 @@ def test_settings_api_round_trips_speech_preferences():
"tts_engine": "voicevox_local",
"tts_voice": "en-US-AriaNeural",
"tts_rate": "1.4",
"tts_pitch": "0.8",
"tts_pitch": "0",
"voice_mode_button": True,
"voice_continuous": True,
"voice_silence_ms": "2400",
@ -84,7 +84,7 @@ def test_settings_api_round_trips_speech_preferences():
assert saved["tts_engine"] == "voicevox_local"
assert saved["tts_voice"] == "en-US-AriaNeural"
assert saved["tts_rate"] == 1.4
assert saved["tts_pitch"] == 0.8
assert saved["tts_pitch"] == 0.0
assert saved["voice_mode_button"] is True
assert saved["voice_continuous"] is True
assert saved["voice_silence_ms"] == 2400
@ -193,6 +193,10 @@ def test_settings_panel_persists_speech_fields_and_keeps_immediate_cache_writes(
]:
assert storage_key in panel_block or storage_key in payload_block
assert "_speechSetting('tts_engine','hermes-tts-engine','browser')" in panel_block
assert "savedRate||'1'" not in panel_block
assert "savedPitch||'1'" not in panel_block
assert "ttsRateSlider.value=(savedRate===null||savedRate===undefined)?'1':String(savedRate)" in panel_block
assert "ttsPitchSlider.value=(savedPitch===null||savedPitch===undefined)?'1':String(savedPitch)" in panel_block
assert "serverBool===fallbackBool&&storedBool!==fallbackBool" in PANELS_JS
assert "String(server)===String(fallback)&&String(stored)!==String(fallback)" in PANELS_JS
assert "_schedulePreferencesAutosave()" in panel_block