mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 05:07:41 +00:00
Add support to play url (#23273)
This commit is contained in:
parent
e3981b6498
commit
8daba68dc1
@ -6,10 +6,10 @@ from typing import Sequence
|
||||
|
||||
from homeassistant.components.media_player import MediaPlayerDevice
|
||||
from homeassistant.components.media_player.const import (
|
||||
DOMAIN, MEDIA_TYPE_MUSIC, SUPPORT_CLEAR_PLAYLIST, SUPPORT_NEXT_TRACK,
|
||||
SUPPORT_PAUSE, SUPPORT_PLAY, SUPPORT_PREVIOUS_TRACK, SUPPORT_SELECT_SOURCE,
|
||||
SUPPORT_SHUFFLE_SET, SUPPORT_STOP, SUPPORT_VOLUME_MUTE, SUPPORT_VOLUME_SET,
|
||||
SUPPORT_VOLUME_STEP)
|
||||
DOMAIN, MEDIA_TYPE_MUSIC, MEDIA_TYPE_URL, SUPPORT_CLEAR_PLAYLIST,
|
||||
SUPPORT_NEXT_TRACK, SUPPORT_PAUSE, SUPPORT_PLAY, SUPPORT_PLAY_MEDIA,
|
||||
SUPPORT_PREVIOUS_TRACK, SUPPORT_SELECT_SOURCE, SUPPORT_SHUFFLE_SET,
|
||||
SUPPORT_STOP, SUPPORT_VOLUME_MUTE, SUPPORT_VOLUME_SET, SUPPORT_VOLUME_STEP)
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import STATE_IDLE, STATE_PAUSED, STATE_PLAYING
|
||||
from homeassistant.helpers.typing import HomeAssistantType
|
||||
@ -20,7 +20,8 @@ from .const import (
|
||||
|
||||
BASE_SUPPORTED_FEATURES = SUPPORT_VOLUME_MUTE | SUPPORT_VOLUME_SET | \
|
||||
SUPPORT_VOLUME_STEP | SUPPORT_CLEAR_PLAYLIST | \
|
||||
SUPPORT_SHUFFLE_SET | SUPPORT_SELECT_SOURCE
|
||||
SUPPORT_SHUFFLE_SET | SUPPORT_SELECT_SOURCE | \
|
||||
SUPPORT_PLAY_MEDIA
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
@ -153,6 +154,15 @@ class HeosMediaPlayer(MediaPlayerDevice):
|
||||
"""Mute the volume."""
|
||||
await self._player.set_mute(mute)
|
||||
|
||||
@log_command_error("play media")
|
||||
async def async_play_media(self, media_type, media_id, **kwargs):
|
||||
"""Play a piece of media."""
|
||||
if media_type == MEDIA_TYPE_URL:
|
||||
await self._player.play_url(media_id)
|
||||
else:
|
||||
_LOGGER.error("Unable to play media: Unsupported media type '%s'",
|
||||
media_type)
|
||||
|
||||
@log_command_error("select source")
|
||||
async def async_select_source(self, source):
|
||||
"""Select input source."""
|
||||
|
@ -1,7 +1,7 @@
|
||||
"""Tests for the Heos Media Player platform."""
|
||||
import asyncio
|
||||
|
||||
from pyheos import const, CommandError
|
||||
from pyheos import CommandError, const
|
||||
|
||||
from homeassistant.components.heos import media_player
|
||||
from homeassistant.components.heos.const import (
|
||||
@ -12,8 +12,9 @@ from homeassistant.components.media_player.const import (
|
||||
ATTR_MEDIA_DURATION, ATTR_MEDIA_POSITION, ATTR_MEDIA_POSITION_UPDATED_AT,
|
||||
ATTR_MEDIA_SHUFFLE, ATTR_MEDIA_TITLE, ATTR_MEDIA_VOLUME_LEVEL,
|
||||
ATTR_MEDIA_VOLUME_MUTED, DOMAIN as MEDIA_PLAYER_DOMAIN, MEDIA_TYPE_MUSIC,
|
||||
SERVICE_CLEAR_PLAYLIST, SERVICE_SELECT_SOURCE, SUPPORT_NEXT_TRACK,
|
||||
SUPPORT_PAUSE, SUPPORT_PLAY, SUPPORT_PREVIOUS_TRACK, SUPPORT_STOP)
|
||||
MEDIA_TYPE_URL, SERVICE_CLEAR_PLAYLIST, SERVICE_PLAY_MEDIA,
|
||||
SERVICE_SELECT_SOURCE, SUPPORT_NEXT_TRACK, SUPPORT_PAUSE, SUPPORT_PLAY,
|
||||
SUPPORT_PREVIOUS_TRACK, SUPPORT_STOP)
|
||||
from homeassistant.const import (
|
||||
ATTR_ENTITY_ID, ATTR_FRIENDLY_NAME, ATTR_SUPPORTED_FEATURES,
|
||||
SERVICE_MEDIA_NEXT_TRACK, SERVICE_MEDIA_PAUSE, SERVICE_MEDIA_PLAY,
|
||||
@ -415,3 +416,34 @@ async def test_unload_config_entry(hass, config_entry, config, controller):
|
||||
await setup_platform(hass, config_entry, config)
|
||||
await config_entry.async_unload(hass)
|
||||
assert not hass.states.get('media_player.test_player')
|
||||
|
||||
|
||||
async def test_play_media_url(hass, config_entry, config, controller, caplog):
|
||||
"""Test the play media service with type url."""
|
||||
await setup_platform(hass, config_entry, config)
|
||||
player = controller.players[1]
|
||||
url = "http://news/podcast.mp3"
|
||||
# First pass completes successfully, second pass raises command error
|
||||
for _ in range(2):
|
||||
await hass.services.async_call(
|
||||
MEDIA_PLAYER_DOMAIN, SERVICE_PLAY_MEDIA,
|
||||
{ATTR_ENTITY_ID: 'media_player.test_player',
|
||||
ATTR_MEDIA_CONTENT_TYPE: MEDIA_TYPE_URL,
|
||||
ATTR_MEDIA_CONTENT_ID: url}, blocking=True)
|
||||
player.play_url.assert_called_once_with(url)
|
||||
player.play_url.reset_mock()
|
||||
player.play_url.side_effect = CommandError(None, "Failure", 1)
|
||||
assert "Unable to play media: Failure (1)" in caplog.text
|
||||
|
||||
|
||||
async def test_play_media_invalid_type(
|
||||
hass, config_entry, config, controller, caplog):
|
||||
"""Test the play media service with an invalid type."""
|
||||
await setup_platform(hass, config_entry, config)
|
||||
await hass.services.async_call(
|
||||
MEDIA_PLAYER_DOMAIN, SERVICE_PLAY_MEDIA,
|
||||
{ATTR_ENTITY_ID: 'media_player.test_player',
|
||||
ATTR_MEDIA_CONTENT_TYPE: "Other",
|
||||
ATTR_MEDIA_CONTENT_ID: ""}, blocking=True)
|
||||
assert "Unable to play media: Unsupported media type 'Other'" \
|
||||
in caplog.text
|
||||
|
Loading…
x
Reference in New Issue
Block a user