Update integrations to pass target player when resolving media (#72597)

This commit is contained in:
Erik Montnemery 2022-05-27 18:05:06 +02:00 committed by GitHub
parent f76afffd5a
commit 47d0cc9b09
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
35 changed files with 128 additions and 67 deletions

View File

@ -284,7 +284,9 @@ class AppleTvMediaPlayer(AppleTVEntity, MediaPlayerEntity):
await self.atv.apps.launch_app(media_id)
if media_source.is_media_source_id(media_id):
play_item = await media_source.async_resolve_media(self.hass, media_id)
play_item = await media_source.async_resolve_media(
self.hass, media_id, self.entity_id
)
media_id = play_item.url
media_type = MEDIA_TYPE_MUSIC

View File

@ -1025,7 +1025,9 @@ class BluesoundPlayer(MediaPlayerEntity):
return
if media_source.is_media_source_id(media_id):
play_item = await media_source.async_resolve_media(self.hass, media_id)
play_item = await media_source.async_resolve_media(
self.hass, media_id, self.entity_id
)
media_id = play_item.url
media_id = async_process_play_media_url(self.hass, media_id)

View File

@ -605,7 +605,9 @@ class CastMediaPlayerEntity(CastDevice, MediaPlayerEntity):
"""Play a piece of media."""
# Handle media_source
if media_source.is_media_source_id(media_id):
sourced_media = await media_source.async_resolve_media(self.hass, media_id)
sourced_media = await media_source.async_resolve_media(
self.hass, media_id, self.entity_id
)
media_type = sourced_media.mime_type
media_id = sourced_media.url

View File

@ -597,7 +597,9 @@ class DlnaDmrEntity(MediaPlayerEntity):
# If media is media_source, resolve it to url and MIME type, and maybe metadata
if media_source.is_media_source_id(media_id):
sourced_media = await media_source.async_resolve_media(self.hass, media_id)
sourced_media = await media_source.async_resolve_media(
self.hass, media_id, self.entity_id
)
media_type = sourced_media.mime_type
media_id = sourced_media.url
_LOGGER.debug("sourced_media is %s", sourced_media)

View File

@ -95,7 +95,9 @@ class EsphomeMediaPlayer(
) -> None:
"""Send the play command with media url to the media player."""
if media_source.is_media_source_id(media_id):
sourced_media = await media_source.async_resolve_media(self.hass, media_id)
sourced_media = await media_source.async_resolve_media(
self.hass, media_id, self.entity_id
)
media_id = sourced_media.url
media_id = async_process_play_media_url(self.hass, media_id)

View File

@ -666,7 +666,9 @@ class ForkedDaapdMaster(MediaPlayerEntity):
"""Play a URI."""
if media_source.is_media_source_id(media_id):
media_type = MEDIA_TYPE_MUSIC
play_item = await media_source.async_resolve_media(self.hass, media_id)
play_item = await media_source.async_resolve_media(
self.hass, media_id, self.entity_id
)
media_id = play_item.url
if media_type == MEDIA_TYPE_MUSIC:

View File

@ -96,7 +96,9 @@ class GstreamerDevice(MediaPlayerEntity):
"""Play media."""
# Handle media_source
if media_source.is_media_source_id(media_id):
sourced_media = await media_source.async_resolve_media(self.hass, media_id)
sourced_media = await media_source.async_resolve_media(
self.hass, media_id, self.entity_id
)
media_id = sourced_media.url
elif media_type != MEDIA_TYPE_MUSIC:

View File

@ -201,7 +201,9 @@ class HeosMediaPlayer(MediaPlayerEntity):
"""Play a piece of media."""
if media_source.is_media_source_id(media_id):
media_type = MEDIA_TYPE_URL
play_item = await media_source.async_resolve_media(self.hass, media_id)
play_item = await media_source.async_resolve_media(
self.hass, media_id, self.entity_id
)
media_id = play_item.url
if media_type in (MEDIA_TYPE_URL, MEDIA_TYPE_MUSIC):

View File

@ -713,7 +713,9 @@ class KodiEntity(MediaPlayerEntity):
"""Send the play_media command to the media player."""
if media_source.is_media_source_id(media_id):
media_type = MEDIA_TYPE_URL
play_item = await media_source.async_resolve_media(self.hass, media_id)
play_item = await media_source.async_resolve_media(
self.hass, media_id, self.entity_id
)
media_id = play_item.url
media_type_lower = media_type.lower()

View File

@ -453,7 +453,9 @@ class MpdDevice(MediaPlayerEntity):
"""Send the media player the command for playing a playlist."""
if media_source.is_media_source_id(media_id):
media_type = MEDIA_TYPE_MUSIC
play_item = await media_source.async_resolve_media(self.hass, media_id)
play_item = await media_source.async_resolve_media(
self.hass, media_id, self.entity_id
)
media_id = async_process_play_media_url(self.hass, play_item.url)
if media_type == MEDIA_TYPE_PLAYLIST:

View File

@ -209,7 +209,9 @@ class OpenhomeDevice(MediaPlayerEntity):
"""Send the play_media command to the media player."""
if media_source.is_media_source_id(media_id):
media_type = MEDIA_TYPE_MUSIC
play_item = await media_source.async_resolve_media(self.hass, media_id)
play_item = await media_source.async_resolve_media(
self.hass, media_id, self.entity_id
)
media_id = play_item.url
if media_type != MEDIA_TYPE_MUSIC:

View File

@ -188,7 +188,9 @@ class PanasonicVieraTVEntity(MediaPlayerEntity):
"""Play media."""
if media_source.is_media_source_id(media_id):
media_type = MEDIA_TYPE_URL
play_item = await media_source.async_resolve_media(self.hass, media_id)
play_item = await media_source.async_resolve_media(
self.hass, media_id, self.entity_id
)
media_id = play_item.url
if media_type != MEDIA_TYPE_URL:

View File

@ -384,7 +384,9 @@ class RokuMediaPlayer(RokuEntity, MediaPlayerEntity):
# Handle media_source
if media_source.is_media_source_id(media_id):
sourced_media = await media_source.async_resolve_media(self.hass, media_id)
sourced_media = await media_source.async_resolve_media(
self.hass, media_id, self.entity_id
)
media_type = MEDIA_TYPE_URL
media_id = sourced_media.url
mime_type = sourced_media.mime_type

View File

@ -180,7 +180,9 @@ class SlimProtoPlayer(MediaPlayerEntity):
to_send_media_type: str | None = media_type
# Handle media_source
if media_source.is_media_source_id(media_id):
sourced_media = await media_source.async_resolve_media(self.hass, media_id)
sourced_media = await media_source.async_resolve_media(
self.hass, media_id, self.entity_id
)
media_id = sourced_media.url
to_send_media_type = sourced_media.mime_type

View File

@ -550,7 +550,9 @@ class SonosMediaPlayerEntity(SonosEntity, MediaPlayerEntity):
media_type = MEDIA_TYPE_MUSIC
media_id = (
run_coroutine_threadsafe(
media_source.async_resolve_media(self.hass, media_id),
media_source.async_resolve_media(
self.hass, media_id, self.entity_id
),
self.hass.loop,
)
.result()

View File

@ -357,7 +357,9 @@ class SoundTouchDevice(MediaPlayerEntity):
async def async_play_media(self, media_type, media_id, **kwargs):
"""Play a piece of media."""
if media_source.is_media_source_id(media_id):
play_item = await media_source.async_resolve_media(self.hass, media_id)
play_item = await media_source.async_resolve_media(
self.hass, media_id, self.entity_id
)
media_id = async_process_play_media_url(self.hass, play_item.url)
await self.hass.async_add_executor_job(

View File

@ -484,7 +484,9 @@ class SqueezeBoxEntity(MediaPlayerEntity):
if media_source.is_media_source_id(media_id):
media_type = MEDIA_TYPE_MUSIC
play_item = await media_source.async_resolve_media(self.hass, media_id)
play_item = await media_source.async_resolve_media(
self.hass, media_id, self.entity_id
)
media_id = play_item.url
if media_type in MEDIA_TYPE_MUSIC:

View File

@ -118,7 +118,9 @@ class ProtectMediaPlayer(ProtectDeviceEntity, MediaPlayerEntity):
"""Play a piece of media."""
if media_source.is_media_source_id(media_id):
media_type = MEDIA_TYPE_MUSIC
play_item = await media_source.async_resolve_media(self.hass, media_id)
play_item = await media_source.async_resolve_media(
self.hass, media_id, self.entity_id
)
media_id = async_process_play_media_url(self.hass, play_item.url)
if media_type != MEDIA_TYPE_MUSIC:

View File

@ -168,7 +168,9 @@ class VlcDevice(MediaPlayerEntity):
"""Play media from a URL or file."""
# Handle media_source
if media_source.is_media_source_id(media_id):
sourced_media = await media_source.async_resolve_media(self.hass, media_id)
sourced_media = await media_source.async_resolve_media(
self.hass, media_id, self.entity_id
)
media_id = sourced_media.url
elif media_type != MEDIA_TYPE_MUSIC:

View File

@ -296,7 +296,9 @@ class VlcDevice(MediaPlayerEntity):
"""Play media from a URL or file."""
# Handle media_source
if media_source.is_media_source_id(media_id):
sourced_media = await media_source.async_resolve_media(self.hass, media_id)
sourced_media = await media_source.async_resolve_media(
self.hass, media_id, self.entity_id
)
media_type = sourced_media.mime_type
media_id = sourced_media.url

View File

@ -275,7 +275,9 @@ class MusicCastMediaPlayer(MusicCastDeviceEntity, MediaPlayerEntity):
async def async_play_media(self, media_type: str, media_id: str, **kwargs) -> None:
"""Play media."""
if media_source.is_media_source_id(media_id):
play_item = await media_source.async_resolve_media(self.hass, media_id)
play_item = await media_source.async_resolve_media(
self.hass, media_id, self.entity_id
)
media_id = play_item.url
if self.state == STATE_OFF:

View File

@ -62,7 +62,7 @@ async def test_resolving(hass, mock_camera_hls):
return_value="http://example.com/stream",
):
item = await media_source.async_resolve_media(
hass, "media-source://camera/camera.demo_camera"
hass, "media-source://camera/camera.demo_camera", None
)
assert item is not None
assert item.url == "http://example.com/stream"
@ -74,7 +74,7 @@ async def test_resolving_errors(hass, mock_camera_hls):
with pytest.raises(media_source.Unresolvable) as exc_info:
await media_source.async_resolve_media(
hass, "media-source://camera/camera.demo_camera"
hass, "media-source://camera/camera.demo_camera", None
)
assert str(exc_info.value) == "Stream integration not loaded"
@ -82,7 +82,7 @@ async def test_resolving_errors(hass, mock_camera_hls):
with pytest.raises(media_source.Unresolvable) as exc_info:
await media_source.async_resolve_media(
hass, "media-source://camera/camera.non_existing"
hass, "media-source://camera/camera.non_existing", None
)
assert str(exc_info.value) == "Could not resolve media item: camera.non_existing"
@ -91,13 +91,13 @@ async def test_resolving_errors(hass, mock_camera_hls):
new_callable=PropertyMock(return_value=StreamType.WEB_RTC),
):
await media_source.async_resolve_media(
hass, "media-source://camera/camera.demo_camera"
hass, "media-source://camera/camera.demo_camera", None
)
assert str(exc_info.value) == "Camera does not support MJPEG or HLS streaming."
with pytest.raises(media_source.Unresolvable) as exc_info:
await media_source.async_resolve_media(
hass, "media-source://camera/camera.demo_camera"
hass, "media-source://camera/camera.demo_camera", None
)
assert (
str(exc_info.value) == "camera.demo_camera does not support play stream service"

View File

@ -152,15 +152,15 @@ async def test_unavailable_device(
)
with pytest.raises(Unresolvable, match="DMS is not connected"):
await media_source.async_resolve_media(
hass, f"media-source://{DOMAIN}/{MOCK_SOURCE_ID}//resolve_path"
hass, f"media-source://{DOMAIN}/{MOCK_SOURCE_ID}//resolve_path", None
)
with pytest.raises(Unresolvable, match="DMS is not connected"):
await media_source.async_resolve_media(
hass, f"media-source://{DOMAIN}/{MOCK_SOURCE_ID}/:resolve_object"
hass, f"media-source://{DOMAIN}/{MOCK_SOURCE_ID}/:resolve_object", None
)
with pytest.raises(Unresolvable):
await media_source.async_resolve_media(
hass, f"media-source://{DOMAIN}/{MOCK_SOURCE_ID}/?resolve_search"
hass, f"media-source://{DOMAIN}/{MOCK_SOURCE_ID}/?resolve_search", None
)
@ -651,7 +651,7 @@ async def test_become_unavailable(
# Check async_resolve_object currently works
assert await media_source.async_resolve_media(
hass, f"media-source://{DOMAIN}/{MOCK_SOURCE_ID}/:object_id"
hass, f"media-source://{DOMAIN}/{MOCK_SOURCE_ID}/:object_id", None
)
# Now break the network connection
@ -660,7 +660,7 @@ async def test_become_unavailable(
# async_resolve_object should fail
with pytest.raises(Unresolvable):
await media_source.async_resolve_media(
hass, f"media-source://{DOMAIN}/{MOCK_SOURCE_ID}/:object_id"
hass, f"media-source://{DOMAIN}/{MOCK_SOURCE_ID}/:object_id", None
)
# The device should now be unavailable

View File

@ -45,7 +45,7 @@ async def async_resolve_media(
) -> DidlPlayMedia:
"""Call media_source.async_resolve_media with the test source's ID."""
result = await media_source.async_resolve_media(
hass, f"media-source://{DOMAIN}/{MOCK_SOURCE_ID}/{media_content_id}"
hass, f"media-source://{DOMAIN}/{MOCK_SOURCE_ID}/{media_content_id}", None
)
assert isinstance(result, DidlPlayMedia)
return result

View File

@ -60,31 +60,31 @@ async def test_resolve_media_bad_identifier(
"""Test trying to resolve an item that has an unresolvable identifier."""
# Empty identifier
with pytest.raises(Unresolvable, match="No source ID.*"):
await media_source.async_resolve_media(hass, f"media-source://{DOMAIN}")
await media_source.async_resolve_media(hass, f"media-source://{DOMAIN}", None)
# Identifier has media_id but no source_id
# media_source.URI_SCHEME_REGEX won't let the ID through to dlna_dms
with pytest.raises(Unresolvable, match="Invalid media source URI"):
await media_source.async_resolve_media(
hass, f"media-source://{DOMAIN}//media_id"
hass, f"media-source://{DOMAIN}//media_id", None
)
# Identifier has source_id but no media_id
with pytest.raises(Unresolvable, match="No media ID.*"):
await media_source.async_resolve_media(
hass, f"media-source://{DOMAIN}/source_id/"
hass, f"media-source://{DOMAIN}/source_id/", None
)
# Identifier is missing source_id/media_id separator
with pytest.raises(Unresolvable, match="No media ID.*"):
await media_source.async_resolve_media(
hass, f"media-source://{DOMAIN}/source_id"
hass, f"media-source://{DOMAIN}/source_id", None
)
# Identifier has an unknown source_id
with pytest.raises(Unresolvable, match="Unknown source ID: unknown_source"):
await media_source.async_resolve_media(
hass, f"media-source://{DOMAIN}/unknown_source/media_id"
hass, f"media-source://{DOMAIN}/unknown_source/media_id", None
)
@ -105,7 +105,7 @@ async def test_resolve_media_success(
dms_device_mock.async_browse_metadata.return_value = didl_item
result = await media_source.async_resolve_media(
hass, f"media-source://{DOMAIN}/{MOCK_SOURCE_ID}/:{object_id}"
hass, f"media-source://{DOMAIN}/{MOCK_SOURCE_ID}/:{object_id}", None
)
assert isinstance(result, DidlPlayMedia)
assert result.url == f"{MOCK_DEVICE_BASE_URL}/{res_url}"

View File

@ -25,7 +25,7 @@ async def get_media_source_url(hass, media_content_id):
if media_source.DOMAIN not in hass.config.components:
assert await async_setup_component(hass, media_source.DOMAIN, {})
resolved = await media_source.async_resolve_media(hass, media_content_id)
resolved = await media_source.async_resolve_media(hass, media_content_id, None)
return resolved.url

View File

@ -21,7 +21,7 @@ async def get_media_source_url(hass, media_content_id):
if media_source.DOMAIN not in hass.config.components:
assert await async_setup_component(hass, media_source.DOMAIN, {})
resolved = await media_source.async_resolve_media(hass, media_content_id)
resolved = await media_source.async_resolve_media(hass, media_content_id, None)
return resolved.url

View File

@ -103,6 +103,7 @@ async def test_async_resolve_media(hass):
media = await media_source.async_resolve_media(
hass,
media_source.generate_media_source_id(media_source.DOMAIN, "local/test.mp3"),
None,
)
assert isinstance(media, media_source.models.PlayMedia)
assert media.url == "/media/local/test.mp3"
@ -135,15 +136,17 @@ async def test_async_unresolve_media(hass):
# Test no media content
with pytest.raises(media_source.Unresolvable):
await media_source.async_resolve_media(hass, "")
await media_source.async_resolve_media(hass, "", None)
# Test invalid media content
with pytest.raises(media_source.Unresolvable):
await media_source.async_resolve_media(hass, "invalid")
await media_source.async_resolve_media(hass, "invalid", None)
# Test invalid media source
with pytest.raises(media_source.Unresolvable):
await media_source.async_resolve_media(hass, "media-source://media_source2")
await media_source.async_resolve_media(
hass, "media-source://media_source2", None
)
async def test_websocket_browse_media(hass, hass_ws_client):
@ -261,4 +264,4 @@ async def test_browse_resolve_without_setup():
await media_source.async_browse_media(Mock(data={}), None)
with pytest.raises(media_source.Unresolvable):
await media_source.async_resolve_media(Mock(data={}), None)
await media_source.async_resolve_media(Mock(data={}), None, None)

View File

@ -367,6 +367,7 @@ async def test_async_resolve_media_success(hass: HomeAssistant) -> None:
f"{const.URI_SCHEME}{DOMAIN}"
f"/{TEST_CONFIG_ENTRY_ID}#{device.id}#movies#/foo.mp4"
),
None,
)
assert media == PlayMedia(url="http://movie-url", mime_type="video/mp4")
assert client.get_movie_url.call_args == call(TEST_CAMERA_ID, "/foo.mp4")
@ -379,6 +380,7 @@ async def test_async_resolve_media_success(hass: HomeAssistant) -> None:
f"{const.URI_SCHEME}{DOMAIN}"
f"/{TEST_CONFIG_ENTRY_ID}#{device.id}#images#/foo.jpg"
),
None,
)
assert media == PlayMedia(url="http://image-url", mime_type="image/jpeg")
assert client.get_image_url.call_args == call(TEST_CAMERA_ID, "/foo.jpg")
@ -409,18 +411,20 @@ async def test_async_resolve_media_failure(hass: HomeAssistant) -> None:
# URI doesn't contain necessary components.
with pytest.raises(Unresolvable):
await media_source.async_resolve_media(hass, f"{const.URI_SCHEME}{DOMAIN}/foo")
await media_source.async_resolve_media(
hass, f"{const.URI_SCHEME}{DOMAIN}/foo", None
)
# Config entry doesn't exist.
with pytest.raises(MediaSourceError):
await media_source.async_resolve_media(
hass, f"{const.URI_SCHEME}{DOMAIN}/1#2#3#4"
hass, f"{const.URI_SCHEME}{DOMAIN}/1#2#3#4", None
)
# Device doesn't exist.
with pytest.raises(MediaSourceError):
await media_source.async_resolve_media(
hass, f"{const.URI_SCHEME}{DOMAIN}/{TEST_CONFIG_ENTRY_ID}#2#3#4"
hass, f"{const.URI_SCHEME}{DOMAIN}/{TEST_CONFIG_ENTRY_ID}#2#3#4", None
)
# Device identifiers are incorrect (no camera id)
@ -431,6 +435,7 @@ async def test_async_resolve_media_failure(hass: HomeAssistant) -> None:
f"{const.URI_SCHEME}{DOMAIN}"
f"/{TEST_CONFIG_ENTRY_ID}#{broken_device_1.id}#images#4"
),
None,
)
# Device identifiers are incorrect (non integer camera id)
@ -441,6 +446,7 @@ async def test_async_resolve_media_failure(hass: HomeAssistant) -> None:
f"{const.URI_SCHEME}{DOMAIN}"
f"/{TEST_CONFIG_ENTRY_ID}#{broken_device_2.id}#images#4"
),
None,
)
# Kind is incorrect.
@ -448,6 +454,7 @@ async def test_async_resolve_media_failure(hass: HomeAssistant) -> None:
await media_source.async_resolve_media(
hass,
f"{const.URI_SCHEME}{DOMAIN}/{TEST_CONFIG_ENTRY_ID}#{device.id}#games#moo",
None,
)
# Playback URL raises exception.
@ -459,6 +466,7 @@ async def test_async_resolve_media_failure(hass: HomeAssistant) -> None:
f"{const.URI_SCHEME}{DOMAIN}"
f"/{TEST_CONFIG_ENTRY_ID}#{device.id}#movies#/foo.mp4"
),
None,
)
# Media path does not start with '/'
@ -470,6 +478,7 @@ async def test_async_resolve_media_failure(hass: HomeAssistant) -> None:
f"{const.URI_SCHEME}{DOMAIN}"
f"/{TEST_CONFIG_ENTRY_ID}#{device.id}#movies#foo.mp4"
),
None,
)
# Media missing path.

