parent
34ac541493
commit
06d47185fe
4 changed files with 70 additions and 2 deletions
|
@ -51,3 +51,13 @@ class SnapcastConfigFlow(ConfigFlow, domain=DOMAIN):
|
|||
return self.async_show_form(
|
||||
step_id="user", data_schema=SNAPCAST_SCHEMA, errors=errors
|
||||
)
|
||||
|
||||
async def async_step_import(self, import_config: dict[str, str]) -> FlowResult:
|
||||
"""Import a config entry from configuration.yaml."""
|
||||
self._async_abort_entries_match(
|
||||
{
|
||||
CONF_HOST: (import_config[CONF_HOST]),
|
||||
CONF_PORT: (import_config[CONF_PORT]),
|
||||
}
|
||||
)
|
||||
return self.async_create_entry(title=DEFAULT_TITLE, data=import_config)
|
||||
|
|
|
@ -1,19 +1,24 @@
|
|||
"""Support for interacting with Snapcast clients."""
|
||||
from __future__ import annotations
|
||||
|
||||
from snapcast.control.server import Snapserver
|
||||
import logging
|
||||
|
||||
from snapcast.control.server import CONTROL_PORT, Snapserver
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.components.media_player import (
|
||||
PLATFORM_SCHEMA,
|
||||
MediaPlayerEntity,
|
||||
MediaPlayerEntityFeature,
|
||||
MediaPlayerState,
|
||||
)
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry
|
||||
from homeassistant.const import CONF_HOST, CONF_PORT
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers import config_validation as cv, entity_platform
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.helpers.issue_registry import IssueSeverity, async_create_issue
|
||||
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
|
||||
|
||||
from .const import (
|
||||
ATTR_LATENCY,
|
||||
|
@ -30,6 +35,12 @@ from .const import (
|
|||
SERVICE_UNJOIN,
|
||||
)
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
|
||||
{vol.Required(CONF_HOST): cv.string, vol.Optional(CONF_PORT): cv.port}
|
||||
)
|
||||
|
||||
STREAM_STATUS = {
|
||||
"idle": MediaPlayerState.IDLE,
|
||||
"playing": MediaPlayerState.PLAYING,
|
||||
|
@ -82,6 +93,32 @@ async def async_setup_entry(
|
|||
].hass_async_add_entities = async_add_entities
|
||||
|
||||
|
||||
async def async_setup_platform(
|
||||
hass: HomeAssistant,
|
||||
config: ConfigType,
|
||||
async_add_entities: AddEntitiesCallback,
|
||||
discovery_info: DiscoveryInfoType | None = None,
|
||||
) -> None:
|
||||
"""Set up the Snapcast platform."""
|
||||
async_create_issue(
|
||||
hass,
|
||||
DOMAIN,
|
||||
"deprecated_yaml",
|
||||
breaks_in_ha_version="2023.11.0",
|
||||
is_fixable=False,
|
||||
severity=IssueSeverity.WARNING,
|
||||
translation_key="deprecated_yaml",
|
||||
)
|
||||
|
||||
config[CONF_PORT] = config.get(CONF_PORT, CONTROL_PORT)
|
||||
|
||||
hass.async_create_task(
|
||||
hass.config_entries.flow.async_init(
|
||||
DOMAIN, context={"source": SOURCE_IMPORT}, data=config
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
async def handle_async_join(entity, service_call):
|
||||
"""Handle the entity service join."""
|
||||
if not isinstance(entity, SnapcastClientDevice):
|
||||
|
|
|
@ -17,5 +17,11 @@
|
|||
"cannot_connect": "[%key:common::config_flow::error::cannot_connect%]",
|
||||
"invalid_host": "[%key:common::config_flow::error::invalid_host%]"
|
||||
}
|
||||
},
|
||||
"issues": {
|
||||
"deprecated_yaml": {
|
||||
"title": "The Snapcast YAML configuration is being removed",
|
||||
"description": "Configuring Snapcast using YAML is being removed.\n\nYour existing YAML configuration has been imported into the UI automatically.\n\nRemove the Snapcast YAML configuration from your configuration.yaml file and restart Home Assistant to fix this issue."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -93,3 +93,18 @@ async def test_abort(
|
|||
|
||||
assert result["type"] == FlowResultType.ABORT
|
||||
assert result["reason"] == "already_configured"
|
||||
|
||||
|
||||
async def test_import(hass: HomeAssistant) -> None:
|
||||
"""Test successful import."""
|
||||
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
DOMAIN,
|
||||
context={"source": config_entries.SOURCE_IMPORT},
|
||||
data=TEST_CONNECTION,
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert result["type"] == FlowResultType.CREATE_ENTRY
|
||||
assert result["title"] == "Snapcast"
|
||||
assert result["data"] == {CONF_HOST: "snapserver.test", CONF_PORT: 1705}
|
||||
|
|
Loading…
Add table
Reference in a new issue