diff --git a/homeassistant/components/tts/__init__.py b/homeassistant/components/tts/__init__.py index 45db6007e31..4628ec8768a 100644 --- a/homeassistant/components/tts/__init__.py +++ b/homeassistant/components/tts/__init__.py @@ -203,55 +203,28 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: language = service.data.get(ATTR_LANGUAGE) options = service.data.get(ATTR_OPTIONS) - if tts.base_url is None or tts.base_url == get_url(hass): - tts.process_options(p_type, language, options) - params = { - "message": message, - } - if cache is not None: - params["cache"] = "true" if cache else "false" - if language is not None: - params["language"] = language - if options is not None: - params.update(options) - - await hass.services.async_call( - DOMAIN_MP, - SERVICE_PLAY_MEDIA, - { - ATTR_ENTITY_ID: entity_ids, - ATTR_MEDIA_CONTENT_ID: generate_media_source_id( - DOMAIN, - str(yarl.URL.build(path=p_type, query=params)), - ), - ATTR_MEDIA_CONTENT_TYPE: MEDIA_TYPE_MUSIC, - }, - blocking=True, - context=service.context, - ) - return - - try: - url = await tts.async_get_url_path( - p_type, message, cache=cache, language=language, options=options - ) - except HomeAssistantError as err: - _LOGGER.error("Error on init TTS: %s", err) - return - - base = tts.base_url or get_url(hass) - url = base + url - - data = { - ATTR_MEDIA_CONTENT_ID: url, - ATTR_MEDIA_CONTENT_TYPE: MEDIA_TYPE_MUSIC, - ATTR_ENTITY_ID: entity_ids, + tts.process_options(p_type, language, options) + params = { + "message": message, } + if cache is not None: + params["cache"] = "true" if cache else "false" + if language is not None: + params["language"] = language + if options is not None: + params.update(options) await hass.services.async_call( DOMAIN_MP, SERVICE_PLAY_MEDIA, - data, + { + ATTR_ENTITY_ID: entity_ids, + ATTR_MEDIA_CONTENT_ID: generate_media_source_id( + DOMAIN, + str(yarl.URL.build(path=p_type, query=params)), + ), + ATTR_MEDIA_CONTENT_TYPE: MEDIA_TYPE_MUSIC, + }, blocking=True, context=service.context, ) diff --git a/homeassistant/components/tts/media_source.py b/homeassistant/components/tts/media_source.py index b212fc9ec3a..99ef3dd85a0 100644 --- a/homeassistant/components/tts/media_source.py +++ b/homeassistant/components/tts/media_source.py @@ -17,6 +17,7 @@ from homeassistant.components.media_source.models import ( ) from homeassistant.core import HomeAssistant, callback from homeassistant.exceptions import HomeAssistantError +from homeassistant.helpers.network import get_url from .const import DOMAIN @@ -64,6 +65,9 @@ class TTSMediaSource(MediaSource): mime_type = mimetypes.guess_type(url)[0] or "audio/mpeg" + if manager.base_url and manager.base_url != get_url(self.hass): + url = f"{manager.base_url}{url}" + return PlayMedia(url, mime_type) async def async_browse_media( diff --git a/tests/components/tts/test_init.py b/tests/components/tts/test_init.py index 098dde91cfa..7fd8cc0facb 100644 --- a/tests/components/tts/test_init.py +++ b/tests/components/tts/test_init.py @@ -366,7 +366,8 @@ async def test_setup_component_and_test_service_with_base_url_set(hass): assert len(calls) == 1 assert calls[0].data[ATTR_MEDIA_CONTENT_TYPE] == MEDIA_TYPE_MUSIC assert ( - calls[0].data[ATTR_MEDIA_CONTENT_ID] == "http://fnord" + await get_media_source_url(hass, calls[0].data[ATTR_MEDIA_CONTENT_ID]) + == "http://fnord" "/api/tts_proxy/42f18378fd4393d18c8dd11d03fa9563c1e54491" "_en_-_demo.mp3" )