mirror of
https://github.com/home-assistant/core.git
synced 2025-07-21 20:27:08 +00:00
Use new media player enums [e-h] (#78049)
This commit is contained in:
parent
9fc9d50e07
commit
56c4e0391d
@ -7,8 +7,9 @@ import voluptuous as vol
|
|||||||
from homeassistant.components.media_player import (
|
from homeassistant.components.media_player import (
|
||||||
MediaPlayerEntity,
|
MediaPlayerEntity,
|
||||||
MediaPlayerEntityFeature,
|
MediaPlayerEntityFeature,
|
||||||
|
MediaPlayerState,
|
||||||
|
MediaType,
|
||||||
)
|
)
|
||||||
from homeassistant.components.media_player.const import MEDIA_TYPE_TVSHOW
|
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
CONF_HOST,
|
CONF_HOST,
|
||||||
CONF_NAME,
|
CONF_NAME,
|
||||||
@ -16,9 +17,6 @@ from homeassistant.const import (
|
|||||||
CONF_PORT,
|
CONF_PORT,
|
||||||
CONF_SSL,
|
CONF_SSL,
|
||||||
CONF_USERNAME,
|
CONF_USERNAME,
|
||||||
STATE_OFF,
|
|
||||||
STATE_ON,
|
|
||||||
STATE_PLAYING,
|
|
||||||
)
|
)
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
@ -104,6 +102,7 @@ def setup_platform(
|
|||||||
class Enigma2Device(MediaPlayerEntity):
|
class Enigma2Device(MediaPlayerEntity):
|
||||||
"""Representation of an Enigma2 box."""
|
"""Representation of an Enigma2 box."""
|
||||||
|
|
||||||
|
_attr_media_content_type = MediaType.TVSHOW
|
||||||
_attr_supported_features = (
|
_attr_supported_features = (
|
||||||
MediaPlayerEntityFeature.VOLUME_SET
|
MediaPlayerEntityFeature.VOLUME_SET
|
||||||
| MediaPlayerEntityFeature.VOLUME_MUTE
|
| MediaPlayerEntityFeature.VOLUME_MUTE
|
||||||
@ -133,11 +132,11 @@ class Enigma2Device(MediaPlayerEntity):
|
|||||||
return self.e2_box.mac_address
|
return self.e2_box.mac_address
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def state(self):
|
def state(self) -> MediaPlayerState:
|
||||||
"""Return the state of the device."""
|
"""Return the state of the device."""
|
||||||
if self.e2_box.is_recording_playback:
|
if self.e2_box.is_recording_playback:
|
||||||
return STATE_PLAYING
|
return MediaPlayerState.PLAYING
|
||||||
return STATE_OFF if self.e2_box.in_standby else STATE_ON
|
return MediaPlayerState.OFF if self.e2_box.in_standby else MediaPlayerState.ON
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def available(self) -> bool:
|
def available(self) -> bool:
|
||||||
@ -172,11 +171,6 @@ class Enigma2Device(MediaPlayerEntity):
|
|||||||
"""Service Ref of current playing media."""
|
"""Service Ref of current playing media."""
|
||||||
return self.e2_box.current_service_ref
|
return self.e2_box.current_service_ref
|
||||||
|
|
||||||
@property
|
|
||||||
def media_content_type(self):
|
|
||||||
"""Type of video currently playing."""
|
|
||||||
return MEDIA_TYPE_TVSHOW
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_volume_muted(self):
|
def is_volume_muted(self):
|
||||||
"""Boolean if volume is currently muted."""
|
"""Boolean if volume is currently muted."""
|
||||||
|
@ -31,9 +31,9 @@ import voluptuous as vol
|
|||||||
from homeassistant.components.media_player import (
|
from homeassistant.components.media_player import (
|
||||||
MediaPlayerEntity,
|
MediaPlayerEntity,
|
||||||
MediaPlayerEntityFeature,
|
MediaPlayerEntityFeature,
|
||||||
|
MediaPlayerState,
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.const import STATE_OFF, STATE_ON
|
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers import entity_platform
|
from homeassistant.helpers import entity_platform
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
@ -134,7 +134,7 @@ class EpsonProjectorMediaPlayer(MediaPlayerEntity):
|
|||||||
_LOGGER.debug("Projector status: %s", power_state)
|
_LOGGER.debug("Projector status: %s", power_state)
|
||||||
self._attr_available = True
|
self._attr_available = True
|
||||||
if power_state == EPSON_CODES[POWER]:
|
if power_state == EPSON_CODES[POWER]:
|
||||||
self._attr_state = STATE_ON
|
self._attr_state = MediaPlayerState.ON
|
||||||
if await self.set_unique_id():
|
if await self.set_unique_id():
|
||||||
return
|
return
|
||||||
self._attr_source_list = list(DEFAULT_SOURCES.values())
|
self._attr_source_list = list(DEFAULT_SOURCES.values())
|
||||||
@ -148,21 +148,21 @@ class EpsonProjectorMediaPlayer(MediaPlayerEntity):
|
|||||||
except ValueError:
|
except ValueError:
|
||||||
self._attr_volume_level = None
|
self._attr_volume_level = None
|
||||||
elif power_state == BUSY:
|
elif power_state == BUSY:
|
||||||
self._attr_state = STATE_ON
|
self._attr_state = MediaPlayerState.ON
|
||||||
else:
|
else:
|
||||||
self._attr_state = STATE_OFF
|
self._attr_state = MediaPlayerState.OFF
|
||||||
|
|
||||||
async def async_turn_on(self) -> None:
|
async def async_turn_on(self) -> None:
|
||||||
"""Turn on epson."""
|
"""Turn on epson."""
|
||||||
if self.state == STATE_OFF:
|
if self.state == MediaPlayerState.OFF:
|
||||||
await self._projector.send_command(TURN_ON)
|
await self._projector.send_command(TURN_ON)
|
||||||
self._attr_state = STATE_ON
|
self._attr_state = MediaPlayerState.ON
|
||||||
|
|
||||||
async def async_turn_off(self) -> None:
|
async def async_turn_off(self) -> None:
|
||||||
"""Turn off epson."""
|
"""Turn off epson."""
|
||||||
if self.state == STATE_ON:
|
if self.state == MediaPlayerState.ON:
|
||||||
await self._projector.send_command(TURN_OFF)
|
await self._projector.send_command(TURN_OFF)
|
||||||
self._attr_state = STATE_OFF
|
self._attr_state = MediaPlayerState.OFF
|
||||||
|
|
||||||
async def select_cmode(self, cmode: str) -> None:
|
async def select_cmode(self, cmode: str) -> None:
|
||||||
"""Set color mode in Epson."""
|
"""Set color mode in Epson."""
|
||||||
|
@ -4,13 +4,13 @@ from __future__ import annotations
|
|||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from homeassistant.components import media_source
|
from homeassistant.components import media_source
|
||||||
from homeassistant.components.media_player import MediaPlayerEntity
|
from homeassistant.components.media_player import (
|
||||||
from homeassistant.components.media_player.browse_media import (
|
|
||||||
BrowseMedia,
|
BrowseMedia,
|
||||||
|
MediaPlayerEntity,
|
||||||
|
MediaPlayerState,
|
||||||
async_process_play_media_url,
|
async_process_play_media_url,
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.const import STATE_IDLE, STATE_PLAYING
|
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
|
|
||||||
@ -34,12 +34,12 @@ class FullyMediaPlayer(FullyKioskEntity, MediaPlayerEntity):
|
|||||||
|
|
||||||
_attr_supported_features = MEDIA_SUPPORT_FULLYKIOSK
|
_attr_supported_features = MEDIA_SUPPORT_FULLYKIOSK
|
||||||
_attr_assumed_state = True
|
_attr_assumed_state = True
|
||||||
_attr_state = STATE_IDLE
|
|
||||||
|
|
||||||
def __init__(self, coordinator: FullyKioskDataUpdateCoordinator) -> None:
|
def __init__(self, coordinator: FullyKioskDataUpdateCoordinator) -> None:
|
||||||
"""Initialize the media player entity."""
|
"""Initialize the media player entity."""
|
||||||
super().__init__(coordinator)
|
super().__init__(coordinator)
|
||||||
self._attr_unique_id = f"{coordinator.data['deviceID']}-mediaplayer"
|
self._attr_unique_id = f"{coordinator.data['deviceID']}-mediaplayer"
|
||||||
|
self._attr_state = MediaPlayerState.IDLE
|
||||||
|
|
||||||
async def async_play_media(
|
async def async_play_media(
|
||||||
self, media_type: str, media_id: str, **kwargs: Any
|
self, media_type: str, media_id: str, **kwargs: Any
|
||||||
@ -52,13 +52,13 @@ class FullyMediaPlayer(FullyKioskEntity, MediaPlayerEntity):
|
|||||||
media_id = async_process_play_media_url(self.hass, play_item.url)
|
media_id = async_process_play_media_url(self.hass, play_item.url)
|
||||||
|
|
||||||
await self.coordinator.fully.playSound(media_id, AUDIOMANAGER_STREAM_MUSIC)
|
await self.coordinator.fully.playSound(media_id, AUDIOMANAGER_STREAM_MUSIC)
|
||||||
self._attr_state = STATE_PLAYING
|
self._attr_state = MediaPlayerState.PLAYING
|
||||||
self.async_write_ha_state()
|
self.async_write_ha_state()
|
||||||
|
|
||||||
async def async_media_stop(self) -> None:
|
async def async_media_stop(self) -> None:
|
||||||
"""Stop playing media."""
|
"""Stop playing media."""
|
||||||
await self.coordinator.fully.stopSound()
|
await self.coordinator.fully.stopSound()
|
||||||
self._attr_state = STATE_IDLE
|
self._attr_state = MediaPlayerState.IDLE
|
||||||
self.async_write_ha_state()
|
self.async_write_ha_state()
|
||||||
|
|
||||||
async def async_set_volume_level(self, volume: float) -> None:
|
async def async_set_volume_level(self, volume: float) -> None:
|
||||||
|
@ -13,12 +13,11 @@ from homeassistant.components.media_player import (
|
|||||||
BrowseMedia,
|
BrowseMedia,
|
||||||
MediaPlayerEntity,
|
MediaPlayerEntity,
|
||||||
MediaPlayerEntityFeature,
|
MediaPlayerEntityFeature,
|
||||||
)
|
MediaPlayerState,
|
||||||
from homeassistant.components.media_player.browse_media import (
|
MediaType,
|
||||||
async_process_play_media_url,
|
async_process_play_media_url,
|
||||||
)
|
)
|
||||||
from homeassistant.components.media_player.const import MEDIA_TYPE_MUSIC
|
from homeassistant.const import CONF_NAME, EVENT_HOMEASSISTANT_STOP
|
||||||
from homeassistant.const import CONF_NAME, EVENT_HOMEASSISTANT_STOP, STATE_IDLE
|
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
@ -58,6 +57,7 @@ def setup_platform(
|
|||||||
class GstreamerDevice(MediaPlayerEntity):
|
class GstreamerDevice(MediaPlayerEntity):
|
||||||
"""Representation of a Gstreamer device."""
|
"""Representation of a Gstreamer device."""
|
||||||
|
|
||||||
|
_attr_media_content_type = MediaType.MUSIC
|
||||||
_attr_supported_features = (
|
_attr_supported_features = (
|
||||||
MediaPlayerEntityFeature.VOLUME_SET
|
MediaPlayerEntityFeature.VOLUME_SET
|
||||||
| MediaPlayerEntityFeature.PLAY
|
| MediaPlayerEntityFeature.PLAY
|
||||||
@ -71,7 +71,7 @@ class GstreamerDevice(MediaPlayerEntity):
|
|||||||
"""Initialize the Gstreamer device."""
|
"""Initialize the Gstreamer device."""
|
||||||
self._player = player
|
self._player = player
|
||||||
self._name = name or DOMAIN
|
self._name = name or DOMAIN
|
||||||
self._state = STATE_IDLE
|
self._state = MediaPlayerState.IDLE
|
||||||
self._volume = None
|
self._volume = None
|
||||||
self._duration = None
|
self._duration = None
|
||||||
self._uri = None
|
self._uri = None
|
||||||
@ -104,7 +104,7 @@ class GstreamerDevice(MediaPlayerEntity):
|
|||||||
)
|
)
|
||||||
media_id = sourced_media.url
|
media_id = sourced_media.url
|
||||||
|
|
||||||
elif media_type != MEDIA_TYPE_MUSIC:
|
elif media_type != MediaType.MUSIC:
|
||||||
_LOGGER.error("Invalid media type")
|
_LOGGER.error("Invalid media type")
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -129,11 +129,6 @@ class GstreamerDevice(MediaPlayerEntity):
|
|||||||
"""Content ID of currently playing media."""
|
"""Content ID of currently playing media."""
|
||||||
return self._uri
|
return self._uri
|
||||||
|
|
||||||
@property
|
|
||||||
def content_type(self):
|
|
||||||
"""Content type of currently playing media."""
|
|
||||||
return MEDIA_TYPE_MUSIC
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def name(self):
|
def name(self):
|
||||||
"""Return the name of the device."""
|
"""Return the name of the device."""
|
||||||
|
@ -8,8 +8,9 @@ from homeassistant.components.media_player import (
|
|||||||
PLATFORM_SCHEMA,
|
PLATFORM_SCHEMA,
|
||||||
MediaPlayerEntity,
|
MediaPlayerEntity,
|
||||||
MediaPlayerEntityFeature,
|
MediaPlayerEntityFeature,
|
||||||
|
MediaPlayerState,
|
||||||
)
|
)
|
||||||
from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PORT, STATE_OFF, STATE_ON
|
from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PORT
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
@ -72,9 +73,9 @@ class HkAvrDevice(MediaPlayerEntity):
|
|||||||
def update(self) -> None:
|
def update(self) -> None:
|
||||||
"""Update the state of this media_player."""
|
"""Update the state of this media_player."""
|
||||||
if self._avr.is_on():
|
if self._avr.is_on():
|
||||||
self._state = STATE_ON
|
self._state = MediaPlayerState.ON
|
||||||
elif self._avr.is_off():
|
elif self._avr.is_off():
|
||||||
self._state = STATE_OFF
|
self._state = MediaPlayerState.OFF
|
||||||
else:
|
else:
|
||||||
self._state = None
|
self._state = None
|
||||||
|
|
||||||
|
@ -26,16 +26,10 @@ from pycec.const import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
from homeassistant.components.media_player import (
|
from homeassistant.components.media_player import (
|
||||||
|
DOMAIN as MP_DOMAIN,
|
||||||
MediaPlayerEntity,
|
MediaPlayerEntity,
|
||||||
MediaPlayerEntityFeature,
|
MediaPlayerEntityFeature,
|
||||||
)
|
MediaPlayerState,
|
||||||
from homeassistant.components.media_player.const import DOMAIN as MP_DOMAIN
|
|
||||||
from homeassistant.const import (
|
|
||||||
STATE_IDLE,
|
|
||||||
STATE_OFF,
|
|
||||||
STATE_ON,
|
|
||||||
STATE_PAUSED,
|
|
||||||
STATE_PLAYING,
|
|
||||||
)
|
)
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
@ -95,7 +89,7 @@ class CecPlayerEntity(CecEntity, MediaPlayerEntity):
|
|||||||
def turn_on(self) -> None:
|
def turn_on(self) -> None:
|
||||||
"""Turn device on."""
|
"""Turn device on."""
|
||||||
self._device.turn_on()
|
self._device.turn_on()
|
||||||
self._state = STATE_ON
|
self._state = MediaPlayerState.ON
|
||||||
|
|
||||||
def clear_playlist(self) -> None:
|
def clear_playlist(self) -> None:
|
||||||
"""Clear players playlist."""
|
"""Clear players playlist."""
|
||||||
@ -104,12 +98,12 @@ class CecPlayerEntity(CecEntity, MediaPlayerEntity):
|
|||||||
def turn_off(self) -> None:
|
def turn_off(self) -> None:
|
||||||
"""Turn device off."""
|
"""Turn device off."""
|
||||||
self._device.turn_off()
|
self._device.turn_off()
|
||||||
self._state = STATE_OFF
|
self._state = MediaPlayerState.OFF
|
||||||
|
|
||||||
def media_stop(self) -> None:
|
def media_stop(self) -> None:
|
||||||
"""Stop playback."""
|
"""Stop playback."""
|
||||||
self.send_keypress(KEY_STOP)
|
self.send_keypress(KEY_STOP)
|
||||||
self._state = STATE_IDLE
|
self._state = MediaPlayerState.IDLE
|
||||||
|
|
||||||
def play_media(self, media_type: str, media_id: str, **kwargs: Any) -> None:
|
def play_media(self, media_type: str, media_id: str, **kwargs: Any) -> None:
|
||||||
"""Not supported."""
|
"""Not supported."""
|
||||||
@ -130,7 +124,7 @@ class CecPlayerEntity(CecEntity, MediaPlayerEntity):
|
|||||||
def media_pause(self) -> None:
|
def media_pause(self) -> None:
|
||||||
"""Pause playback."""
|
"""Pause playback."""
|
||||||
self.send_keypress(KEY_PAUSE)
|
self.send_keypress(KEY_PAUSE)
|
||||||
self._state = STATE_PAUSED
|
self._state = MediaPlayerState.PAUSED
|
||||||
|
|
||||||
def select_source(self, source: str) -> None:
|
def select_source(self, source: str) -> None:
|
||||||
"""Not supported."""
|
"""Not supported."""
|
||||||
@ -139,7 +133,7 @@ class CecPlayerEntity(CecEntity, MediaPlayerEntity):
|
|||||||
def media_play(self) -> None:
|
def media_play(self) -> None:
|
||||||
"""Start playback."""
|
"""Start playback."""
|
||||||
self.send_keypress(KEY_PLAY)
|
self.send_keypress(KEY_PLAY)
|
||||||
self._state = STATE_PLAYING
|
self._state = MediaPlayerState.PLAYING
|
||||||
|
|
||||||
def volume_up(self) -> None:
|
def volume_up(self) -> None:
|
||||||
"""Increase volume."""
|
"""Increase volume."""
|
||||||
@ -160,16 +154,16 @@ class CecPlayerEntity(CecEntity, MediaPlayerEntity):
|
|||||||
"""Update device status."""
|
"""Update device status."""
|
||||||
device = self._device
|
device = self._device
|
||||||
if device.power_status in [POWER_OFF, 3]:
|
if device.power_status in [POWER_OFF, 3]:
|
||||||
self._state = STATE_OFF
|
self._state = MediaPlayerState.OFF
|
||||||
elif not self.support_pause:
|
elif not self.support_pause:
|
||||||
if device.power_status in [POWER_ON, 4]:
|
if device.power_status in [POWER_ON, 4]:
|
||||||
self._state = STATE_ON
|
self._state = MediaPlayerState.ON
|
||||||
elif device.status == STATUS_PLAY:
|
elif device.status == STATUS_PLAY:
|
||||||
self._state = STATE_PLAYING
|
self._state = MediaPlayerState.PLAYING
|
||||||
elif device.status == STATUS_STOP:
|
elif device.status == STATUS_STOP:
|
||||||
self._state = STATE_IDLE
|
self._state = MediaPlayerState.IDLE
|
||||||
elif device.status == STATUS_STILL:
|
elif device.status == STATUS_STILL:
|
||||||
self._state = STATE_PAUSED
|
self._state = MediaPlayerState.PAUSED
|
||||||
else:
|
else:
|
||||||
_LOGGER.warning("Unknown state: %s", device.status)
|
_LOGGER.warning("Unknown state: %s", device.status)
|
||||||
|
|
||||||
|
@ -12,23 +12,17 @@ from typing_extensions import ParamSpec
|
|||||||
|
|
||||||
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_ENQUEUE,
|
||||||
|
DOMAIN,
|
||||||
|
BrowseMedia,
|
||||||
MediaPlayerEnqueue,
|
MediaPlayerEnqueue,
|
||||||
MediaPlayerEntity,
|
MediaPlayerEntity,
|
||||||
MediaPlayerEntityFeature,
|
MediaPlayerEntityFeature,
|
||||||
)
|
MediaPlayerState,
|
||||||
from homeassistant.components.media_player.browse_media import (
|
MediaType,
|
||||||
BrowseMedia,
|
|
||||||
async_process_play_media_url,
|
async_process_play_media_url,
|
||||||
)
|
)
|
||||||
from homeassistant.components.media_player.const import (
|
|
||||||
ATTR_MEDIA_ENQUEUE,
|
|
||||||
DOMAIN,
|
|
||||||
MEDIA_TYPE_MUSIC,
|
|
||||||
MEDIA_TYPE_PLAYLIST,
|
|
||||||
MEDIA_TYPE_URL,
|
|
||||||
)
|
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.const import STATE_IDLE, STATE_PAUSED, STATE_PLAYING
|
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers.dispatcher import (
|
from homeassistant.helpers.dispatcher import (
|
||||||
async_dispatcher_connect,
|
async_dispatcher_connect,
|
||||||
@ -62,9 +56,9 @@ BASE_SUPPORTED_FEATURES = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
PLAY_STATE_TO_STATE = {
|
PLAY_STATE_TO_STATE = {
|
||||||
heos_const.PLAY_STATE_PLAY: STATE_PLAYING,
|
heos_const.PLAY_STATE_PLAY: MediaPlayerState.PLAYING,
|
||||||
heos_const.PLAY_STATE_STOP: STATE_IDLE,
|
heos_const.PLAY_STATE_STOP: MediaPlayerState.IDLE,
|
||||||
heos_const.PLAY_STATE_PAUSE: STATE_PAUSED,
|
heos_const.PLAY_STATE_PAUSE: MediaPlayerState.PAUSED,
|
||||||
}
|
}
|
||||||
|
|
||||||
CONTROL_TO_SUPPORT = {
|
CONTROL_TO_SUPPORT = {
|
||||||
@ -118,6 +112,7 @@ def log_command_error(
|
|||||||
class HeosMediaPlayer(MediaPlayerEntity):
|
class HeosMediaPlayer(MediaPlayerEntity):
|
||||||
"""The HEOS player."""
|
"""The HEOS player."""
|
||||||
|
|
||||||
|
_attr_media_content_type = MediaType.MUSIC
|
||||||
_attr_should_poll = False
|
_attr_should_poll = False
|
||||||
|
|
||||||
def __init__(self, player):
|
def __init__(self, player):
|
||||||
@ -205,13 +200,13 @@ class HeosMediaPlayer(MediaPlayerEntity):
|
|||||||
) -> None:
|
) -> None:
|
||||||
"""Play a piece of media."""
|
"""Play a piece of media."""
|
||||||
if media_source.is_media_source_id(media_id):
|
if media_source.is_media_source_id(media_id):
|
||||||
media_type = MEDIA_TYPE_URL
|
media_type = MediaType.URL
|
||||||
play_item = await media_source.async_resolve_media(
|
play_item = await media_source.async_resolve_media(
|
||||||
self.hass, media_id, self.entity_id
|
self.hass, media_id, self.entity_id
|
||||||
)
|
)
|
||||||
media_id = play_item.url
|
media_id = play_item.url
|
||||||
|
|
||||||
if media_type in (MEDIA_TYPE_URL, MEDIA_TYPE_MUSIC):
|
if media_type in {MediaType.URL, MediaType.MUSIC}:
|
||||||
media_id = async_process_play_media_url(self.hass, media_id)
|
media_id = async_process_play_media_url(self.hass, media_id)
|
||||||
|
|
||||||
await self._player.play_url(media_id)
|
await self._player.play_url(media_id)
|
||||||
@ -233,7 +228,7 @@ class HeosMediaPlayer(MediaPlayerEntity):
|
|||||||
await self._player.play_quick_select(index)
|
await self._player.play_quick_select(index)
|
||||||
return
|
return
|
||||||
|
|
||||||
if media_type == MEDIA_TYPE_PLAYLIST:
|
if media_type == MediaType.PLAYLIST:
|
||||||
playlists = await self._player.heos.get_playlists()
|
playlists = await self._player.heos.get_playlists()
|
||||||
playlist = next((p for p in playlists if p.name == media_id), None)
|
playlist = next((p for p in playlists if p.name == media_id), None)
|
||||||
if not playlist:
|
if not playlist:
|
||||||
@ -356,11 +351,6 @@ class HeosMediaPlayer(MediaPlayerEntity):
|
|||||||
"""Content ID of current playing media."""
|
"""Content ID of current playing media."""
|
||||||
return self._player.now_playing_media.media_id
|
return self._player.now_playing_media.media_id
|
||||||
|
|
||||||
@property
|
|
||||||
def media_content_type(self) -> str:
|
|
||||||
"""Content type of current playing media."""
|
|
||||||
return MEDIA_TYPE_MUSIC
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def media_duration(self):
|
def media_duration(self):
|
||||||
"""Duration of current playing media in seconds."""
|
"""Duration of current playing media in seconds."""
|
||||||
|
@ -14,16 +14,10 @@ from homeassistant.components.media_player import (
|
|||||||
PLATFORM_SCHEMA,
|
PLATFORM_SCHEMA,
|
||||||
MediaPlayerEntity,
|
MediaPlayerEntity,
|
||||||
MediaPlayerEntityFeature,
|
MediaPlayerEntityFeature,
|
||||||
|
MediaPlayerState,
|
||||||
|
MediaType,
|
||||||
)
|
)
|
||||||
from homeassistant.components.media_player.const import MEDIA_TYPE_CHANNEL
|
from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PORT
|
||||||
from homeassistant.const import (
|
|
||||||
CONF_HOST,
|
|
||||||
CONF_NAME,
|
|
||||||
CONF_PORT,
|
|
||||||
STATE_OFF,
|
|
||||||
STATE_PAUSED,
|
|
||||||
STATE_PLAYING,
|
|
||||||
)
|
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.exceptions import PlatformNotReady
|
from homeassistant.exceptions import PlatformNotReady
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
@ -110,63 +104,63 @@ class HorizonDevice(MediaPlayerEntity):
|
|||||||
"""Update State using the media server running on the Horizon."""
|
"""Update State using the media server running on the Horizon."""
|
||||||
try:
|
try:
|
||||||
if self._client.is_powered_on():
|
if self._client.is_powered_on():
|
||||||
self._state = STATE_PLAYING
|
self._state = MediaPlayerState.PLAYING
|
||||||
else:
|
else:
|
||||||
self._state = STATE_OFF
|
self._state = MediaPlayerState.OFF
|
||||||
except OSError:
|
except OSError:
|
||||||
self._state = STATE_OFF
|
self._state = MediaPlayerState.OFF
|
||||||
|
|
||||||
def turn_on(self) -> None:
|
def turn_on(self) -> None:
|
||||||
"""Turn the device on."""
|
"""Turn the device on."""
|
||||||
if self._state == STATE_OFF:
|
if self._state == MediaPlayerState.OFF:
|
||||||
self._send_key(self._keys.POWER)
|
self._send_key(self._keys.POWER)
|
||||||
|
|
||||||
def turn_off(self) -> None:
|
def turn_off(self) -> None:
|
||||||
"""Turn the device off."""
|
"""Turn the device off."""
|
||||||
if self._state != STATE_OFF:
|
if self._state != MediaPlayerState.OFF:
|
||||||
self._send_key(self._keys.POWER)
|
self._send_key(self._keys.POWER)
|
||||||
|
|
||||||
def media_previous_track(self) -> None:
|
def media_previous_track(self) -> None:
|
||||||
"""Channel down."""
|
"""Channel down."""
|
||||||
self._send_key(self._keys.CHAN_DOWN)
|
self._send_key(self._keys.CHAN_DOWN)
|
||||||
self._state = STATE_PLAYING
|
self._state = MediaPlayerState.PLAYING
|
||||||
|
|
||||||
def media_next_track(self) -> None:
|
def media_next_track(self) -> None:
|
||||||
"""Channel up."""
|
"""Channel up."""
|
||||||
self._send_key(self._keys.CHAN_UP)
|
self._send_key(self._keys.CHAN_UP)
|
||||||
self._state = STATE_PLAYING
|
self._state = MediaPlayerState.PLAYING
|
||||||
|
|
||||||
def media_play(self) -> None:
|
def media_play(self) -> None:
|
||||||
"""Send play command."""
|
"""Send play command."""
|
||||||
self._send_key(self._keys.PAUSE)
|
self._send_key(self._keys.PAUSE)
|
||||||
self._state = STATE_PLAYING
|
self._state = MediaPlayerState.PLAYING
|
||||||
|
|
||||||
def media_pause(self) -> None:
|
def media_pause(self) -> None:
|
||||||
"""Send pause command."""
|
"""Send pause command."""
|
||||||
self._send_key(self._keys.PAUSE)
|
self._send_key(self._keys.PAUSE)
|
||||||
self._state = STATE_PAUSED
|
self._state = MediaPlayerState.PAUSED
|
||||||
|
|
||||||
def media_play_pause(self) -> None:
|
def media_play_pause(self) -> None:
|
||||||
"""Send play/pause command."""
|
"""Send play/pause command."""
|
||||||
self._send_key(self._keys.PAUSE)
|
self._send_key(self._keys.PAUSE)
|
||||||
if self._state == STATE_PAUSED:
|
if self._state == MediaPlayerState.PAUSED:
|
||||||
self._state = STATE_PLAYING
|
self._state = MediaPlayerState.PLAYING
|
||||||
else:
|
else:
|
||||||
self._state = STATE_PAUSED
|
self._state = MediaPlayerState.PAUSED
|
||||||
|
|
||||||
def play_media(self, media_type: str, media_id: str, **kwargs: Any) -> None:
|
def play_media(self, media_type: str, media_id: str, **kwargs: Any) -> None:
|
||||||
"""Play media / switch to channel."""
|
"""Play media / switch to channel."""
|
||||||
if MEDIA_TYPE_CHANNEL == media_type:
|
if MediaType.CHANNEL == media_type:
|
||||||
try:
|
try:
|
||||||
self._select_channel(int(media_id))
|
self._select_channel(int(media_id))
|
||||||
self._state = STATE_PLAYING
|
self._state = MediaPlayerState.PLAYING
|
||||||
except ValueError:
|
except ValueError:
|
||||||
_LOGGER.error("Invalid channel: %s", media_id)
|
_LOGGER.error("Invalid channel: %s", media_id)
|
||||||
else:
|
else:
|
||||||
_LOGGER.error(
|
_LOGGER.error(
|
||||||
"Invalid media type %s. Supported type: %s",
|
"Invalid media type %s. Supported type: %s",
|
||||||
media_type,
|
media_type,
|
||||||
MEDIA_TYPE_CHANNEL,
|
MediaType.CHANNEL,
|
||||||
)
|
)
|
||||||
|
|
||||||
def _select_channel(self, channel):
|
def _select_channel(self, channel):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user