From 0f8d7982e1a10dbc08f614eb271cc48610fc2f1f Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Wed, 1 Apr 2026 05:40:32 -0500 Subject: [PATCH] refac --- .../chat/MessageInput/VoiceRecording.svelte | 45 ++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/src/lib/components/chat/MessageInput/VoiceRecording.svelte b/src/lib/components/chat/MessageInput/VoiceRecording.svelte index d3dc4cba37..fc6e32cf59 100644 --- a/src/lib/components/chat/MessageInput/VoiceRecording.svelte +++ b/src/lib/components/chat/MessageInput/VoiceRecording.svelte @@ -58,6 +58,34 @@ return `${minutes}:${formattedSeconds}`; }; + let wakeLock = null; + + const requestWakeLock = async () => { + if ('wakeLock' in navigator) { + try { + wakeLock = await navigator.wakeLock.request('screen'); + console.log('Wake Lock acquired'); + + wakeLock.addEventListener('release', () => { + console.log('Wake Lock released'); + }); + } catch (err) { + console.log('Wake Lock request failed:', err); + } + } + }; + + const releaseWakeLock = async () => { + if (wakeLock) { + try { + await wakeLock.release(); + } catch (err) { + console.log('Wake Lock release failed:', err); + } + wakeLock = null; + } + }; + let stream; let speechRecognition; @@ -216,11 +244,13 @@ mimeType: mineTypes.find((type) => MediaRecorder.isTypeSupported(type)) }); - mediaRecorder.onstart = () => { + mediaRecorder.onstart = async () => { console.log('Recording started'); loading = false; startDurationCounter(); + await requestWakeLock(); + audioChunks = []; analyseAudio(stream); }; @@ -333,6 +363,8 @@ speechRecognition.stop(); } + await releaseWakeLock(); + stopDurationCounter(); audioChunks = []; visualizerData = Array(VISUALIZER_BUFFER_LENGTH).fill(0); @@ -354,6 +386,8 @@ } clearInterval(durationCounter); + await releaseWakeLock(); + if (stream) { const tracks = stream.getTracks(); tracks.forEach((track) => track.stop()); @@ -376,8 +410,15 @@ } }; + const handleVisibilityChange = async () => { + if (recording && document.visibilityState === 'visible') { + await requestWakeLock(); + } + }; + onMount(() => { window.addEventListener('keydown', handleKeyDown); + document.addEventListener('visibilitychange', handleVisibilityChange); // listen to width changes resizeObserver = new ResizeObserver(() => { @@ -396,6 +437,8 @@ onDestroy(() => { window.removeEventListener('keydown', handleKeyDown); + document.removeEventListener('visibilitychange', handleVisibilityChange); + releaseWakeLock(); // remove resize observer resizeObserver.disconnect(); });