1
mirror of https://github.com/home-assistant/core synced 2024-09-03 08:14:07 +02:00
ha-core/homeassistant/components/mobile_app/util.py

56 lines
1.5 KiB
Python

"""Mobile app utility functions."""
from __future__ import annotations
from typing import TYPE_CHECKING
from homeassistant.core import callback
from .const import (
ATTR_APP_DATA,
ATTR_PUSH_TOKEN,
ATTR_PUSH_URL,
ATTR_PUSH_WEBSOCKET_CHANNEL,
DATA_CONFIG_ENTRIES,
DATA_DEVICES,
DATA_NOTIFY,
DOMAIN,
)
if TYPE_CHECKING:
from .notify import MobileAppNotificationService
@callback
def webhook_id_from_device_id(hass, device_id: str) -> str | None:
"""Get webhook ID from device ID."""
if DOMAIN not in hass.data:
return None
for cur_webhook_id, cur_device in hass.data[DOMAIN][DATA_DEVICES].items():
if cur_device.id == device_id:
return cur_webhook_id
return None
@callback
def supports_push(hass, webhook_id: str) -> bool:
"""Return if push notifications is supported."""
config_entry = hass.data[DOMAIN][DATA_CONFIG_ENTRIES][webhook_id]
app_data = config_entry.data[ATTR_APP_DATA]
return (
ATTR_PUSH_TOKEN in app_data and ATTR_PUSH_URL in app_data
) or ATTR_PUSH_WEBSOCKET_CHANNEL in app_data
@callback
def get_notify_service(hass, webhook_id: str) -> str | None:
"""Return the notify service for this webhook ID."""
notify_service: MobileAppNotificationService = hass.data[DOMAIN][DATA_NOTIFY]
for target_service, target_webhook_id in notify_service.registered_targets.items():
if target_webhook_id == webhook_id:
return target_service
return None