From d82e22ce1c757dff6513e07be0655583870846e6 Mon Sep 17 00:00:00 2001 From: Gigi Date: Mon, 20 Oct 2025 23:09:36 +0200 Subject: [PATCH] refactor: use TTSControls component in TTS settings for consistent UI --- src/components/Settings/TTSSettings.tsx | 87 +++---------------------- 1 file changed, 9 insertions(+), 78 deletions(-) diff --git a/src/components/Settings/TTSSettings.tsx b/src/components/Settings/TTSSettings.tsx index 1dc5c7bc..f2db8b9f 100644 --- a/src/components/Settings/TTSSettings.tsx +++ b/src/components/Settings/TTSSettings.tsx @@ -1,9 +1,8 @@ -import React, { useState } from 'react' +import React from 'react' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' -import { faGauge, faPlay, faPause } from '@fortawesome/free-solid-svg-icons' +import { faGauge } from '@fortawesome/free-solid-svg-icons' import { UserSettings } from '../../services/settingsService' -import { useTextToSpeech } from '../../hooks/useTextToSpeech' -import { detect } from 'tinyld' +import TTSControls from '../TTSControls' interface TTSSettingsProps { settings: UserSettings @@ -15,11 +14,6 @@ const EXAMPLE_TEXT = "Welcome to Boris. Text-to-speech brings your highlights an const TTSSettings: React.FC = ({ settings, onUpdate }) => { const currentSpeed = settings.ttsDefaultSpeed || 2.1 - const [isTestSpeaking, setIsTestSpeaking] = useState(false) - - const { supported, speaking, paused, speak, pause, resume, stop } = useTextToSpeech({ - defaultRate: currentSpeed - }) const handleCycleSpeed = () => { const currentIndex = SPEED_OPTIONS.indexOf(currentSpeed) @@ -27,46 +21,6 @@ const TTSSettings: React.FC = ({ settings, onUpdate }) => { onUpdate({ ttsDefaultSpeed: SPEED_OPTIONS[nextIndex] }) } - const handleTestPlayPause = () => { - if (!isTestSpeaking && !speaking) { - let langOverride: string | undefined - - // Determine language based on settings - const mode = settings?.ttsLanguageMode - if (mode === 'system' || settings?.ttsUseSystemLanguage) { - langOverride = navigator?.language?.split('-')[0] - } else { - try { - const detected = detect(EXAMPLE_TEXT) - if (typeof detected === 'string' && detected.length >= 2) { - langOverride = detected.slice(0, 2) - } - } catch (err) { - console.debug('[tts][detect] failed', err) - } - } - - setIsTestSpeaking(true) - speak(EXAMPLE_TEXT, langOverride) - } else if (paused) { - resume() - } else { - pause() - } - } - - const handleStopTest = () => { - stop() - setIsTestSpeaking(false) - } - - // Stop test speaking when settings change - React.useEffect(() => { - if (isTestSpeaking && !speaking) { - setIsTestSpeaking(false) - } - }, [speaking, isTestSpeaking]) - return (

Text-to-Speech

@@ -100,36 +54,13 @@ const TTSSettings: React.FC = ({ settings, onUpdate }) => {
- {supported && ( -
- -
- {EXAMPLE_TEXT} -
-
- - {isTestSpeaking && ( - - )} -
+
+ +
+ {EXAMPLE_TEXT}
- )} + +
) }