From 7d1ce1b2401e26147f0617ebc6aceeb95f77fa51 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 19 Jan 2022 09:32:24 -0800 Subject: [PATCH] Allow creating automation from TTS try dialog (#11161) --- .../cloud/account/dialog-cloud-tts-try.ts | 64 +++++++++++++------ src/translations/en.json | 3 +- 2 files changed, 48 insertions(+), 19 deletions(-) diff --git a/src/panels/config/cloud/account/dialog-cloud-tts-try.ts b/src/panels/config/cloud/account/dialog-cloud-tts-try.ts index 9c12915a88..c80f4117c7 100644 --- a/src/panels/config/cloud/account/dialog-cloud-tts-try.ts +++ b/src/panels/config/cloud/account/dialog-cloud-tts-try.ts @@ -1,10 +1,9 @@ import "@material/mwc-button"; -import { mdiPlayCircleOutline } from "@mdi/js"; +import { mdiPlayCircleOutline, mdiRobot } from "@mdi/js"; import "@polymer/paper-input/paper-textarea"; import type { PaperTextareaElement } from "@polymer/paper-input/paper-textarea"; import "@polymer/paper-item/paper-item"; import "@polymer/paper-listbox/paper-listbox"; -import type { PaperListboxElement } from "@polymer/paper-listbox/paper-listbox"; import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state, query } from "lit/decorators"; import { LocalStorage } from "../../../../common/decorators/local-storage"; @@ -14,6 +13,7 @@ import { computeStateName } from "../../../../common/entity/compute_state_name"; import { supportsFeature } from "../../../../common/entity/supports-feature"; import { createCloseHeading } from "../../../../components/ha-dialog"; import "../../../../components/ha-paper-dropdown-menu"; +import { showAutomationEditor } from "../../../../data/automation"; import { SUPPORT_PLAY_MEDIA } from "../../../../data/media-player"; import { convertTextToSpeech } from "../../../../data/tts"; import { showAlertDialog } from "../../../../dialogs/generic/show-dialog-box"; @@ -29,13 +29,11 @@ export class DialogTryTts extends LitElement { @state() private _params?: TryTtsDialogParams; - @query("#target") private _targetInput?: PaperListboxElement; - @query("#message") private _messageInput?: PaperTextareaElement; - @LocalStorage("cloudTtsTryMessage") private _message?: string; + @LocalStorage("cloudTtsTryMessage") private _message!: string; - @LocalStorage("cloudTtsTryTarget") private _target?: string; + @LocalStorage("cloudTtsTryTarget") private _target!: string; public showDialog(params: TryTtsDialogParams) { this._params = params; @@ -50,6 +48,7 @@ export class DialogTryTts extends LitElement { if (!this._params) { return html``; } + const target = this._target || "browser"; return html` ${this.hass.localize( @@ -108,42 +108,70 @@ export class DialogTryTts extends LitElement { - -  ${this.hass.localize( - "ui.panel.config.cloud.account.tts.dialog.play" + + + + `; } - private async _playExample() { - const target = String(this._targetInput?.selected); - const message = this._messageInput?.value; + private _handleTargetChanged(ev) { + this._target = ev.detail.value; + this.requestUpdate("_target"); + } - if (!message || !target) { + private async _playExample() { + const message = this._messageInput?.value; + if (!message) { return; } - this._message = message; - this._target = target; - if (target === "browser") { + if (this._target === "browser") { // We create the audio element here + do a play, because iOS requires it to be done by user action const audio = new Audio(); audio.play(); this._playBrowser(message, audio); } else { this.hass.callService("tts", "cloud_say", { - entity_id: target, + entity_id: this._target, message, }); } } + private _createAutomation() { + const message = this._messageInput!.value!; + this._message = message; + showAutomationEditor({ + action: [ + { + service: "tts.cloud_say", + data: { + entity_id: this._target, + message: message, + }, + }, + ], + }); + this.closeDialog(); + } + private async _playBrowser(message: string, audio: HTMLAudioElement) { this._loadingExample = true; diff --git a/src/translations/en.json b/src/translations/en.json index 200a66cdbd..55f163fe90 100755 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -2075,7 +2075,8 @@ "example_message": "Hello {name}, you can play any text on any supported media player!", "target": "Target", "target_browser": "Browser", - "play": "Play" + "play": "Play", + "create_automation": "Create Automation" } }, "remote": {