From addb66f21da04aad835558c6b3d1b729e9eeba1d Mon Sep 17 00:00:00 2001 From: Paul Bottein Date: Wed, 26 Apr 2023 15:42:44 +0200 Subject: [PATCH] Inform user that subscription is needed for cloud services (#16318) --- .../config/voice-assistants/assist-pref.ts | 4 +++ .../dialog-voice-assistant-pipeline-detail.ts | 33 ++++++++++++++++--- .../ha-config-voice-assistants-assistants.ts | 5 ++- ...-dialog-voice-assistant-pipeline-detail.ts | 1 + src/translations/en.json | 4 ++- 5 files changed, 41 insertions(+), 6 deletions(-) diff --git a/src/panels/config/voice-assistants/assist-pref.ts b/src/panels/config/voice-assistants/assist-pref.ts index 7ea9a3032c..221bc6dfa4 100644 --- a/src/panels/config/voice-assistants/assist-pref.ts +++ b/src/panels/config/voice-assistants/assist-pref.ts @@ -22,6 +22,7 @@ import type { HomeAssistant } from "../../../types"; import { showVoiceAssistantPipelineDetailDialog } from "./show-dialog-voice-assistant-pipeline-detail"; import { brandsUrl } from "../../../util/brands-url"; import { formatLanguageCode } from "../../../common/language/format_language"; +import { CloudStatusLoggedIn } from "../../../data/cloud"; export class AssistPref extends LitElement { @property({ attribute: false }) public hass!: HomeAssistant; @@ -30,6 +31,8 @@ export class AssistPref extends LitElement { @state() private _preferred: string | null = null; + @property() public cloudStatus?: CloudStatusLoggedIn; + protected firstUpdated(changedProps: PropertyValues) { super.firstUpdated(changedProps); @@ -125,6 +128,7 @@ export class AssistPref extends LitElement { private async _openDialog(pipeline?: AssistPipeline): Promise { showVoiceAssistantPipelineDetailDialog(this, { + cloudActiveSubscription: this.cloudStatus?.active_subscription, pipeline, preferred: pipeline?.id === this._preferred, createPipeline: async (values) => { diff --git a/src/panels/config/voice-assistants/dialog-voice-assistant-pipeline-detail.ts b/src/panels/config/voice-assistants/dialog-voice-assistant-pipeline-detail.ts index d9076c983a..62c35bdc2b 100644 --- a/src/panels/config/voice-assistants/dialog-voice-assistant-pipeline-detail.ts +++ b/src/panels/config/voice-assistants/dialog-voice-assistant-pipeline-detail.ts @@ -28,6 +28,8 @@ export class DialogVoiceAssistantPipelineDetail extends LitElement { @state() private _preferred?: boolean; + @state() private _cloudActive?: boolean; + @state() private _error?: Record; @state() private _submitting = false; @@ -40,13 +42,14 @@ export class DialogVoiceAssistantPipelineDetail extends LitElement { if (this._params.pipeline) { this._data = this._params.pipeline; this._preferred = this._params.preferred; + this._cloudActive = this._params.cloudActiveSubscription; } else { this._data = { language: ( this.hass.config.language || this.hass.locale.language ).substring(0, 2), - stt_engine: "cloud", - tts_engine: "cloud", + stt_engine: this._cloudActive ? "cloud" : undefined, + tts_engine: this._cloudActive ? "cloud" : undefined, }; } } @@ -88,7 +91,7 @@ export class DialogVoiceAssistantPipelineDetail extends LitElement { >
${this._error - ? html` ${this._error} ` + ? html`${this._error}` : nothing} + ${!this._cloudActive && + (this._data.tts_engine === "cloud" || + this._data.stt_engine === "cloud") + ? html` + ${this.hass.localize( + "ui.panel.config.voice_assistants.assistants.pipeline.detail.no_cloud_message" + )} + + + ${this.hass.localize( + "ui.panel.config.voice_assistants.assistants.pipeline.detail.no_cloud_action" + )} + + + + ` + : nothing}
${isComponentLoaded(this.hass, "assist_pipeline") - ? html` ` + ? html`` : nothing} ${this.cloudStatus?.logged_in ? html` diff --git a/src/panels/config/voice-assistants/show-dialog-voice-assistant-pipeline-detail.ts b/src/panels/config/voice-assistants/show-dialog-voice-assistant-pipeline-detail.ts index f0e6b7d5c6..09b57b6c0c 100644 --- a/src/panels/config/voice-assistants/show-dialog-voice-assistant-pipeline-detail.ts +++ b/src/panels/config/voice-assistants/show-dialog-voice-assistant-pipeline-detail.ts @@ -5,6 +5,7 @@ import { } from "../../../data/assist_pipeline"; export interface VoiceAssistantPipelineDetailsDialogParams { + cloudActiveSubscription?: boolean; pipeline?: AssistPipeline; preferred?: boolean; createPipeline: (values: AssistPipelineMutableParams) => Promise; diff --git a/src/translations/en.json b/src/translations/en.json index e847913eb1..36a61b8f81 100755 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -2068,7 +2068,9 @@ "title": "Text-to-speech", "description": "When you are controlling your assistant with voice, the text-to-speech engine turns the conversation text responses into audio." } - } + }, + "no_cloud_message": "You should have an active cloud subscription to use cloud speech services.", + "no_cloud_action": "Subscribe" } }, "cloud": {