Added Alexa Music
This commit is contained in:
@@ -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)
|
||||
Reference in New Issue
Block a user