From 77fa57438e5baaaacd90c047745b5da1eb4cac02 Mon Sep 17 00:00:00 2001 From: Huang Xin Date: Sat, 31 May 2025 15:21:17 +0800 Subject: [PATCH] tts: show speaking sentence and chapter info in tts media session (#1289) --- .../app/library/components/SettingsMenu.tsx | 2 +- .../src/app/reader/components/FooterBar.tsx | 17 ++++-- .../reader/components/annotator/Annotator.tsx | 13 ++++- .../app/reader/components/tts/TTSControl.tsx | 57 +++++++++++++++---- .../src/app/reader/components/tts/TTSIcon.tsx | 14 ++++- .../app/reader/components/tts/TTSPanel.tsx | 9 ++- .../src/app/reader/hooks/useTextSelector.ts | 12 +++- .../src/services/tts/EdgeTTSClient.ts | 7 ++- .../src/services/tts/TTSController.ts | 9 ++- .../src/services/tts/WebSpeechClient.ts | 12 +++- apps/readest-app/src/services/tts/index.ts | 1 + apps/readest-app/src/services/tts/types.ts | 6 ++ apps/readest-app/src/store/readerStore.ts | 16 ++++++ apps/readest-app/src/utils/ssml.ts | 7 +-- 14 files changed, 148 insertions(+), 34 deletions(-) create mode 100644 apps/readest-app/src/services/tts/types.ts diff --git a/apps/readest-app/src/app/library/components/SettingsMenu.tsx b/apps/readest-app/src/app/library/components/SettingsMenu.tsx index f212b380..6861fdd9 100644 --- a/apps/readest-app/src/app/library/components/SettingsMenu.tsx +++ b/apps/readest-app/src/app/library/components/SettingsMenu.tsx @@ -235,6 +235,7 @@ const SettingsMenu: React.FC = ({ setIsDropdownOpen }) => { Icon={isScreenWakeLock ? MdCheck : undefined} onClick={toggleScreenWakeLock} /> + = ({ setIsDropdownOpen }) => { Icon={themeMode === 'dark' ? BiMoon : themeMode === 'light' ? BiSun : TbSunMoon} onClick={cycleThemeMode} /> -
{isWebAppPlatform() && } diff --git a/apps/readest-app/src/app/reader/components/FooterBar.tsx b/apps/readest-app/src/app/reader/components/FooterBar.tsx index ddd9028e..7a68451e 100644 --- a/apps/readest-app/src/app/reader/components/FooterBar.tsx +++ b/apps/readest-app/src/app/reader/components/FooterBar.tsx @@ -41,8 +41,8 @@ const FooterBar: React.FC = ({ }) => { const _ = useTranslation(); const { envConfig, appService } = useEnv(); - const { hoveredBookKey, setHoveredBookKey, getView, getProgress, getViewSettings } = - useReaderStore(); + const { hoveredBookKey, setHoveredBookKey } = useReaderStore(); + const { getView, getViewState, getProgress, getViewSettings } = useReaderStore(); const { isSideBarVisible, setSideBarVisible } = useSidebarStore(); const [actionTab, setActionTab] = React.useState(''); const sliderHeight = useResponsiveSize(28); @@ -53,6 +53,7 @@ const FooterBar: React.FC = ({ const view = getView(bookKey); const progress = getProgress(bookKey); const viewSettings = getViewSettings(bookKey); + const viewState = getViewState(bookKey); const handleProgressChange = (value: number) => { view?.goToFraction(value / 100.0); @@ -147,6 +148,7 @@ const FooterBar: React.FC = ({ }; const isVisible = hoveredBookKey === bookKey; + const ttsEnabled = viewState?.ttsEnabled; const progressInfo = bookFormat === 'PDF' ? section : pageinfo; const progressValid = !!progressInfo; const progressFraction = @@ -312,7 +314,10 @@ const FooterBar: React.FC = ({ } onClick={() => handleSetActionTab('font')} /> -