diff --git a/homeassistant/components/forked_daapd/const.py b/homeassistant/components/forked_daapd/const.py index 69438dc17f1..5668f941c6e 100644 --- a/homeassistant/components/forked_daapd/const.py +++ b/homeassistant/components/forked_daapd/const.py @@ -82,6 +82,7 @@ SUPPORTED_FEATURES = ( | MediaPlayerEntityFeature.TURN_OFF | MediaPlayerEntityFeature.PLAY_MEDIA | MediaPlayerEntityFeature.BROWSE_MEDIA + | MediaPlayerEntityFeature.MEDIA_ENQUEUE ) SUPPORTED_FEATURES_ZONE = ( MediaPlayerEntityFeature.VOLUME_SET diff --git a/homeassistant/components/group/media_player.py b/homeassistant/components/group/media_player.py index 15be22ddfbf..fa43ac76ea6 100644 --- a/homeassistant/components/group/media_player.py +++ b/homeassistant/components/group/media_player.py @@ -51,6 +51,7 @@ from homeassistant.helpers.event import async_track_state_change_event from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType, EventType KEY_CLEAR_PLAYLIST = "clear_playlist" +KEY_ENQUEUE = "enqueue" KEY_ON_OFF = "on_off" KEY_PAUSE_PLAY_STOP = "play" KEY_PLAY_MEDIA = "play_media" @@ -116,6 +117,7 @@ class MediaPlayerGroup(MediaPlayerEntity): self._entities = entities self._features: dict[str, set[str]] = { KEY_CLEAR_PLAYLIST: set(), + KEY_ENQUEUE: set(), KEY_ON_OFF: set(), KEY_PAUSE_PLAY_STOP: set(), KEY_PLAY_MEDIA: set(), @@ -192,6 +194,10 @@ class MediaPlayerGroup(MediaPlayerEntity): self._features[KEY_VOLUME].add(entity_id) else: self._features[KEY_VOLUME].discard(entity_id) + if new_features & MediaPlayerEntityFeature.MEDIA_ENQUEUE: + self._features[KEY_ENQUEUE].add(entity_id) + else: + self._features[KEY_ENQUEUE].discard(entity_id) async def async_added_to_hass(self) -> None: """Register listeners.""" @@ -434,6 +440,8 @@ class MediaPlayerGroup(MediaPlayerEntity): | MediaPlayerEntityFeature.VOLUME_SET | MediaPlayerEntityFeature.VOLUME_STEP ) + if self._features[KEY_ENQUEUE]: + supported_features |= MediaPlayerEntityFeature.MEDIA_ENQUEUE self._attr_supported_features = supported_features self.async_write_ha_state() diff --git a/homeassistant/components/heos/media_player.py b/homeassistant/components/heos/media_player.py index 9ad33caf073..3b6f5bcdd2f 100644 --- a/homeassistant/components/heos/media_player.py +++ b/homeassistant/components/heos/media_player.py @@ -52,6 +52,7 @@ BASE_SUPPORTED_FEATURES = ( | MediaPlayerEntityFeature.PLAY_MEDIA | MediaPlayerEntityFeature.GROUPING | MediaPlayerEntityFeature.BROWSE_MEDIA + | MediaPlayerEntityFeature.MEDIA_ENQUEUE ) PLAY_STATE_TO_STATE = { diff --git a/homeassistant/components/media_player/const.py b/homeassistant/components/media_player/const.py index 1cc90aa4904..f96d2a012c8 100644 --- a/homeassistant/components/media_player/const.py +++ b/homeassistant/components/media_player/const.py @@ -199,6 +199,7 @@ class MediaPlayerEntityFeature(IntFlag): BROWSE_MEDIA = 131072 REPEAT_SET = 262144 GROUPING = 524288 + MEDIA_ENQUEUE = 2097152 # These SUPPORT_* constants are deprecated as of Home Assistant 2022.5. diff --git a/homeassistant/components/media_player/services.yaml b/homeassistant/components/media_player/services.yaml index 5a513e4f3a0..536d229dbda 100644 --- a/homeassistant/components/media_player/services.yaml +++ b/homeassistant/components/media_player/services.yaml @@ -154,6 +154,9 @@ play_media: enqueue: name: Enqueue description: If the content should be played now or be added to the queue. + filter: + supported_features: + - media_player.MediaPlayerEntityFeature.MEDIA_ENQUEUE required: false selector: select: diff --git a/homeassistant/components/sonos/media_player.py b/homeassistant/components/sonos/media_player.py index 526ddd2bcc7..c519d237100 100644 --- a/homeassistant/components/sonos/media_player.py +++ b/homeassistant/components/sonos/media_player.py @@ -195,6 +195,7 @@ class SonosMediaPlayerEntity(SonosEntity, MediaPlayerEntity): MediaPlayerEntityFeature.BROWSE_MEDIA | MediaPlayerEntityFeature.CLEAR_PLAYLIST | MediaPlayerEntityFeature.GROUPING + | MediaPlayerEntityFeature.MEDIA_ENQUEUE | MediaPlayerEntityFeature.NEXT_TRACK | MediaPlayerEntityFeature.PAUSE | MediaPlayerEntityFeature.PLAY diff --git a/homeassistant/components/squeezebox/media_player.py b/homeassistant/components/squeezebox/media_player.py index d3fae39bc4d..d57ba8ba49d 100644 --- a/homeassistant/components/squeezebox/media_player.py +++ b/homeassistant/components/squeezebox/media_player.py @@ -234,6 +234,7 @@ class SqueezeBoxEntity(MediaPlayerEntity): | MediaPlayerEntityFeature.CLEAR_PLAYLIST | MediaPlayerEntityFeature.STOP | MediaPlayerEntityFeature.GROUPING + | MediaPlayerEntityFeature.MEDIA_ENQUEUE ) def __init__(self, player): diff --git a/tests/components/group/test_media_player.py b/tests/components/group/test_media_player.py index 4549a7f5fec..3524c0f1e88 100644 --- a/tests/components/group/test_media_player.py +++ b/tests/components/group/test_media_player.py @@ -191,7 +191,9 @@ async def test_supported_features(hass: HomeAssistant) -> None: | MediaPlayerEntityFeature.PLAY | MediaPlayerEntityFeature.STOP ) - play_media = MediaPlayerEntityFeature.PLAY_MEDIA + play_media = ( + MediaPlayerEntityFeature.PLAY_MEDIA | MediaPlayerEntityFeature.MEDIA_ENQUEUE + ) volume = ( MediaPlayerEntityFeature.VOLUME_MUTE | MediaPlayerEntityFeature.VOLUME_SET