mirror of
https://github.com/home-assistant/core.git
synced 2025-07-18 02:37:08 +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 import media_source
|
||||||
from homeassistant.components.media_player import (
|
from homeassistant.components.media_player import (
|
||||||
ATTR_MEDIA_ANNOUNCE,
|
ATTR_MEDIA_ANNOUNCE,
|
||||||
|
ATTR_MEDIA_EXTRA,
|
||||||
BrowseMedia,
|
BrowseMedia,
|
||||||
MediaPlayerDeviceClass,
|
MediaPlayerDeviceClass,
|
||||||
MediaPlayerEntity,
|
MediaPlayerEntity,
|
||||||
@ -50,6 +51,8 @@ _STATES: EsphomeEnumMapper[EspMediaPlayerState, MediaPlayerState] = EsphomeEnumM
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
ATTR_BYPASS_PROXY = "bypass_proxy"
|
||||||
|
|
||||||
|
|
||||||
class EsphomeMediaPlayer(
|
class EsphomeMediaPlayer(
|
||||||
EsphomeEntity[MediaPlayerInfo, MediaPlayerEntityState], MediaPlayerEntity
|
EsphomeEntity[MediaPlayerInfo, MediaPlayerEntityState], MediaPlayerEntity
|
||||||
@ -108,13 +111,15 @@ class EsphomeMediaPlayer(
|
|||||||
|
|
||||||
media_id = async_process_play_media_url(self.hass, media_id)
|
media_id = async_process_play_media_url(self.hass, media_id)
|
||||||
announcement = kwargs.get(ATTR_MEDIA_ANNOUNCE)
|
announcement = kwargs.get(ATTR_MEDIA_ANNOUNCE)
|
||||||
|
bypass_proxy = kwargs.get(ATTR_MEDIA_EXTRA, {}).get(ATTR_BYPASS_PROXY)
|
||||||
|
|
||||||
supported_formats: list[MediaPlayerSupportedFormat] | None = (
|
supported_formats: list[MediaPlayerSupportedFormat] | None = (
|
||||||
self._entry_data.media_player_formats.get(self._static_info.unique_id)
|
self._entry_data.media_player_formats.get(self._static_info.unique_id)
|
||||||
)
|
)
|
||||||
|
|
||||||
if (
|
if (
|
||||||
supported_formats
|
not bypass_proxy
|
||||||
|
and supported_formats
|
||||||
and _is_url(media_id)
|
and _is_url(media_id)
|
||||||
and (
|
and (
|
||||||
proxy_url := self._get_proxy_url(
|
proxy_url := self._get_proxy_url(
|
||||||
|
@ -22,6 +22,7 @@ from homeassistant.components.media_player import (
|
|||||||
ATTR_MEDIA_ANNOUNCE,
|
ATTR_MEDIA_ANNOUNCE,
|
||||||
ATTR_MEDIA_CONTENT_ID,
|
ATTR_MEDIA_CONTENT_ID,
|
||||||
ATTR_MEDIA_CONTENT_TYPE,
|
ATTR_MEDIA_CONTENT_TYPE,
|
||||||
|
ATTR_MEDIA_EXTRA,
|
||||||
ATTR_MEDIA_VOLUME_LEVEL,
|
ATTR_MEDIA_VOLUME_LEVEL,
|
||||||
ATTR_MEDIA_VOLUME_MUTED,
|
ATTR_MEDIA_VOLUME_MUTED,
|
||||||
DOMAIN as MEDIA_PLAYER_DOMAIN,
|
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
|
media_args = mock_client.media_player_command.call_args.kwargs
|
||||||
assert media_args["announcement"]
|
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