refactor: move `tts` to right setting atom

Signed-off-by: Innei <tukon479@gmail.com>
This commit is contained in:
Innei 2024-10-29 20:00:26 +08:00
parent 14e37da0ce
commit 120cf43bcd
No known key found for this signature in database
GPG Key ID: 0F62D33977F021F7
5 changed files with 23 additions and 18 deletions

View File

@ -18,10 +18,12 @@ const createDefaultSettings = (): GeneralSettings => ({
hoverMarkUnread: true,
renderMarkUnread: false,
// UX
// autoHideFeedColumn: true,
groupByDate: true,
// Secure
jumpOutLinkWarn: true,
// TTS
voice: "en-US-AndrewMultilingualNeural",
})
export const {
@ -44,4 +46,5 @@ export const generalServerSyncWhiteListKeys: (keyof GeneralSettings)[] = [
"dataPersist",
"sendAnonymousData",
"language",
"voice",
]

View File

@ -11,6 +11,7 @@ export const createDefaultSettings = (): UISettings => ({
opaqueSidebar: false,
sidebarShowUnreadCount: true,
hideExtraBadge: false,
// Global UI
uiTextSize: 16,
@ -37,9 +38,6 @@ export const createDefaultSettings = (): UISettings => ({
pictureViewMasonry: true,
pictureViewFilterNoImage: false,
wideMode: false,
// TTS
voice: "en-US-AndrewMultilingualNeural",
})
export const {
@ -57,7 +55,6 @@ export const uiServerSyncWhiteListKeys: (keyof UISettings)[] = [
"uiFontFamily",
"readerFontFamily",
"opaqueSidebar",
"voice",
]
const isZenModeAtom = atom((get) => {

View File

@ -20,10 +20,10 @@ import { defaultResources } from "~/@types/default-resource"
import { langLoadingLockMapAtom } from "~/atoms/lang"
import {
setGeneralSetting,
useGeneralSettingKey,
useGeneralSettingSelector,
useGeneralSettingValue,
} from "~/atoms/settings/general"
import { createDefaultSettings, setUISetting, useUISettingSelector } from "~/atoms/settings/ui"
import { useModalStack } from "~/components/ui/modal/stacked/hooks"
import { useProxyValue, useSetProxy } from "~/hooks/biz/useProxySetting"
import { fallbackLanguage } from "~/i18n"
@ -190,16 +190,17 @@ export const VoiceSelector = () => {
persist: true,
},
})
const voice = useUISettingSelector((state) => state.voice)
const voice = useGeneralSettingKey("voice")
return (
<div className="-mt-1 mb-3 flex items-center justify-between">
<span className="shrink-0 text-sm font-medium">{t("general.voices")}</span>
<Select
defaultValue={createDefaultSettings().voice}
defaultValue={voice}
value={voice}
onValueChange={(value) => {
setUISetting("voice", value)
setGeneralSetting("voice", value)
}}
>
<SelectTrigger size="sm" className="w-48">

View File

@ -44,12 +44,6 @@ const useUISettingSync = () => {
}
return
}, [setting.showDockBadge])
useEffect(() => {
if (setting.voice) {
tipcClient?.setVoice(setting.voice)
}
}, [setting.voice])
}
const useUXSettingSync = () => {
@ -78,9 +72,19 @@ const useLanguageSync = () => {
}
}, [language])
}
const useGeneralSettingSync = () => {
const voice = useGeneralSettingKey("voice")
useEffect(() => {
if (voice) {
tipcClient?.setVoice(voice)
}
}, [voice])
}
export const SettingSync = () => {
useUISettingSync()
useUXSettingSync()
useLanguageSync()
useGeneralSettingSync()
return null
}

View File

@ -9,6 +9,8 @@ export interface GeneralSettings {
renderMarkUnread: boolean
groupByDate: boolean
jumpOutLinkWarn: boolean
// TTS
voice: string
}
export interface UISettings {
@ -16,6 +18,7 @@ export interface UISettings {
feedColWidth: number
opaqueSidebar: boolean
sidebarShowUnreadCount: boolean
hideExtraBadge: boolean
uiTextSize: number
showDockBadge: boolean
modalOverlay: boolean
@ -35,9 +38,6 @@ export interface UISettings {
pictureViewMasonry: boolean
pictureViewFilterNoImage: boolean
wideMode: boolean
// tts
voice: string
}
export interface IntegrationSettings {