Add source selection to Samsung TV media player (#22612)
* add source selection * return generic list * remove useless timeout * Fix test * Add test for select_source * Add negative source test * Change order * Arghhh * Add hass object * Simplify source list Co-Authored-By: escoand <escoand@users.noreply.github.com>pull/24586/head
parent
1460f7bd80
commit
73008885c8
|
@ -10,8 +10,9 @@ from homeassistant.components.media_player import (
|
|||
MediaPlayerDevice, PLATFORM_SCHEMA)
|
||||
from homeassistant.components.media_player.const import (
|
||||
MEDIA_TYPE_CHANNEL, SUPPORT_NEXT_TRACK, SUPPORT_PAUSE,
|
||||
SUPPORT_PLAY, SUPPORT_PLAY_MEDIA, SUPPORT_PREVIOUS_TRACK, SUPPORT_TURN_OFF,
|
||||
SUPPORT_TURN_ON, SUPPORT_VOLUME_MUTE, SUPPORT_VOLUME_STEP)
|
||||
SUPPORT_PLAY, SUPPORT_PLAY_MEDIA, SUPPORT_PREVIOUS_TRACK,
|
||||
SUPPORT_SELECT_SOURCE, SUPPORT_TURN_OFF, SUPPORT_TURN_ON,
|
||||
SUPPORT_VOLUME_MUTE, SUPPORT_VOLUME_STEP)
|
||||
from homeassistant.const import (
|
||||
CONF_HOST, CONF_MAC, CONF_NAME, CONF_PORT, CONF_TIMEOUT, STATE_OFF,
|
||||
STATE_ON)
|
||||
|
@ -26,9 +27,13 @@ DEFAULT_TIMEOUT = 1
|
|||
|
||||
KEY_PRESS_TIMEOUT = 1.2
|
||||
KNOWN_DEVICES_KEY = 'samsungtv_known_devices'
|
||||
SOURCES = {
|
||||
'TV': 'KEY_DTV',
|
||||
'HDMI': 'KEY_HDMI'
|
||||
}
|
||||
|
||||
SUPPORT_SAMSUNGTV = SUPPORT_PAUSE | SUPPORT_VOLUME_STEP | \
|
||||
SUPPORT_VOLUME_MUTE | SUPPORT_PREVIOUS_TRACK | \
|
||||
SUPPORT_VOLUME_MUTE | SUPPORT_PREVIOUS_TRACK | SUPPORT_SELECT_SOURCE | \
|
||||
SUPPORT_NEXT_TRACK | SUPPORT_TURN_OFF | SUPPORT_PLAY | SUPPORT_PLAY_MEDIA
|
||||
|
||||
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
||||
|
@ -187,6 +192,11 @@ class SamsungTVDevice(MediaPlayerDevice):
|
|||
"""Boolean if volume is currently muted."""
|
||||
return self._muted
|
||||
|
||||
@property
|
||||
def source_list(self):
|
||||
"""List of available input sources."""
|
||||
return list(SOURCES)
|
||||
|
||||
@property
|
||||
def supported_features(self):
|
||||
"""Flag media player features that are supported."""
|
||||
|
@ -262,6 +272,7 @@ class SamsungTVDevice(MediaPlayerDevice):
|
|||
for digit in media_id:
|
||||
await self.hass.async_add_job(self.send_key, 'KEY_' + digit)
|
||||
await asyncio.sleep(KEY_PRESS_TIMEOUT, self.hass.loop)
|
||||
await self.hass.async_add_job(self.send_key, 'KEY_ENTER')
|
||||
|
||||
def turn_on(self):
|
||||
"""Turn the media player on."""
|
||||
|
@ -269,3 +280,11 @@ class SamsungTVDevice(MediaPlayerDevice):
|
|||
self._wol.send_magic_packet(self._mac)
|
||||
else:
|
||||
self.send_key('KEY_POWERON')
|
||||
|
||||
async def async_select_source(self, source):
|
||||
"""Select input source."""
|
||||
if source not in SOURCES:
|
||||
_LOGGER.error('Unsupported source')
|
||||
return
|
||||
|
||||
await self.hass.async_add_job(self.send_key, SOURCES[source])
|
||||
|
|
|
@ -318,7 +318,7 @@ async def test_play_media(hass, samsung_mock):
|
|||
device.send_key = mock.Mock()
|
||||
await device.async_play_media(MEDIA_TYPE_CHANNEL, "576")
|
||||
|
||||
exp = [call("KEY_5"), call("KEY_7"), call("KEY_6")]
|
||||
exp = [call("KEY_5"), call("KEY_7"), call("KEY_6"), call("KEY_ENTER")]
|
||||
assert device.send_key.call_args_list == exp
|
||||
assert len(sleeps) == 3
|
||||
|
||||
|
@ -347,3 +347,21 @@ async def test_play_media_channel_as_non_positive(hass, samsung_mock):
|
|||
device.send_key = mock.Mock()
|
||||
await device.async_play_media(MEDIA_TYPE_CHANNEL, "-4")
|
||||
assert device.send_key.call_count == 0
|
||||
|
||||
|
||||
async def test_select_source(hass, samsung_mock):
|
||||
"""Test for select_source."""
|
||||
device = SamsungTVDevice(**WORKING_CONFIG)
|
||||
device.hass = hass
|
||||
device.send_key = mock.Mock()
|
||||
await device.async_select_source("HDMI")
|
||||
exp = [call("KEY_HDMI")]
|
||||
assert device.send_key.call_args_list == exp
|
||||
|
||||
|
||||
async def test_select_source_invalid_source(hass, samsung_mock):
|
||||
"""Test for select_source with invalid source."""
|
||||
device = SamsungTVDevice(**WORKING_CONFIG)
|
||||
device.send_key = mock.Mock()
|
||||
await device.async_select_source("INVALID")
|
||||
assert device.send_key.call_count == 0
|
||||
|
|
Loading…
Reference in New Issue