From 477d030e6ccb2fa835bfc39b9a76d2dcbc9dab3f Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Mon, 26 May 2025 17:30:11 +0200 Subject: [PATCH] Add action to Music Assistant to add currently playing item to favorites --- homeassistant/components/music_assistant/icons.json | 3 ++- .../components/music_assistant/media_player.py | 13 +++++++++++++ .../components/music_assistant/services.yaml | 6 ++++++ .../components/music_assistant/strings.json | 4 ++++ 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/music_assistant/icons.json b/homeassistant/components/music_assistant/icons.json index 0fa64b8d273..4eb1a05a427 100644 --- a/homeassistant/components/music_assistant/icons.json +++ b/homeassistant/components/music_assistant/icons.json @@ -5,6 +5,7 @@ "transfer_queue": { "service": "mdi:transfer" }, "search": { "service": "mdi:magnify" }, "get_queue": { "service": "mdi:playlist-music" }, - "get_library": { "service": "mdi:music-box-multiple" } + "get_library": { "service": "mdi:music-box-multiple" }, + "add_currently_playing_to_favorites": { "service": "mdi:heart-plus" } } } diff --git a/homeassistant/components/music_assistant/media_player.py b/homeassistant/components/music_assistant/media_player.py index a11e334824a..b0bce6d83b8 100644 --- a/homeassistant/components/music_assistant/media_player.py +++ b/homeassistant/components/music_assistant/media_player.py @@ -118,6 +118,7 @@ SERVICE_PLAY_MEDIA_ADVANCED = "play_media" SERVICE_PLAY_ANNOUNCEMENT = "play_announcement" SERVICE_TRANSFER_QUEUE = "transfer_queue" SERVICE_GET_QUEUE = "get_queue" +SERVICE_ADD_FAVORITE = "add_currently_playing_to_favorites" def catch_musicassistant_error[_R, **P]( @@ -211,6 +212,11 @@ async def async_setup_entry( func="_async_handle_get_queue", supports_response=SupportsResponse.ONLY, ) + platform.async_register_entity_service( + SERVICE_ADD_FAVORITE, + schema=None, + func="_async_handle_add_currently_playing_to_favorites", + ) class MusicAssistantPlayer(MusicAssistantEntity, MediaPlayerEntity): @@ -611,6 +617,13 @@ class MusicAssistantPlayer(MusicAssistantEntity, MediaPlayerEntity): ) return response + @catch_musicassistant_error + async def _async_handle_add_currently_playing_to_favorites(self) -> None: + """Handle action to add currently playing item to favorites.""" + await self.mass.players.add_currently_playing_to_favorites( + self.player_id, + ) + async def async_browse_media( self, media_content_type: MediaType | str | None = None, diff --git a/homeassistant/components/music_assistant/services.yaml b/homeassistant/components/music_assistant/services.yaml index a3715ea2580..d0da33f6da7 100644 --- a/homeassistant/components/music_assistant/services.yaml +++ b/homeassistant/components/music_assistant/services.yaml @@ -100,6 +100,12 @@ get_queue: supported_features: - media_player.MediaPlayerEntityFeature.PLAY_MEDIA +add_currently_playing_to_favorites: + target: + entity: + domain: media_player + integration: music_assistant + search: fields: config_entry_id: diff --git a/homeassistant/components/music_assistant/strings.json b/homeassistant/components/music_assistant/strings.json index c7e7baf88f6..ad5c83cd743 100644 --- a/homeassistant/components/music_assistant/strings.json +++ b/homeassistant/components/music_assistant/strings.json @@ -104,6 +104,10 @@ "name": "Get playerQueue details (advanced)", "description": "Retrieves the details of the currently active queue of a Music Assistant player." }, + "add_currently_playing_to_favorites": { + "name": "Add currently playing to favorites", + "description": "Adds the currently playing item on a Music Assistant player to the favorites." + }, "search": { "name": "Search Music Assistant", "description": "Performs a global search on the Music Assistant library and all providers.",