mirror of
https://github.com/home-assistant/core.git
synced 2025-04-23 08:47:57 +00:00
Apple TV power management (#51520)
This commit is contained in:
parent
a9ccd70e71
commit
8d46802558
@ -6,6 +6,7 @@ from pyatv.const import (
|
||||
FeatureName,
|
||||
FeatureState,
|
||||
MediaType,
|
||||
PowerState,
|
||||
RepeatState,
|
||||
ShuffleState,
|
||||
)
|
||||
@ -87,12 +88,14 @@ class AppleTvMediaPlayer(AppleTVEntity, MediaPlayerEntity):
|
||||
"""Handle when connection is made to device."""
|
||||
self.atv.push_updater.listener = self
|
||||
self.atv.push_updater.start()
|
||||
self.atv.power.listener = self
|
||||
|
||||
@callback
|
||||
def async_device_disconnected(self):
|
||||
"""Handle when connection was lost to device."""
|
||||
self.atv.push_updater.stop()
|
||||
self.atv.push_updater.listener = None
|
||||
self.atv.power.listener = None
|
||||
|
||||
@property
|
||||
def state(self):
|
||||
@ -101,6 +104,11 @@ class AppleTvMediaPlayer(AppleTVEntity, MediaPlayerEntity):
|
||||
return None
|
||||
if self.atv is None:
|
||||
return STATE_OFF
|
||||
if (
|
||||
self._is_feature_available(FeatureName.PowerState)
|
||||
and self.atv.power.power_state == PowerState.Off
|
||||
):
|
||||
return STATE_STANDBY
|
||||
if self._playing:
|
||||
state = self._playing.device_state
|
||||
if state in (DeviceState.Idle, DeviceState.Loading):
|
||||
@ -125,6 +133,11 @@ class AppleTvMediaPlayer(AppleTVEntity, MediaPlayerEntity):
|
||||
self._playing = None
|
||||
self.async_write_ha_state()
|
||||
|
||||
@callback
|
||||
def powerstate_update(self, old_state: PowerState, new_state: PowerState):
|
||||
"""Update power state when it changes."""
|
||||
self.async_write_ha_state()
|
||||
|
||||
@property
|
||||
def app_id(self):
|
||||
"""ID of the current running app."""
|
||||
@ -239,12 +252,16 @@ class AppleTvMediaPlayer(AppleTVEntity, MediaPlayerEntity):
|
||||
|
||||
async def async_turn_on(self):
|
||||
"""Turn the media player on."""
|
||||
await self.manager.connect()
|
||||
if self._is_feature_available(FeatureName.TurnOn):
|
||||
await self.atv.power.turn_on()
|
||||
|
||||
async def async_turn_off(self):
|
||||
"""Turn the media player off."""
|
||||
self._playing = None
|
||||
await self.manager.disconnect()
|
||||
if (self._is_feature_available(FeatureName.TurnOff)) and (
|
||||
not self._is_feature_available(FeatureName.PowerState)
|
||||
or self.atv.power.power_state == PowerState.On
|
||||
):
|
||||
await self.atv.power.turn_off()
|
||||
|
||||
async def async_media_play_pause(self):
|
||||
"""Pause media on media player."""
|
||||
|
Loading…
x
Reference in New Issue
Block a user