mirror of
https://github.com/home-assistant/core.git
synced 2025-07-15 09:17:10 +00:00
Add optional flag to bypass the media proxy in esphome media players (#131191)
* Add optional flag to play_media to bypass media proxy * use constants * add test
This commit is contained in:
parent
bd0a2b6f68
commit
9bbf9be95f
@ -20,6 +20,7 @@ from aioesphomeapi import (
|
||||
from homeassistant.components import media_source
|
||||
from homeassistant.components.media_player import (
|
||||
ATTR_MEDIA_ANNOUNCE,
|
||||
ATTR_MEDIA_EXTRA,
|
||||
BrowseMedia,
|
||||
MediaPlayerDeviceClass,
|
||||
MediaPlayerEntity,
|
||||
@ -50,6 +51,8 @@ _STATES: EsphomeEnumMapper[EspMediaPlayerState, MediaPlayerState] = EsphomeEnumM
|
||||
}
|
||||
)
|
||||
|
||||
ATTR_BYPASS_PROXY = "bypass_proxy"
|
||||
|
||||
|
||||
class EsphomeMediaPlayer(
|
||||
EsphomeEntity[MediaPlayerInfo, MediaPlayerEntityState], MediaPlayerEntity
|
||||
@ -108,13 +111,15 @@ class EsphomeMediaPlayer(
|
||||
|
||||
media_id = async_process_play_media_url(self.hass, media_id)
|
||||
announcement = kwargs.get(ATTR_MEDIA_ANNOUNCE)
|
||||
bypass_proxy = kwargs.get(ATTR_MEDIA_EXTRA, {}).get(ATTR_BYPASS_PROXY)
|
||||
|
||||
supported_formats: list[MediaPlayerSupportedFormat] | None = (
|
||||
self._entry_data.media_player_formats.get(self._static_info.unique_id)
|
||||
)
|
||||
|
||||
if (
|
||||
supported_formats
|
||||
not bypass_proxy
|
||||
and supported_formats
|
||||
and _is_url(media_id)
|
||||
and (
|
||||
proxy_url := self._get_proxy_url(
|
||||
|
@ -22,6 +22,7 @@ from homeassistant.components.media_player import (
|
||||
ATTR_MEDIA_ANNOUNCE,
|
||||
ATTR_MEDIA_CONTENT_ID,
|
||||
ATTR_MEDIA_CONTENT_TYPE,
|
||||
ATTR_MEDIA_EXTRA,
|
||||
ATTR_MEDIA_VOLUME_LEVEL,
|
||||
ATTR_MEDIA_VOLUME_MUTED,
|
||||
DOMAIN as MEDIA_PLAYER_DOMAIN,
|
||||
@ -414,3 +415,22 @@ async def test_media_player_proxy(
|
||||
|
||||
media_args = mock_client.media_player_command.call_args.kwargs
|
||||
assert media_args["announcement"]
|
||||
|
||||
# test with bypass_proxy flag
|
||||
mock_async_create_proxy_url.reset_mock()
|
||||
await hass.services.async_call(
|
||||
MEDIA_PLAYER_DOMAIN,
|
||||
SERVICE_PLAY_MEDIA,
|
||||
{
|
||||
ATTR_ENTITY_ID: "media_player.test_mymedia_player",
|
||||
ATTR_MEDIA_CONTENT_TYPE: MediaType.MUSIC,
|
||||
ATTR_MEDIA_CONTENT_ID: media_url,
|
||||
ATTR_MEDIA_EXTRA: {
|
||||
"bypass_proxy": True,
|
||||
},
|
||||
},
|
||||
blocking=True,
|
||||
)
|
||||
mock_async_create_proxy_url.assert_not_called()
|
||||
media_args = mock_client.media_player_command.call_args.kwargs
|
||||
assert media_args["media_url"] == media_url
|
||||
|
Loading…
x
Reference in New Issue
Block a user