From ff9d8011a671275ea71d3b4dde835d5db22990ca Mon Sep 17 00:00:00 2001 From: Russell Ballestrini Date: Sun, 7 Dec 2025 11:29:06 -0500 Subject: [PATCH] Fix model/voice localStorage persistence on page refresh Remove race condition where syncDropdownsAndQueryString() was called before dropdowns were populated, causing empty values to overwrite localStorage. Model and voice restoration now happens only in populateModelDropdown() and populateVoiceDropdown() after async fetch completes. --- templates/chat.html | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/templates/chat.html b/templates/chat.html index f17d51a..4769ae3 100644 --- a/templates/chat.html +++ b/templates/chat.html @@ -431,6 +431,7 @@ document.addEventListener('DOMContentLoaded', (event) => { if (initialVoice) { voiceSelectDesktop.value = initialVoice; if (voiceSelectMobile) voiceSelectMobile.value = initialVoice; + console.log(`Voice restored from localStorage: ${initialVoice}`); } } @@ -499,20 +500,10 @@ document.addEventListener('DOMContentLoaded', (event) => { userHasScrolledUp = distanceFromBottom > 5; }); - // Load model and voice from localStorage only (not URL) - const storedModel = localStorage.getItem('selectedModel') || "None"; - const storedVoice = localStorage.getItem('selectedVoice'); - - // Set initial model and voice from localStorage or defaults - const initialModel = storedModel; - const initialVoice = storedVoice; - - modelSelectDesktop.value = initialModel; - // Voice is set by populateVoiceDropdown after voices are fetched - modelSelectMobile.value = initialModel; - - // Initial sync to ensure localStorage is updated with current values - syncDropdownsAndQueryString(); + // NOTE: Model and voice restoration happens in populateModelDropdown() and + // populateVoiceDropdown() AFTER the async fetch completes. Don't set values + // here or call syncDropdownsAndQueryString() - that would overwrite localStorage + // with empty values before the dropdowns are populated. // Add event listeners for desktop dropdowns modelSelectDesktop.addEventListener("change", () => {