View File

@ -361,7 +361,7 @@ async def test_camera_event(hass, auth, hass_client):
# Resolving the event links to the media
media = await media_source.async_resolve_media(
hass, f"{const.URI_SCHEME}{DOMAIN}/{device.id}/{event_identifier}"
hass, f"{const.URI_SCHEME}{DOMAIN}/{device.id}/{event_identifier}", None
)
assert media.url == f"/api/nest/event_media/{device.id}/{event_identifier}"
assert media.mime_type == "image/jpeg"
@ -374,7 +374,7 @@ async def test_camera_event(hass, auth, hass_client):
# Resolving the device id points to the most recent event
media = await media_source.async_resolve_media(
hass, f"{const.URI_SCHEME}{DOMAIN}/{device.id}"
hass, f"{const.URI_SCHEME}{DOMAIN}/{device.id}", None
)
assert media.url == f"/api/nest/event_media/{device.id}/{event_identifier}"
assert media.mime_type == "image/jpeg"
@ -535,7 +535,7 @@ async def test_multiple_image_events_in_session(hass, auth, hass_client):
# Resolve the most recent event
media = await media_source.async_resolve_media(
hass, f"{const.URI_SCHEME}{DOMAIN}/{device.id}/{event_identifier2}"
hass, f"{const.URI_SCHEME}{DOMAIN}/{device.id}/{event_identifier2}", None
)
assert media.url == f"/api/nest/event_media/{device.id}/{event_identifier2}"
assert media.mime_type == "image/jpeg"
@ -548,7 +548,7 @@ async def test_multiple_image_events_in_session(hass, auth, hass_client):
# Resolving the event links to the media
media = await media_source.async_resolve_media(
hass, f"{const.URI_SCHEME}{DOMAIN}/{device.id}/{event_identifier1}"
hass, f"{const.URI_SCHEME}{DOMAIN}/{device.id}/{event_identifier1}", None
)
assert media.url == f"/api/nest/event_media/{device.id}/{event_identifier1}"
assert media.mime_type == "image/jpeg"
@ -632,7 +632,7 @@ async def test_multiple_clip_preview_events_in_session(hass, auth, hass_client):
# to the same clip preview media clip object.
# Resolve media for the first event
media = await media_source.async_resolve_media(
hass, f"{const.URI_SCHEME}{DOMAIN}/{device.id}/{event_identifier1}"
hass, f"{const.URI_SCHEME}{DOMAIN}/{device.id}/{event_identifier1}", None
)
assert media.url == f"/api/nest/event_media/{device.id}/{event_identifier1}"
assert media.mime_type == "video/mp4"
@ -645,7 +645,7 @@ async def test_multiple_clip_preview_events_in_session(hass, auth, hass_client):
# Resolve media for the second event
media = await media_source.async_resolve_media(
hass, f"{const.URI_SCHEME}{DOMAIN}/{device.id}/{event_identifier1}"
hass, f"{const.URI_SCHEME}{DOMAIN}/{device.id}/{event_identifier1}", None
)
assert media.url == f"/api/nest/event_media/{device.id}/{event_identifier1}"
assert media.mime_type == "video/mp4"
@ -712,6 +712,7 @@ async def test_resolve_missing_event_id(hass, auth):
await media_source.async_resolve_media(
hass,
f"{const.URI_SCHEME}{DOMAIN}/{device.id}",
None,
)
@ -723,6 +724,7 @@ async def test_resolve_invalid_device_id(hass, auth):
await media_source.async_resolve_media(
hass,
f"{const.URI_SCHEME}{DOMAIN}/invalid-device-id/GXXWRWVeHNUlUU3V3MGV3bUOYW...",
None,
)
@ -740,6 +742,7 @@ async def test_resolve_invalid_event_id(hass, auth):
media = await media_source.async_resolve_media(
hass,
f"{const.URI_SCHEME}{DOMAIN}/{device.id}/GXXWRWVeHNUlUU3V3MGV3bUOYW...",
None,
)
assert (
media.url == f"/api/nest/event_media/{device.id}/GXXWRWVeHNUlUU3V3MGV3bUOYW..."
@ -835,7 +838,7 @@ async def test_camera_event_clip_preview(hass, auth, hass_client, mp4):
# Resolving the event links to the media
media = await media_source.async_resolve_media(
hass, f"{const.URI_SCHEME}{DOMAIN}/{device.id}/{event_identifier}"
hass, f"{const.URI_SCHEME}{DOMAIN}/{device.id}/{event_identifier}", None
)
assert media.url == f"/api/nest/event_media/{device.id}/{event_identifier}"
assert media.mime_type == "video/mp4"
@ -921,7 +924,7 @@ async def test_event_media_failure(hass, auth, hass_client):
# Resolving the event links to the media
media = await media_source.async_resolve_media(
hass, f"{const.URI_SCHEME}{DOMAIN}/{device.id}/{event_identifier}"
hass, f"{const.URI_SCHEME}{DOMAIN}/{device.id}/{event_identifier}", None
)
assert media.url == f"/api/nest/event_media/{device.id}/{event_identifier}"
assert media.mime_type == "image/jpeg"
@ -1128,7 +1131,7 @@ async def test_media_store_persistence(hass, auth, hass_client, event_store):
event_identifier = browse.children[0].identifier
media = await media_source.async_resolve_media(
hass, f"{const.URI_SCHEME}{DOMAIN}/{event_identifier}"
hass, f"{const.URI_SCHEME}{DOMAIN}/{event_identifier}", None
)
assert media.url == f"/api/nest/event_media/{event_identifier}"
assert media.mime_type == "video/mp4"
@ -1182,7 +1185,7 @@ async def test_media_store_persistence(hass, auth, hass_client, event_store):
event_identifier = browse.children[0].identifier
media = await media_source.async_resolve_media(
hass, f"{const.URI_SCHEME}{DOMAIN}/{event_identifier}"
hass, f"{const.URI_SCHEME}{DOMAIN}/{event_identifier}", None
)
assert media.url == f"/api/nest/event_media/{event_identifier}"
assert media.mime_type == "video/mp4"
@ -1234,7 +1237,7 @@ async def test_media_store_save_filesystem_error(hass, auth, hass_client):
event = browse.children[0]
media = await media_source.async_resolve_media(
hass, f"{const.URI_SCHEME}{DOMAIN}/{event.identifier}"
hass, f"{const.URI_SCHEME}{DOMAIN}/{event.identifier}", None
)
assert media.url == f"/api/nest/event_media/{event.identifier}"
assert media.mime_type == "video/mp4"

View File

@ -79,7 +79,7 @@ async def test_async_browse_media(hass):
# Test successful event resolve
media = await media_source.async_resolve_media(
hass, f"{const.URI_SCHEME}{DOMAIN}/events/12:34:56:78:90:ab/1599152672"
hass, f"{const.URI_SCHEME}{DOMAIN}/events/12:34:56:78:90:ab/1599152672", None
)
assert media == PlayMedia(
url="http:///files/high/index.m3u8", mime_type="application/x-mpegURL"

View File

@ -29,7 +29,7 @@ async def get_media_source_url(hass, media_content_id):
if media_source.DOMAIN not in hass.config.components:
assert await async_setup_component(hass, media_source.DOMAIN, {})
resolved = await media_source.async_resolve_media(hass, media_content_id)
resolved = await media_source.async_resolve_media(hass, media_content_id, None)
return resolved.url

View File

@ -68,7 +68,7 @@ async def test_browsing(hass):
async def test_resolving(hass, mock_get_tts_audio):
"""Test resolving."""
media = await media_source.async_resolve_media(
hass, "media-source://tts/demo?message=Hello%20World"
hass, "media-source://tts/demo?message=Hello%20World", None
)
assert media.url.startswith("/api/tts_proxy/")
assert media.mime_type == "audio/mpeg"
@ -82,7 +82,9 @@ async def test_resolving(hass, mock_get_tts_audio):
# Pass language and options
mock_get_tts_audio.reset_mock()
media = await media_source.async_resolve_media(
hass, "media-source://tts/demo?message=Bye%20World&language=de&voice=Paulus"
hass,
"media-source://tts/demo?message=Bye%20World&language=de&voice=Paulus",
None,
)
assert media.url.startswith("/api/tts_proxy/")
assert media.mime_type == "audio/mpeg"
@ -98,16 +100,18 @@ async def test_resolving_errors(hass):
"""Test resolving."""
# No message added
with pytest.raises(media_source.Unresolvable):
await media_source.async_resolve_media(hass, "media-source://tts/demo")
await media_source.async_resolve_media(hass, "media-source://tts/demo", None)
# Non-existing provider
with pytest.raises(media_source.Unresolvable):
await media_source.async_resolve_media(
hass, "media-source://tts/non-existing?message=bla"
hass, "media-source://tts/non-existing?message=bla", None
)
# Non-existing option
with pytest.raises(media_source.Unresolvable):
await media_source.async_resolve_media(
hass, "media-source://tts/non-existing?message=bla&non_existing_option=bla"
hass,
"media-source://tts/non-existing?message=bla&non_existing_option=bla",
None,
)

View File

@ -33,7 +33,7 @@ async def get_media_source_url(hass, media_content_id):
if media_source.DOMAIN not in hass.config.components:
assert await async_setup_component(hass, media_source.DOMAIN, {})
resolved = await media_source.async_resolve_media(hass, media_content_id)
resolved = await media_source.async_resolve_media(hass, media_content_id, None)
return resolved.url

View File

@ -27,7 +27,7 @@ async def get_media_source_url(hass, media_content_id):
if media_source.DOMAIN not in hass.config.components:
assert await async_setup_component(hass, media_source.DOMAIN, {})
resolved = await media_source.async_resolve_media(hass, media_content_id)
resolved = await media_source.async_resolve_media(hass, media_content_id, None)
return resolved.url