98 lines
2.1 KiB
TypeScript

import { Storage } from "@plasmohq/storage"
const storage = new Storage()
const DEFAULT_TTS_PROVIDER = "browser"
const AVAILABLE_TTS_PROVIDERS = ["browser"] as const
export const getTTSProvider = async (): Promise<
(typeof AVAILABLE_TTS_PROVIDERS)[number]
> => {
const ttsProvider = await storage.get("ttsProvider")
if (!ttsProvider || ttsProvider.length === 0) {
return DEFAULT_TTS_PROVIDER
}
return ttsProvider as (typeof AVAILABLE_TTS_PROVIDERS)[number]
}
export const setTTSProvider = async (ttsProvider: string) => {
await storage.set("ttsProvider", ttsProvider)
}
export const getBrowserTTSVoices = async () => {
const tts = await chrome.tts.getVoices()
return tts
}
export const getVoice = async () => {
const voice = await storage.get("voice")
return voice
}
export const setVoice = async (voice: string) => {
await storage.set("voice", voice)
}
export const isTTSEnabled = async () => {
const data = await storage.get("isTTSEnabled")
if(!data || data.length === 0) {
return true
}
return data === "true"
}
export const setTTSEnabled = async (isTTSEnabled: boolean) => {
await storage.set("isTTSEnabled", isTTSEnabled.toString())
}
export const isSSMLEnabled = async () => {
const data = await storage.get("isSSMLEnabled")
if(!data || data.length === 0) {
return true
}
return data === "true"
}
export const setSSMLEnabled = async (isSSMLEnabled: boolean) => {
await storage.set("isSSMLEnabled", isSSMLEnabled.toString())
}
export const getTTSSettings = async () => {
const [ttsEnabled, ttsProvider, browserTTSVoices, voice, ssmlEnabled] =
await Promise.all([
isTTSEnabled(),
getTTSProvider(),
getBrowserTTSVoices(),
getVoice(),
isSSMLEnabled()
])
return {
ttsEnabled,
ttsProvider,
browserTTSVoices,
voice,
ssmlEnabled
}
}
export const setTTSSettings = async ({
ttsEnabled,
ttsProvider,
voice,
ssmlEnabled
}: {
ttsEnabled: boolean
ttsProvider: string
voice: string
ssmlEnabled: boolean
}) => {
await Promise.all([
setTTSEnabled(ttsEnabled),
setTTSProvider(ttsProvider),
setVoice(voice),
setSSMLEnabled(ssmlEnabled)
])
}