67 lines
2.1 KiB
Python
67 lines
2.1 KiB
Python
"""Panel for C.A.F.E."""
|
|
import os
|
|
import logging
|
|
from pathlib import Path
|
|
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.components import frontend, panel_custom
|
|
from homeassistant.components.http import StaticPathConfig
|
|
|
|
from .const import DOMAIN, PANEL_TITLE, PANEL_ICON
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
PANEL_URL = f"/api/{DOMAIN}_panel"
|
|
PANEL_NAME = f"{DOMAIN}-panel"
|
|
|
|
|
|
async def async_register_panel(hass: HomeAssistant) -> None:
|
|
"""Register the C.A.F.E. panel."""
|
|
# Get the path to the www folder within the component
|
|
www_path = Path(__file__).parent / "www"
|
|
|
|
# Register static path for the frontend assets
|
|
await hass.http.async_register_static_paths([
|
|
StaticPathConfig("/cafe-hass", str(www_path), False)
|
|
])
|
|
|
|
# The panel wrapper has a fixed name (not hashed)
|
|
wrapper_path = www_path / "assets" / "panel-wrapper.js"
|
|
if not wrapper_path.exists():
|
|
_LOGGER.error("panel-wrapper.js not found in assets directory")
|
|
_LOGGER.error(f"www path: {www_path}, assets exist: {(www_path / 'assets').exists()}")
|
|
return
|
|
|
|
# Add cache-busting parameter to force fresh load
|
|
import time
|
|
cache_bust = int(time.time())
|
|
module_url = f"/cafe-hass/assets/panel-wrapper.js?v={cache_bust}"
|
|
|
|
# First try to unregister any existing panel
|
|
try:
|
|
hass.data.get("frontend_panels", {}).pop(DOMAIN, None)
|
|
_LOGGER.info("Removed any existing panel registration")
|
|
except:
|
|
pass
|
|
|
|
# Register the panel as a custom panel with module_url
|
|
await panel_custom.async_register_panel(
|
|
hass,
|
|
webcomponent_name=PANEL_NAME,
|
|
frontend_url_path=DOMAIN,
|
|
module_url=module_url,
|
|
sidebar_title=PANEL_TITLE,
|
|
sidebar_icon=PANEL_ICON,
|
|
require_admin=True,
|
|
config={},
|
|
config_panel_domain=DOMAIN,
|
|
)
|
|
|
|
_LOGGER.info("C.A.F.E. panel registered successfully with iframe wrapper")
|
|
|
|
|
|
def async_unregister_panel(hass: HomeAssistant) -> None:
|
|
"""Unregister the C.A.F.E. panel."""
|
|
frontend.async_remove_panel(hass, DOMAIN)
|
|
_LOGGER.info("C.A.F.E. panel unregistered")
|