Stop tool status audio before final speech

This commit is contained in:
Mikei386 committed 2026-08-23 13:56:18 +02:00
1 parent 727827ac32
commit c60031c957
1 file changed
+19 -8
@@ -113,8 +113,8 @@ class Filter:
const safeCategory = allowed.includes(category) ? category : 'generic'; const safeCategory = allowed.includes(category) ? category : 'generic';
const timers = window.__mikeAIToolStatusTimers ||= new Map(); const timers = window.__mikeAIToolStatusTimers ||= new Map();
if (timers.has(key)) return; if (timers.has(key)) return;
const timer = window.setTimeout(async () => {{ const state = {{ timer: undefined, audio: undefined }};
timers.delete(key); state.timer = window.setTimeout(async () => {{
let enabled = false; let enabled = false;
try {{ try {{
const local = JSON.parse(localStorage.getItem('settings') || '{{}}'); const local = JSON.parse(localStorage.getItem('settings') || '{{}}');
@@ -131,15 +131,22 @@ class Filter:
}} }}
}} }}
}} catch (_) {{}} }} catch (_) {{}}
if (!enabled) return; if (!enabled) {{
timers.delete(key);
return;
}}
try {{ try {{
const audio = new Audio(`/static/tool-status/${{safeCategory}}.mp3?status=v1`); const audio = new Audio(`/static/tool-status/${{safeCategory}}.mp3?status=v1`);
state.audio = audio;
audio.preload = 'auto'; audio.preload = 'auto';
audio.volume = 0.92; audio.volume = 0.92;
audio.addEventListener('ended', () => timers.delete(key), {{ once: true }});
await audio.play(); await audio.play();
}} catch (_) {{}} }} catch (_) {{
timers.delete(key);
}}
}}, 850); }}, 850);
timers.set(key, timer); timers.set(key, state);
}})(); }})();
""".strip() """.strip()
try: try:
@@ -166,9 +173,13 @@ class Filter:
(() => {{ (() => {{
const key = {json.dumps(key)}; const key = {json.dumps(key)};
const timers = window.__mikeAIToolStatusTimers; const timers = window.__mikeAIToolStatusTimers;
const timer = timers && timers.get(key); const state = timers && timers.get(key);
if (timer !== undefined) {{ if (state !== undefined) {{
window.clearTimeout(timer); if (state.timer !== undefined) window.clearTimeout(state.timer);
if (state.audio) {{
state.audio.pause();
state.audio.currentTime = 0;
}}
timers.delete(key); timers.delete(key);
}} }}
}})(); }})();