Skip to content

Commit

Permalink
Extract resolve announcement media ID for AssistSatelliteEntity (home…
Browse files Browse the repository at this point in the history
  • Loading branch information
balloob authored Jan 11, 2025
1 parent 619dee5 commit ab8af03
Showing 1 changed file with 47 additions and 41 deletions.
88 changes: 47 additions & 41 deletions homeassistant/components/assist_satellite/entity.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,47 +187,10 @@ async def async_internal_announce(
"""
await self._cancel_running_pipeline()

media_id_source: Literal["url", "media_id", "tts"] | None = None

if message is None:
message = ""

if not media_id:
media_id_source = "tts"
# Synthesize audio and get URL
pipeline_id = self._resolve_pipeline()
pipeline = async_get_pipeline(self.hass, pipeline_id)

tts_options: dict[str, Any] = {}
if pipeline.tts_voice is not None:
tts_options[tts.ATTR_VOICE] = pipeline.tts_voice

if self.tts_options is not None:
tts_options.update(self.tts_options)

media_id = tts_generate_media_source_id(
self.hass,
message,
engine=pipeline.tts_engine,
language=pipeline.tts_language,
options=tts_options,
)

if media_source.is_media_source_id(media_id):
if not media_id_source:
media_id_source = "media_id"
media = await media_source.async_resolve_media(
self.hass,
media_id,
None,
)
media_id = media.url

if not media_id_source:
media_id_source = "url"

# Resolve to full URL
media_id = async_process_play_media_url(self.hass, media_id)
announcement = await self._resolve_announcement_media_id(message, media_id)

if self._is_announcing:
raise SatelliteBusyError
Expand All @@ -237,9 +200,7 @@ async def async_internal_announce(

try:
# Block until announcement is finished
await self.async_announce(
AssistSatelliteAnnouncement(message, media_id, media_id_source)
)
await self.async_announce(announcement)
finally:
self._is_announcing = False
self._set_state(AssistSatelliteState.IDLE)
Expand Down Expand Up @@ -428,3 +389,48 @@ def _resolve_vad_sensitivity(self) -> float:
vad_sensitivity = vad.VadSensitivity(vad_sensitivity_state.state)

return vad.VadSensitivity.to_seconds(vad_sensitivity)

async def _resolve_announcement_media_id(
self, message: str, media_id: str | None
) -> AssistSatelliteAnnouncement:
"""Resolve the media ID."""
media_id_source: Literal["url", "media_id", "tts"] | None = None

if not media_id:
media_id_source = "tts"
# Synthesize audio and get URL
pipeline_id = self._resolve_pipeline()
pipeline = async_get_pipeline(self.hass, pipeline_id)

tts_options: dict[str, Any] = {}
if pipeline.tts_voice is not None:
tts_options[tts.ATTR_VOICE] = pipeline.tts_voice

if self.tts_options is not None:
tts_options.update(self.tts_options)

media_id = tts_generate_media_source_id(
self.hass,
message,
engine=pipeline.tts_engine,
language=pipeline.tts_language,
options=tts_options,
)

if media_source.is_media_source_id(media_id):
if not media_id_source:
media_id_source = "media_id"
media = await media_source.async_resolve_media(
self.hass,
media_id,
None,
)
media_id = media.url

if not media_id_source:
media_id_source = "url"

# Resolve to full URL
media_id = async_process_play_media_url(self.hass, media_id)

return AssistSatelliteAnnouncement(message, media_id, media_id_source)

0 comments on commit ab8af03

Please sign in to comment.