Added Alexa Music

This commit is contained in:
2026-07-17 10:12:15 -04:00
parent 92c5268dc8
commit 28a8cb98f6
757 changed files with 151171 additions and 85450 deletions
@@ -0,0 +1,127 @@
# ty:ignore[unresolved-import]
"""Music Assistant Queue Actions Websocket Commands."""
from __future__ import annotations
from typing import TYPE_CHECKING
import voluptuous as vol
from homeassistant.components import websocket_api
from homeassistant.helpers import aiohttp_client
if TYPE_CHECKING:
from homeassistant.core import HomeAssistant
from .const import LOGGER
from .utils import (
download_and_encode_image,
download_single_image_from_image_data,
get_entity_info,
get_user_info,
)
@websocket_api.websocket_command(
{
vol.Required("type"): "mass_queue/get_info",
vol.Required("entity_id"): str,
},
)
def api_get_entity_info(
hass: HomeAssistant,
connection: websocket_api.ActiveConnection,
msg: dict,
) -> None:
"""Returns Music Assistant player information on a given player."""
LOGGER.debug(f"Got message: {msg}")
entity_id = msg["entity_id"]
result = get_entity_info(hass, entity_id)
LOGGER.debug(f"Sending result {result}")
connection.send_result(msg["id"], result)
@websocket_api.websocket_command(
{
vol.Required("type"): "mass_queue/download_and_encode_image",
vol.Required("url"): str,
},
)
@websocket_api.async_response
async def api_download_and_encode_image(
hass: HomeAssistant, # noqa: ARG001
connection: websocket_api.ActiveConnection,
msg: dict,
) -> None:
"""Download images and return them as b64 encoded."""
LOGGER.debug(f"Got message: {msg}")
url = msg["url"]
result = await download_and_encode_image(url)
connection.send_result(msg["id"], result)
@websocket_api.websocket_command(
{
vol.Required("type"): "mass_queue/encode_images",
vol.Required("entity_id"): str,
vol.Required("images"): list,
},
)
@websocket_api.async_response
async def api_download_images(
hass: HomeAssistant,
connection: websocket_api.ActiveConnection,
msg: dict,
) -> None:
"""Download images and return them as b64 encoded."""
LOGGER.debug(f"Received message: {msg}")
session = aiohttp_client.async_get_clientsession(hass)
images = msg["images"]
result = []
entity_id = msg["entity_id"]
for image in images:
img = await download_single_image_from_image_data(
image,
entity_id,
hass,
session,
)
image["encoded"] = img
result.append(image)
connection.send_result(msg["id"], result)
@websocket_api.websocket_command(
{
vol.Required("type"): "mass_queue/get_playlist_items",
vol.Required("playlist_uri"): str,
},
)
@websocket_api.async_response
async def get_playlist_items(
hass: HomeAssistant,
connection: websocket_api.ActiveConnection,
msg: dict,
) -> None:
"""Retrieves all playlist items."""
@websocket_api.websocket_command(
{
vol.Required("type"): "mass_queue/get_user_info",
vol.Required("entity_id"): str,
vol.Required("username"): str,
},
)
@websocket_api.async_response
async def api_get_user_info(
hass: HomeAssistant,
connection: websocket_api.ActiveConnection,
msg: dict,
) -> None:
"""Returns the information for a given user."""
entity_id = msg["entity_id"]
username = msg["username"]
LOGGER.debug(f"Received message {msg}")
result = await get_user_info(hass, entity_id, username)
LOGGER.debug(f"Sending result {result}")
connection.send_result(msg["id"], result)