122 lines
4.0 KiB
Python
122 lines
4.0 KiB
Python
"""Register_commands."""
|
|
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING, Any
|
|
|
|
from homeassistant.components import websocket_api
|
|
from homeassistant.core import HomeAssistant, callback
|
|
from homeassistant.helpers.dispatcher import async_dispatcher_connect
|
|
import voluptuous as vol
|
|
|
|
from ..const import DOMAIN
|
|
from .critical import hacs_critical_acknowledge, hacs_critical_list
|
|
from .repositories import (
|
|
hacs_repositories_add,
|
|
hacs_repositories_clear_new,
|
|
hacs_repositories_list,
|
|
hacs_repositories_remove,
|
|
hacs_repositories_removed,
|
|
)
|
|
from .repository import (
|
|
hacs_repository_beta,
|
|
hacs_repository_download,
|
|
hacs_repository_ignore,
|
|
hacs_repository_info,
|
|
hacs_repository_refresh,
|
|
hacs_repository_release_notes,
|
|
hacs_repository_remove,
|
|
hacs_repository_state,
|
|
hacs_repository_version,
|
|
)
|
|
|
|
if TYPE_CHECKING:
|
|
from ..base import HacsBase
|
|
|
|
|
|
@callback
|
|
def async_register_websocket_commands(hass: HomeAssistant) -> None:
|
|
"""Register_commands."""
|
|
websocket_api.async_register_command(hass, hacs_info)
|
|
websocket_api.async_register_command(hass, hacs_subscribe)
|
|
|
|
websocket_api.async_register_command(hass, hacs_repository_info)
|
|
websocket_api.async_register_command(hass, hacs_repository_download)
|
|
websocket_api.async_register_command(hass, hacs_repository_ignore)
|
|
websocket_api.async_register_command(hass, hacs_repository_state)
|
|
websocket_api.async_register_command(hass, hacs_repository_version)
|
|
websocket_api.async_register_command(hass, hacs_repository_beta)
|
|
websocket_api.async_register_command(hass, hacs_repository_refresh)
|
|
websocket_api.async_register_command(hass, hacs_repository_release_notes)
|
|
websocket_api.async_register_command(hass, hacs_repository_remove)
|
|
|
|
websocket_api.async_register_command(hass, hacs_critical_acknowledge)
|
|
websocket_api.async_register_command(hass, hacs_critical_list)
|
|
|
|
websocket_api.async_register_command(hass, hacs_repositories_list)
|
|
websocket_api.async_register_command(hass, hacs_repositories_add)
|
|
websocket_api.async_register_command(hass, hacs_repositories_clear_new)
|
|
websocket_api.async_register_command(hass, hacs_repositories_removed)
|
|
websocket_api.async_register_command(hass, hacs_repositories_remove)
|
|
|
|
|
|
@websocket_api.websocket_command(
|
|
{
|
|
vol.Required("type"): "hacs/subscribe",
|
|
vol.Required("signal"): str,
|
|
}
|
|
)
|
|
@websocket_api.require_admin
|
|
@websocket_api.async_response
|
|
async def hacs_subscribe(
|
|
hass: HomeAssistant,
|
|
connection: websocket_api.ActiveConnection,
|
|
msg: dict,
|
|
) -> None:
|
|
"""Handle websocket subscriptions."""
|
|
|
|
@callback
|
|
def forward_messages(data: dict | None = None):
|
|
"""Forward events to websocket."""
|
|
connection.send_message(websocket_api.event_message(msg["id"], data))
|
|
|
|
connection.subscriptions[msg["id"]] = async_dispatcher_connect(
|
|
hass,
|
|
msg["signal"],
|
|
forward_messages,
|
|
)
|
|
connection.send_message(websocket_api.result_message(msg["id"]))
|
|
|
|
|
|
@websocket_api.websocket_command(
|
|
{
|
|
vol.Required("type"): "hacs/info",
|
|
}
|
|
)
|
|
@websocket_api.require_admin
|
|
@websocket_api.async_response
|
|
async def hacs_info(
|
|
hass: HomeAssistant,
|
|
connection: websocket_api.ActiveConnection,
|
|
msg: dict[str, Any],
|
|
) -> None:
|
|
"""Return information about HACS."""
|
|
hacs: HacsBase = hass.data.get(DOMAIN)
|
|
connection.send_message(
|
|
websocket_api.result_message(
|
|
msg["id"],
|
|
{
|
|
"categories": hacs.common.categories,
|
|
"country": hacs.configuration.country,
|
|
"debug": hacs.configuration.debug,
|
|
"dev": hacs.configuration.dev,
|
|
"disabled_reason": hacs.system.disabled_reason,
|
|
"experimental": hacs.configuration.experimental,
|
|
"has_pending_tasks": hacs.queue.has_pending_tasks,
|
|
"lovelace_mode": hacs.core.lovelace_mode,
|
|
"stage": hacs.stage,
|
|
"startup": hacs.status.startup,
|
|
"version": hacs.version,
|
|
},
|
|
)
|
|
)
|