Enforce MediaPlayerEntityFeature (#82462)

This commit is contained in:
epenet 2022-11-22 07:15:37 +01:00 committed by GitHub
parent a225fc456f
commit 6f05a74686
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 26 additions and 24 deletions

View File

@ -775,10 +775,10 @@ class BluesoundPlayer(MediaPlayerEntity):
return None return None
@property @property
def supported_features(self) -> MediaPlayerEntityFeature | int: def supported_features(self) -> MediaPlayerEntityFeature:
"""Flag of media commands that are supported.""" """Flag of media commands that are supported."""
if self._status is None: if self._status is None:
return 0 return MediaPlayerEntityFeature(0)
if self.is_grouped and not self.is_master: if self.is_grouped and not self.is_master:
return ( return (

View File

@ -478,15 +478,15 @@ class DlnaDmrEntity(MediaPlayerEntity):
return MediaPlayerState.IDLE return MediaPlayerState.IDLE
@property @property
def supported_features(self) -> MediaPlayerEntityFeature | int: def supported_features(self) -> MediaPlayerEntityFeature:
"""Flag media player features that are supported at this moment. """Flag media player features that are supported at this moment.
Supported features may change as the device enters different states. Supported features may change as the device enters different states.
""" """
if not self._device: if not self._device:
return 0 return MediaPlayerEntityFeature(0)
supported_features = 0 supported_features = MediaPlayerEntityFeature(0)
if self._device.has_volume_level: if self._device.has_volume_level:
supported_features |= MediaPlayerEntityFeature.VOLUME_SET supported_features |= MediaPlayerEntityFeature.VOLUME_SET

View File

@ -284,11 +284,11 @@ class EmbyDevice(MediaPlayerEntity):
return self.device.media_album_artist return self.device.media_album_artist
@property @property
def supported_features(self) -> MediaPlayerEntityFeature | int: def supported_features(self) -> MediaPlayerEntityFeature:
"""Flag media player features that are supported.""" """Flag media player features that are supported."""
if self.supports_remote_control: if self.supports_remote_control:
return SUPPORT_EMBY return SUPPORT_EMBY
return 0 return MediaPlayerEntityFeature(0)
async def async_media_play(self) -> None: async def async_media_play(self) -> None:
"""Play media.""" """Play media."""

View File

@ -405,7 +405,7 @@ class MediaPlayerGroup(MediaPlayerEntity):
else: else:
self._state = MediaPlayerState.OFF self._state = MediaPlayerState.OFF
supported_features = 0 supported_features = MediaPlayerEntityFeature(0)
if self._features[KEY_CLEAR_PLAYLIST]: if self._features[KEY_CLEAR_PLAYLIST]:
supported_features |= MediaPlayerEntityFeature.CLEAR_PLAYLIST supported_features |= MediaPlayerEntityFeature.CLEAR_PLAYLIST
if self._features[KEY_TRACKS]: if self._features[KEY_TRACKS]:

View File

@ -80,9 +80,9 @@ class HomeKitTelevision(HomeKitEntity, MediaPlayerEntity):
] ]
@property @property
def supported_features(self) -> MediaPlayerEntityFeature | int: def supported_features(self) -> MediaPlayerEntityFeature:
"""Flag media player features that are supported.""" """Flag media player features that are supported."""
features = 0 features = MediaPlayerEntityFeature(0)
if self.service.has(CharacteristicsTypes.ACTIVE_IDENTIFIER): if self.service.has(CharacteristicsTypes.ACTIVE_IDENTIFIER):
features |= MediaPlayerEntityFeature.SELECT_SOURCE features |= MediaPlayerEntityFeature.SELECT_SOURCE

View File

@ -198,11 +198,11 @@ class JellyfinMediaPlayer(JellyfinEntity, MediaPlayerEntity):
return get_artwork_url(self.coordinator.api_client, self.now_playing, 150) return get_artwork_url(self.coordinator.api_client, self.now_playing, 150)
@property @property
def supported_features(self) -> MediaPlayerEntityFeature | int: def supported_features(self) -> MediaPlayerEntityFeature:
"""Flag media player features that are supported.""" """Flag media player features that are supported."""
commands: list[str] = self.capabilities.get("SupportedCommands", []) commands: list[str] = self.capabilities.get("SupportedCommands", [])
controllable = self.capabilities.get("SupportsMediaControl", False) controllable = self.capabilities.get("SupportsMediaControl", False)
features = 0 features = MediaPlayerEntityFeature(0)
if controllable: if controllable:
features |= ( features |= (

View File

@ -492,7 +492,7 @@ class MediaPlayerEntity(Entity):
_attr_source_list: list[str] | None = None _attr_source_list: list[str] | None = None
_attr_source: str | None = None _attr_source: str | None = None
_attr_state: MediaPlayerState | str | None = None _attr_state: MediaPlayerState | str | None = None
_attr_supported_features: MediaPlayerEntityFeature | int = 0 _attr_supported_features: MediaPlayerEntityFeature = MediaPlayerEntityFeature(0)
_attr_volume_level: float | None = None _attr_volume_level: float | None = None
# Implement these for your media player # Implement these for your media player
@ -692,7 +692,7 @@ class MediaPlayerEntity(Entity):
return self._attr_group_members return self._attr_group_members
@property @property
def supported_features(self) -> MediaPlayerEntityFeature | int: def supported_features(self) -> MediaPlayerEntityFeature:
"""Flag media player features that are supported.""" """Flag media player features that are supported."""
return self._attr_supported_features return self._attr_supported_features

View File

@ -338,10 +338,10 @@ class MpdDevice(MediaPlayerEntity):
return None return None
@property @property
def supported_features(self) -> MediaPlayerEntityFeature | int: def supported_features(self) -> MediaPlayerEntityFeature:
"""Flag media player features that are supported.""" """Flag media player features that are supported."""
if self._status is None: if self._status is None:
return 0 return MediaPlayerEntityFeature(0)
supported = SUPPORT_MPD supported = SUPPORT_MPD
if "volume" in self._status: if "volume" in self._status:

View File

@ -453,11 +453,11 @@ class UniversalMediaPlayer(MediaPlayerEntity):
return self._override_or_child_attr(ATTR_MEDIA_SHUFFLE) return self._override_or_child_attr(ATTR_MEDIA_SHUFFLE)
@property @property
def supported_features(self) -> MediaPlayerEntityFeature | int: def supported_features(self) -> MediaPlayerEntityFeature:
"""Flag media player features that are supported.""" """Flag media player features that are supported."""
flags: MediaPlayerEntityFeature | int = ( flags: MediaPlayerEntityFeature = self._child_attr(
self._child_attr(ATTR_SUPPORTED_FEATURES) or 0 ATTR_SUPPORTED_FEATURES
) ) or MediaPlayerEntityFeature(0)
if SERVICE_TURN_ON in self._cmds: if SERVICE_TURN_ON in self._cmds:
flags |= MediaPlayerEntityFeature.TURN_ON flags |= MediaPlayerEntityFeature.TURN_ON

View File

@ -137,7 +137,7 @@ class LgWebOSMediaPlayerEntity(RestoreEntity, MediaPlayerEntity):
self._current_source = None self._current_source = None
self._source_list: dict = {} self._source_list: dict = {}
self._supported_features: MediaPlayerEntityFeature | int = 0 self._supported_features = MediaPlayerEntityFeature(0)
self._update_states() self._update_states()
async def async_added_to_hass(self) -> None: async def async_added_to_hass(self) -> None:
@ -157,7 +157,9 @@ class LgWebOSMediaPlayerEntity(RestoreEntity, MediaPlayerEntity):
and (state := await self.async_get_last_state()) is not None and (state := await self.async_get_last_state()) is not None
): ):
self._supported_features = ( self._supported_features = (
state.attributes.get(ATTR_SUPPORTED_FEATURES, 0) state.attributes.get(
ATTR_SUPPORTED_FEATURES, MediaPlayerEntityFeature(0)
)
& ~MediaPlayerEntityFeature.TURN_ON & ~MediaPlayerEntityFeature.TURN_ON
) )
@ -314,7 +316,7 @@ class LgWebOSMediaPlayerEntity(RestoreEntity, MediaPlayerEntity):
await self._client.connect() await self._client.connect()
@property @property
def supported_features(self) -> MediaPlayerEntityFeature | int: def supported_features(self) -> MediaPlayerEntityFeature:
"""Flag media player features that are supported.""" """Flag media player features that are supported."""
if self._wrapper.turn_on: if self._wrapper.turn_on:
return self._supported_features | MediaPlayerEntityFeature.TURN_ON return self._supported_features | MediaPlayerEntityFeature.TURN_ON

View File

@ -1790,7 +1790,7 @@ _INHERITANCE_MATCH: dict[str, list[ClassTypeHintMatch]] = {
), ),
TypeHintMatch( TypeHintMatch(
function_name="supported_features", function_name="supported_features",
return_type=["MediaPlayerEntityFeature", "int"], return_type="MediaPlayerEntityFeature",
), ),
TypeHintMatch( TypeHintMatch(
function_name="turn_on", function_name="turn_on",