"""Shared config helpers for the NVIDIA Shield integration.""" import os from dataclasses import dataclass from homeassistant.core import HomeAssistant from .const import ( CONF_ADB_HOST, CONF_ADB_PORT, CONF_PROTOCOL_HOST, DEFAULT_ADB_PORT, DOMAIN, ) @dataclass class AdbConfig: """Resolved ADB connection settings for a config entry.""" host: str port: int key_path: str def adb_key_path(hass: HomeAssistant) -> str: """Path of the ADB private key for this integration (may not exist yet).""" return os.path.join(hass.config.config_dir, ".storage", DOMAIN, "adbkey") def protocol_cert_paths(hass: HomeAssistant) -> tuple[str, str]: """Local (certfile, keyfile) paths for the remote protocol client. Mirrors core androidtv_remote's storage pattern: private material under ``.storage//``. Shared between config-flow pairing and runtime — an entry aborts duplicate setup by unique_id (= device MAC), so one pair of files suffices per install. """ base = os.path.join(hass.config.config_dir, ".storage", DOMAIN) os.makedirs(base, exist_ok=True) return os.path.join(base, "client.pem"), os.path.join(base, "client.key") def resolve_adb_config(hass: HomeAssistant, entry) -> AdbConfig | None: """Resolve host/port/key_path for the entry's ADB connection, or None. Priority: the entry's own address fields (t41: no other integration is consulted) — the ADB field first, then the protocol field, since both describe the same Shield. """ host = entry.options.get(CONF_ADB_HOST) or entry.options.get(CONF_PROTOCOL_HOST) if not host: return None port = int(entry.options.get(CONF_ADB_PORT, DEFAULT_ADB_PORT)) return AdbConfig(host=host, port=port, key_path=adb_key_path(hass))