From 707b50b563cfc0a01cce3ff64fc05943ebaa95a4 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Wed, 23 Feb 2022 21:33:37 -0500 Subject: [PATCH] update tts voice --- .../shared/EventResponse.ts | 2 +- .../tts_configs/TtsConfigsEditRulePage.tsx | 49 +++++++++++++++++-- .../TtsSingleVoiceForm.tsx | 18 +++++-- 3 files changed, 61 insertions(+), 8 deletions(-) diff --git a/packages/components/src/api/storyteller/twitch_event_rules/shared/EventResponse.ts b/packages/components/src/api/storyteller/twitch_event_rules/shared/EventResponse.ts index ac26158ed8..b5cfcab869 100644 --- a/packages/components/src/api/storyteller/twitch_event_rules/shared/EventResponse.ts +++ b/packages/components/src/api/storyteller/twitch_event_rules/shared/EventResponse.ts @@ -19,4 +19,4 @@ export interface EventResponse { // Respond with TTS tts_single_voice?: TtsSingleVoice, tts_random_voice?: TtsRandomVoice, -} \ No newline at end of file +} diff --git a/packages/storyteller/src/pages/tts_configs/TtsConfigsEditRulePage.tsx b/packages/storyteller/src/pages/tts_configs/TtsConfigsEditRulePage.tsx index df9c159328..7747744f08 100644 --- a/packages/storyteller/src/pages/tts_configs/TtsConfigsEditRulePage.tsx +++ b/packages/storyteller/src/pages/tts_configs/TtsConfigsEditRulePage.tsx @@ -13,8 +13,10 @@ import { BitsCheermoteNameExactMatchForm } from './components/BitsCheermoteNameE import { BitsSpendThresholdForm } from './components/BitsSpendThresholdForm'; import { BitsCheermotePrefixSpendThresholdForm } from './components/BitsCheermotePrefixSpendThresholdForm'; import { TwitchEventCategory } from '@storyteller/components/src/api/storyteller/twitch_event_rules/shared/TwitchEventCategory'; -import { BitsRuleType, ChannelPointsRuleType } from './components/RuleTypes'; +import { BitsRuleType } from './components/RuleTypes'; import { ChannelPointsRewardNameExactMatchForm } from './components/ChannelPointsRewardNameExactMatchForm'; +import { TtsSingleVoiceForm } from './event_response_builder/TtsSingleVoiceForm'; +import { EventResponseType } from './event_response_builder/EventResponseType'; interface Props { sessionWrapper: SessionWrapper, @@ -39,7 +41,9 @@ function TtsConfigsEditRulePage(props: Props) { const [bitsRuleType, setBitsRuleType] = useState(BitsRuleType.BitsCheermoteNameExactMatch); //const [channelPointsRuleType, setChannelPointsRuleType] = useState(ChannelPointsRuleType.ChannelPointsRewardNameExactMatch); - // ===== Field values (editing) ===== + const [eventResponseType, setEventResponseType] = useState(EventResponseType.TtsSingleVoice); + + // ===== Predicate Field values (editing) ===== // Used in: // BitsCheermoteNameExactMatch @@ -55,6 +59,12 @@ function TtsConfigsEditRulePage(props: Props) { // ChannelPointsRewardNameExactMatch const [rewardName, setRewardName] = useState(''); + // ===== Response Field values (editing) ===== + + // Used in: + // TtsSingleVoice + const [ttsModelToken, setTtsModelToken] = useState(''); + // ===== Field values (final) ===== const [eventMatchPredicate, setEventMatchPredicate] = useState({}); @@ -97,6 +107,14 @@ function TtsConfigsEditRulePage(props: Props) { setBitsRuleType(serverBitsRuleType); + if (!!response.twitch_event_rule.event_response.tts_single_voice) { + setEventResponseType(EventResponseType.TtsSingleVoice); + setTtsModelToken(response.twitch_event_rule.event_response.tts_single_voice.tts_model_token) + } else if (!!response.twitch_event_rule.event_response.tts_random_voice) { + setEventResponseType(EventResponseType.TtsRandomVoice); + // TODO + } + } else if (GetTwitchEventRuleIsError(response)) { // TODO } @@ -193,6 +211,25 @@ function TtsConfigsEditRulePage(props: Props) { setRewardName(name); } + const updateTtsModelToken = (token: string) => { + let response : EventResponse = {}; + + switch (eventResponseType) { + case EventResponseType.TtsSingleVoice: + response.tts_single_voice = { + tts_model_token: token, + } + break; + case EventResponseType.TtsRandomVoice: + break; + } + + console.log(token); + + setTtsModelToken(token); + setEventResponse(response); + } + const handleFormSubmit = async (ev: React.FormEvent) : Promise => { ev.preventDefault(); @@ -310,7 +347,13 @@ function TtsConfigsEditRulePage(props: Props) {

3) Pick how to respond

-

Todo

+ +

diff --git a/packages/storyteller/src/pages/tts_configs/event_response_builder/TtsSingleVoiceForm.tsx b/packages/storyteller/src/pages/tts_configs/event_response_builder/TtsSingleVoiceForm.tsx index b134308c1e..bf38b1454c 100644 --- a/packages/storyteller/src/pages/tts_configs/event_response_builder/TtsSingleVoiceForm.tsx +++ b/packages/storyteller/src/pages/tts_configs/event_response_builder/TtsSingleVoiceForm.tsx @@ -17,7 +17,13 @@ function TtsSingleVoiceForm(props: TtsSingleVoiceFormProps) { const handleModelSelect = (ev: React.FormEvent) : boolean => { const value = (ev.target as HTMLSelectElement).value; - // check voice + + if (!!value && !props.allTtsModelsByToken.has(value)) { + return false; + } + + setTtsModelToken(value); + props.setTtsModelToken(value); return true; } @@ -27,8 +33,11 @@ function TtsSingleVoiceForm(props: TtsSingleVoiceFormProps) {
- + {props.allTtsModels.map(ttsModel => { return (