From f2a8528429bfa3a93ea3416a99cf9d44827a9fa4 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Tue, 2 May 2023 10:49:01 +0200 Subject: [PATCH] Use language picker for cloud tts language (#16363) * Use language picker for cloud tts language * Update ha-browse-media-tts.ts --- .../media-player/ha-browse-media-tts.ts | 22 +++--- src/data/cloud/tts.ts | 23 +----- .../config/cloud/account/cloud-tts-pref.ts | 70 +++++++++++-------- 3 files changed, 54 insertions(+), 61 deletions(-) diff --git a/src/components/media-player/ha-browse-media-tts.ts b/src/components/media-player/ha-browse-media-tts.ts index 152da17ac6..1755b4e6fd 100644 --- a/src/components/media-player/ha-browse-media-tts.ts +++ b/src/components/media-player/ha-browse-media-tts.ts @@ -21,6 +21,7 @@ import { buttonLinkStyle } from "../../resources/styles"; import { HomeAssistant } from "../../types"; import "../ha-select"; import "../ha-textarea"; +import "../ha-language-picker"; export interface TtsMediaPickedEvent { item: MediaPlayerItem; @@ -103,21 +104,17 @@ class BrowseMediaTTS extends LitElement { return html`
- - ${languages.map( - ([key, label]) => - html`${label}` - )} - + hass.callWS({ type: "cloud/tts/info" }); export const getCloudTtsLanguages = (info?: CloudTTSInfo) => { - const languages: Array<[string, string]> = []; + const languages: string[] = []; if (!info) { return languages; @@ -23,25 +22,9 @@ export const getCloudTtsLanguages = (info?: CloudTTSInfo) => { continue; } seen.add(lang); - - let label = lang; - - if (lang in translationMetadata.translations) { - label = translationMetadata.translations[lang].nativeName; - } else { - const [langFamily, dialect] = lang.split("-"); - if (langFamily in translationMetadata.translations) { - label = `${translationMetadata.translations[langFamily].nativeName}`; - - if (langFamily.toLowerCase() !== dialect.toLowerCase()) { - label += ` (${dialect})`; - } - } - } - - languages.push([lang, label]); + languages.push(lang); } - return languages.sort((a, b) => caseInsensitiveStringCompare(a[1], b[1])); + return languages; }; export const getCloudTtsSupportedGenders = ( diff --git a/src/panels/config/cloud/account/cloud-tts-pref.ts b/src/panels/config/cloud/account/cloud-tts-pref.ts index 43d421fda6..0245c3a134 100644 --- a/src/panels/config/cloud/account/cloud-tts-pref.ts +++ b/src/panels/config/cloud/account/cloud-tts-pref.ts @@ -8,6 +8,7 @@ import "../../../../components/ha-card"; import "../../../../components/ha-select"; import "../../../../components/ha-svg-icon"; import "../../../../components/ha-switch"; +import "../../../../components/ha-language-picker"; import { CloudStatusLoggedIn, updateCloudPref } from "../../../../data/cloud"; import { CloudTTSInfo, @@ -54,34 +55,33 @@ export class CloudTTSPref extends LitElement { '"tts.cloud_say"' )}

+
+ + - - ${languages.map( - ([key, label]) => - html`${label}` - )} - - - - ${genders.map( - ([key, label]) => - html`${label}` - )} - + + ${genders.map( + ([key, label]) => + html`${label}` + )} + +
@@ -115,11 +115,11 @@ export class CloudTTSPref extends LitElement { } async _handleLanguageChange(ev) { - if (ev.target.value === this.cloudStatus!.prefs.tts_default_voice[0]) { + if (ev.detail.value === this.cloudStatus!.prefs.tts_default_voice[0]) { return; } this.savingPreferences = true; - const language = ev.target.value; + const language = ev.detail.value; const curGender = this.cloudStatus!.prefs.tts_default_voice[1]; const genders = this.getSupportedGenders( @@ -185,6 +185,18 @@ export class CloudTTSPref extends LitElement { right: auto; left: 24px; } + .row { + display: flex; + } + .row > * { + flex: 1; + } + .row > *:first-child { + margin-right: 8px; + } + .row > *:last-child { + margin-left: 8px; + } .card-actions { display: flex; flex-direction: row-reverse;